[Lldb-commits] [lldb] 8e3eeb8 - [lldb] Fix off-by-one error in ToDwarfSourceLanguage (#162315)

via lldb-commits lldb-commits at lists.llvm.org
Wed Oct 8 04:21:49 PDT 2025


Author: Joshua Peterson
Date: 2025-10-08T11:21:45Z
New Revision: 8e3eeb854b662beca3e0476199ea6d253dc89752

URL: https://github.com/llvm/llvm-project/commit/8e3eeb854b662beca3e0476199ea6d253dc89752
DIFF: https://github.com/llvm/llvm-project/commit/8e3eeb854b662beca3e0476199ea6d253dc89752.diff

LOG: [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
7f51a2a47d2e706d04855b0e41690ebafa2b3238 which introduced the
ToDwarfSourceLanguage function.

Added: 
    

Modified: 
    lldb/source/Target/Language.cpp
    lldb/unittests/Target/LanguageTest.cpp

Removed: 
    


################################################################################
diff  --git a/lldb/source/Target/Language.cpp b/lldb/source/Target/Language.cpp
index 395718ecbe292..2efd4bc1e2c09 100644
--- a/lldb/source/Target/Language.cpp
+++ b/lldb/source/Target/Language.cpp
@@ -549,7 +549,7 @@ Language::~Language() = default;
 
 static std::optional<llvm::dwarf::SourceLanguage>
 ToDwarfSourceLanguage(lldb::LanguageType language_type) {
-  if (language_type < lldb::eLanguageTypeLastStandardLanguage)
+  if (language_type <= lldb::eLanguageTypeLastStandardLanguage)
     return static_cast<llvm::dwarf::SourceLanguage>(language_type);
 
   switch (language_type) {

diff  --git a/lldb/unittests/Target/LanguageTest.cpp b/lldb/unittests/Target/LanguageTest.cpp
index a00fda78d569a..a1f9267dd45d0 100644
--- a/lldb/unittests/Target/LanguageTest.cpp
+++ b/lldb/unittests/Target/LanguageTest.cpp
@@ -24,9 +24,6 @@ TEST_F(LanguageTest, SourceLanguage_GetDescription) {
       continue;
 
     auto lang_type = static_cast<lldb::LanguageType>(i);
-    if (lang_type == lldb::eLanguageTypeLastStandardLanguage)
-      continue;
-
     SourceLanguage lang(lang_type);
 
     // eLanguageTypeHIP is not implemented as a DW_LNAME because of a conflict.
@@ -67,3 +64,16 @@ TEST_F(LanguageTest, SourceLanguage_AsLanguageType) {
   EXPECT_EQ(SourceLanguage(eLanguageTypeUnknown).AsLanguageType(),
             eLanguageTypeUnknown);
 }
+
+TEST_F(LanguageTest, SourceLanguage_LastStandardLanguage) {
+  // eLanguageTypeLastStandardLanguage should be treated as a standard DWARF
+  // language.
+  SourceLanguage lang(eLanguageTypeLastStandardLanguage);
+  EXPECT_TRUE(lang);
+
+  // It should have a valid description (not "Unknown").
+  EXPECT_NE(lang.GetDescription(), "Unknown");
+
+  // It should convert to the correct language type.
+  EXPECT_EQ(lang.AsLanguageType(), eLanguageTypeLastStandardLanguage);
+}


        


More information about the lldb-commits mailing list