Skip to content

Commit 8e3eeb8

Browse files
authored
[lldb] Fix off-by-one error in ToDwarfSourceLanguage (#162315)
The ToDwarfSourceLanguage function incorrectly excluded languages that equal eLanguageTypeLastStandardLanguage. The comparison used `<` instead of `<=`, causing the last standard language to fall through to the default case and return std::nullopt. This broke language plugins that use eLanguageTypeLastStandardLanguage (currently Mojo at 0x0033) as their language code, preventing proper DWARF language conversion and breaking REPL functionality. The fix changes the comparison from `<` to `<=` to include the last standard language in the automatic conversion to DWARF source language. This is a regression from commit 7f51a2a which introduced the ToDwarfSourceLanguage function.
1 parent 7da07c0 commit 8e3eeb8

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

lldb/source/Target/Language.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -549,7 +549,7 @@ Language::~Language() = default;
549549

550550
static std::optional<llvm::dwarf::SourceLanguage>
551551
ToDwarfSourceLanguage(lldb::LanguageType language_type) {
552-
if (language_type < lldb::eLanguageTypeLastStandardLanguage)
552+
if (language_type <= lldb::eLanguageTypeLastStandardLanguage)
553553
return static_cast<llvm::dwarf::SourceLanguage>(language_type);
554554

555555
switch (language_type) {

lldb/unittests/Target/LanguageTest.cpp

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,6 @@ TEST_F(LanguageTest, SourceLanguage_GetDescription) {
2424
continue;
2525

2626
auto lang_type = static_cast<lldb::LanguageType>(i);
27-
if (lang_type == lldb::eLanguageTypeLastStandardLanguage)
28-
continue;
29-
3027
SourceLanguage lang(lang_type);
3128

3229
// eLanguageTypeHIP is not implemented as a DW_LNAME because of a conflict.
@@ -67,3 +64,16 @@ TEST_F(LanguageTest, SourceLanguage_AsLanguageType) {
6764
EXPECT_EQ(SourceLanguage(eLanguageTypeUnknown).AsLanguageType(),
6865
eLanguageTypeUnknown);
6966
}
67+
68+
TEST_F(LanguageTest, SourceLanguage_LastStandardLanguage) {
69+
// eLanguageTypeLastStandardLanguage should be treated as a standard DWARF
70+
// language.
71+
SourceLanguage lang(eLanguageTypeLastStandardLanguage);
72+
EXPECT_TRUE(lang);
73+
74+
// It should have a valid description (not "Unknown").
75+
EXPECT_NE(lang.GetDescription(), "Unknown");
76+
77+
// It should convert to the correct language type.
78+
EXPECT_EQ(lang.AsLanguageType(), eLanguageTypeLastStandardLanguage);
79+
}

0 commit comments

Comments
 (0)