[lldb] [llvm] [lldb] Add new per-language frame-format variables for formatting function names (PR #131836)
David Spickett via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 25 08:13:21 PDT 2025
================
@@ -319,3 +320,255 @@ TEST(MangledTest, NameIndexes_FindFunctionSymbols) {
EXPECT_EQ(0, Count("undemangable", eFunctionNameTypeBase));
EXPECT_EQ(0, Count("undemangable", eFunctionNameTypeMethod));
}
+
+TEST(MangledTest, DemangledNameInfo_SetMangledResets) {
+ Mangled mangled;
+ EXPECT_EQ(mangled.GetDemangledInfo(), std::nullopt);
+
+ mangled.SetMangledName(ConstString("_Z3foov"));
+ ASSERT_TRUE(mangled);
+
+ auto info1 = mangled.GetDemangledInfo();
+ EXPECT_NE(info1, std::nullopt);
+ EXPECT_TRUE(info1->hasBasename());
+
+ mangled.SetMangledName(ConstString("_Z4funcv"));
+
+ // Should have re-calculated demangled-info since mangled name changed.
+ auto info2 = mangled.GetDemangledInfo();
+ ASSERT_NE(info2, std::nullopt);
+ EXPECT_TRUE(info2->hasBasename());
+
+ EXPECT_NE(info1.value(), info2.value());
+ EXPECT_EQ(mangled.GetDemangledName(), "func()");
+}
+
+TEST(MangledTest, DemangledNameInfo_SetDemangledResets) {
+ Mangled mangled("_Z3foov");
+ ASSERT_TRUE(mangled);
+
+ mangled.SetDemangledName(ConstString(""));
+
+ // Mangled name hasn't changed, so GetDemangledInfo causes re-demangling
+ // of previously set mangled name.
+ EXPECT_NE(mangled.GetDemangledInfo(), std::nullopt);
+ EXPECT_EQ(mangled.GetDemangledName(), "foo()");
+}
+
+TEST(MangledTest, DemangledNameInfo_Clear) {
+ Mangled mangled("_Z3foov");
+ ASSERT_TRUE(mangled);
+ EXPECT_NE(mangled.GetDemangledInfo(), std::nullopt);
+
+ mangled.Clear();
+
+ EXPECT_EQ(mangled.GetDemangledInfo(), std::nullopt);
+}
+
+TEST(MangledTest, DemangledNameInfo_SetValue) {
+ Mangled mangled("_Z4funcv");
+ ASSERT_TRUE(mangled);
+
+ auto demangled_func = mangled.GetDemangledInfo();
+
+ // SetValue(mangled) resets demangled-info
+ mangled.SetValue(ConstString("_Z3foov"));
+ auto demangled_foo = mangled.GetDemangledInfo();
+ EXPECT_NE(demangled_foo, std::nullopt);
+ EXPECT_NE(demangled_foo, demangled_func);
+
+ // SetValue(demangled) resets demangled-info
+ mangled.SetValue(ConstString("_Z4funcv"));
+ EXPECT_EQ(mangled.GetDemangledInfo(), demangled_func);
+
+ // SetValue(empty) resets demangled-info
+ mangled.SetValue(ConstString());
+ EXPECT_EQ(mangled.GetDemangledInfo(), std::nullopt);
+
+ // Demangling invalid mangled name will set demangled-info
+ // (without a valid basename).
+ mangled.SetValue(ConstString("_Zinvalid"));
+ ASSERT_NE(mangled.GetDemangledInfo(), std::nullopt);
+ EXPECT_FALSE(mangled.GetDemangledInfo()->hasBasename());
+}
+
+struct DemanglingPartsTestCase {
+ const char *mangled;
+ DemangledNameInfo expected_info;
+ std::string_view basename;
+ std::string_view scope;
+ std::string_view qualifiers;
+ bool valid_basename = true;
+};
+
+DemanglingPartsTestCase g_demangling_parts_test_cases[] = {
----------------
DavidSpickett wrote:
Some part/all of this lot is creating warnings compiling on Linux with clang 19:
```
$ ninja check-lldb
[244/267] Building CXX object tools/lldb/unit...MakeFiles/LLDBCoreTests.dir/MangledTest.cpp.o
/home/david.spickett/llvm-project/lldb/unittests/Core/MangledTest.cpp:416:8: warning: designated initializers are a C++20 extension [-Wc++20-designator]
416 | { .BasenameRange = {92, 98}, .ScopeRange = {36, 92}, .ArgumentsRange = { 108, 158 },
| ^
/home/david.spickett/llvm-project/lldb/unittests/Core/MangledTest.cpp:418:6: warning: mixture of designated and non-designated initializers in the same initializer list is a C99 extension [-Wc99-designator]
418 | .basename = "method",
| ^~~~~~~~~~~~~~~~~~~~
/home/david.spickett/llvm-project/lldb/unittests/Core/MangledTest.cpp:415:6: note: first non-designated initializer is here
415 | { "_ZNVKO3BarIN2ns3QuxIiEEE1CIPFi3FooIS_IiES6_EEE6methodIS6_EENS5_IT_SC_E5InnerIiEESD_SD_",
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/david.spickett/llvm-project/lldb/unittests/Core/MangledTest.cpp:423:8: warning: designated initializers are a C++20 extension [-Wc++20-designator]
423 | { .BasenameRange = {6, 13}, .ScopeRange = {6, 6}, .ArgumentsRange = { 20, 27 }, .QualifiersRange = {38, 38} },
<...>
```
https://github.com/llvm/llvm-project/pull/131836
More information about the llvm-commits
mailing list