https://github.com/Iasonaskrpr updated 
https://github.com/llvm/llvm-project/pull/221301

>From 60b41f22014814afcfaf66c2ff8bdfa34982bcfb Mon Sep 17 00:00:00 2001
From: Iasonaskrpr <[email protected]>
Date: Fri, 4 Sep 2026 20:28:12 +0300
Subject: [PATCH 1/4] [lldb][Fortran] Added Fortran language plugin and tests

---
 lldb/include/lldb/Target/Language.h           |  2 +
 lldb/source/Plugins/Language/CMakeLists.txt   |  1 +
 .../Plugins/Language/Fortran/CMakeLists.txt   | 12 ++++
 .../Language/Fortran/FortranLanguage.cpp      | 63 +++++++++++++++++++
 .../Language/Fortran/FortranLanguage.h        | 55 ++++++++++++++++
 lldb/source/Target/Language.cpp               | 14 +++++
 lldb/unittests/Language/CMakeLists.txt        |  1 +
 .../unittests/Language/Fortran/CMakeLists.txt |  6 ++
 .../Language/Fortran/FortranLanguageTest.cpp  | 40 ++++++++++++
 9 files changed, 194 insertions(+)
 create mode 100644 lldb/source/Plugins/Language/Fortran/CMakeLists.txt
 create mode 100644 lldb/source/Plugins/Language/Fortran/FortranLanguage.cpp
 create mode 100644 lldb/source/Plugins/Language/Fortran/FortranLanguage.h
 create mode 100644 lldb/unittests/Language/Fortran/CMakeLists.txt
 create mode 100644 lldb/unittests/Language/Fortran/FortranLanguageTest.cpp

diff --git a/lldb/include/lldb/Target/Language.h 
b/lldb/include/lldb/Target/Language.h
index 879a4f14783fa..c08994cc32e9f 100644
--- a/lldb/include/lldb/Target/Language.h
+++ b/lldb/include/lldb/Target/Language.h
@@ -443,6 +443,8 @@ class Language : public PluginInterface {
   /// Equivalent to \c LanguageIsC||LanguageIsObjC||LanguageIsCPlusPlus.
   static bool LanguageIsCFamily(lldb::LanguageType language);
 
+  static bool LanguageIsFortran(lldb::LanguageType language);
+
   static bool LanguageIsPascal(lldb::LanguageType language);
 
   // return the primary language, so if LanguageIsC(l), return eLanguageTypeC,
diff --git a/lldb/source/Plugins/Language/CMakeLists.txt 
b/lldb/source/Plugins/Language/CMakeLists.txt
index 6367ab916c8fb..5377734af2f8d 100644
--- a/lldb/source/Plugins/Language/CMakeLists.txt
+++ b/lldb/source/Plugins/Language/CMakeLists.txt
@@ -7,3 +7,4 @@ set_property(DIRECTORY PROPERTY 
LLDB_TOLERATED_PLUGIN_DEPENDENCIES
 add_subdirectory(CPlusPlus)
 add_subdirectory(ObjC)
 add_subdirectory(ObjCPlusPlus)
+add_subdirectory(Fortran)
diff --git a/lldb/source/Plugins/Language/Fortran/CMakeLists.txt 
b/lldb/source/Plugins/Language/Fortran/CMakeLists.txt
new file mode 100644
index 0000000000000..3ee934fa01f52
--- /dev/null
+++ b/lldb/source/Plugins/Language/Fortran/CMakeLists.txt
@@ -0,0 +1,12 @@
+add_lldb_library(lldbPluginFortranLanguage PLUGIN
+  FortranLanguage.cpp
+
+  LINK_LIBS
+    lldbCore
+    lldbDataFormatters
+    lldbExpression
+    lldbHost
+    lldbSymbol
+    lldbTarget
+    lldbUtility
+)
diff --git a/lldb/source/Plugins/Language/Fortran/FortranLanguage.cpp 
b/lldb/source/Plugins/Language/Fortran/FortranLanguage.cpp
new file mode 100644
index 0000000000000..5df2f36f92eb7
--- /dev/null
+++ b/lldb/source/Plugins/Language/Fortran/FortranLanguage.cpp
@@ -0,0 +1,63 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// This file implements the Fortran language plugin.
+///
+//===----------------------------------------------------------------------===//
+
+#include "llvm/ADT/StringRef.h"
+
+#include "FortranLanguage.h"
+
+#include "lldb/Core/PluginManager.h"
+
+using namespace llvm;
+using namespace lldb;
+using namespace lldb_private;
+using namespace lldb_private::formatters;
+
+LLDB_PLUGIN_DEFINE(FortranLanguage)
+
+void FortranLanguage::Initialize() {
+  PluginManager::RegisterPlugin(GetPluginNameStatic(), "Fortran Language",
+                                CreateInstance);
+}
+
+void FortranLanguage::Terminate() {
+  PluginManager::UnregisterPlugin(CreateInstance);
+}
+
+StringRef FortranLanguage::GetPluginNameStatic() {
+  static llvm::StringRef g_name("fortran");
+  return g_name;
+}
+
+//------------------------------------------------------------------
+// PluginInterface protocol
+//------------------------------------------------------------------
+StringRef FortranLanguage::GetPluginName() { return GetPluginNameStatic(); }
+
+uint32_t FortranLanguage::GetPluginVersion() { return 1; }
+
+Language *FortranLanguage::CreateInstance(LanguageType language) {
+  if (Language::LanguageIsFortran(language)) {
+    return new FortranLanguage();
+  }
+  return nullptr;
+}
+
+bool FortranLanguage::IsSourceFile(StringRef file_path) const {
+  const auto suffixes = {".f90", ".f",   ".f95", ".f03", ".f08",
+                         ".f18", ".for", ".ftn", ".fpp", ",f77"};
+  for (auto suffix : suffixes) {
+    if (file_path.ends_with_insensitive(suffix))
+      return true;
+  }
+  return false;
+}
diff --git a/lldb/source/Plugins/Language/Fortran/FortranLanguage.h 
b/lldb/source/Plugins/Language/Fortran/FortranLanguage.h
new file mode 100644
index 0000000000000..b3958c2e8906e
--- /dev/null
+++ b/lldb/source/Plugins/Language/Fortran/FortranLanguage.h
@@ -0,0 +1,55 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// This file defines the Fortran language plugin.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SOURCE_PLUGINS_LANGUAGE_FORTRAN_FORTRANLANGUAGE_H
+#define LLDB_SOURCE_PLUGINS_LANGUAGE_FORTRAN_FORTRANLANGUAGE_H
+#include "lldb/Target/Language.h"
+
+#include "llvm/ADT/StringRef.h"
+
+#include "lldb/Target/Language.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/lldb-private.h"
+
+namespace lldb_private {
+
+class FortranLanguage : public Language {
+public:
+  FortranLanguage() = default;
+
+  ~FortranLanguage() override = default;
+
+  lldb::LanguageType GetLanguageType() const override {
+    return lldb::eLanguageTypeFortran90;
+  }
+
+  // Static Functions
+  static void Initialize();
+
+  static void Terminate();
+
+  static lldb_private::Language *CreateInstance(lldb::LanguageType language);
+
+  static llvm::StringRef GetPluginNameStatic();
+
+  // PluginInterface protocol
+  llvm::StringRef GetPluginName() override;
+
+  uint32_t GetPluginVersion();
+
+  bool IsSourceFile(llvm::StringRef file_path) const override;
+};
+
+} // namespace lldb_private
+
+#endif // LLDB_SOURCE_PLUGINS_LANGUAGE_FORTRAN_FORTRANLANGUAGE_H
diff --git a/lldb/source/Target/Language.cpp b/lldb/source/Target/Language.cpp
index 077c403f4ea58..a4d6031b4b27d 100644
--- a/lldb/source/Target/Language.cpp
+++ b/lldb/source/Target/Language.cpp
@@ -396,6 +396,20 @@ bool Language::LanguageIsCFamily(LanguageType language) {
   }
 }
 
+bool Language::LanguageIsFortran(LanguageType language) {
+  switch (language) {
+  case eLanguageTypeFortran77:
+  case eLanguageTypeFortran90:
+  case eLanguageTypeFortran95:
+  case eLanguageTypeFortran03:
+  case eLanguageTypeFortran08:
+  case eLanguageTypeFortran18:
+    return true;
+  default:
+    return false;
+  }
+}
+
 bool Language::LanguageIsPascal(LanguageType language) {
   switch (language) {
   case eLanguageTypePascal83:
diff --git a/lldb/unittests/Language/CMakeLists.txt 
b/lldb/unittests/Language/CMakeLists.txt
index a0bdc62af98c6..26710ff8896e2 100644
--- a/lldb/unittests/Language/CMakeLists.txt
+++ b/lldb/unittests/Language/CMakeLists.txt
@@ -1,3 +1,4 @@
 add_subdirectory(CPlusPlus)
 add_subdirectory(CLanguages)
 add_subdirectory(ObjC)
+add_subdirectory(Fortran)
diff --git a/lldb/unittests/Language/Fortran/CMakeLists.txt 
b/lldb/unittests/Language/Fortran/CMakeLists.txt
new file mode 100644
index 0000000000000..661b12ebf8950
--- /dev/null
+++ b/lldb/unittests/Language/Fortran/CMakeLists.txt
@@ -0,0 +1,6 @@
+add_lldb_unittest(LanguageFortranLanguageTests
+  FortranLanguageTest.cpp
+
+  LINK_LIBS
+    lldbPluginFortranLanguage
+)
diff --git a/lldb/unittests/Language/Fortran/FortranLanguageTest.cpp 
b/lldb/unittests/Language/Fortran/FortranLanguageTest.cpp
new file mode 100644
index 0000000000000..d8d7287e0104c
--- /dev/null
+++ b/lldb/unittests/Language/Fortran/FortranLanguageTest.cpp
@@ -0,0 +1,40 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// This file tests the Fortran plugin features.
+///
+//===----------------------------------------------------------------------===//
+
+#include "Plugins/Language/Fortran/FortranLanguage.h"
+#include "TestingSupport/SubsystemRAII.h"
+#include "lldb/lldb-enumerations.h"
+
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+
+using namespace lldb_private;
+
+/// Returns the name of the LLDB plugin for the given language or an empty
+/// string if there is no fitting plugin.
+static llvm::StringRef GetPluginName(lldb::LanguageType language) {
+  if (Language *language_plugin = Language::FindPlugin(language))
+    return language_plugin->GetPluginName();
+  return "";
+}
+
+TEST(FortranLanguage, LookupFortranLanguageByLanguageType) {
+  SubsystemRAII<FortranLanguage> langs;
+
+  EXPECT_EQ(GetPluginName(lldb::eLanguageTypeFortran77), "fortran");
+  EXPECT_EQ(GetPluginName(lldb::eLanguageTypeFortran90), "fortran");
+  EXPECT_EQ(GetPluginName(lldb::eLanguageTypeFortran95), "fortran");
+  EXPECT_EQ(GetPluginName(lldb::eLanguageTypeFortran03), "fortran");
+  EXPECT_EQ(GetPluginName(lldb::eLanguageTypeFortran08), "fortran");
+  EXPECT_EQ(GetPluginName(lldb::eLanguageTypeFortran18), "fortran");
+}
\ No newline at end of file

>From b67ef084fc224e69bbdeb5dbe3fdb111123055be Mon Sep 17 00:00:00 2001
From: Iasonas Karaprodromidis <[email protected]>
Date: Sun, 6 Sep 2026 22:26:00 +0300
Subject: [PATCH 2/4] Fix missing newline at end of file

Add missing newline at end of FortranLanguageTest.cpp
---
 lldb/unittests/Language/Fortran/FortranLanguageTest.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lldb/unittests/Language/Fortran/FortranLanguageTest.cpp 
b/lldb/unittests/Language/Fortran/FortranLanguageTest.cpp
index d8d7287e0104c..49432f2fed039 100644
--- a/lldb/unittests/Language/Fortran/FortranLanguageTest.cpp
+++ b/lldb/unittests/Language/Fortran/FortranLanguageTest.cpp
@@ -37,4 +37,4 @@ TEST(FortranLanguage, LookupFortranLanguageByLanguageType) {
   EXPECT_EQ(GetPluginName(lldb::eLanguageTypeFortran03), "fortran");
   EXPECT_EQ(GetPluginName(lldb::eLanguageTypeFortran08), "fortran");
   EXPECT_EQ(GetPluginName(lldb::eLanguageTypeFortran18), "fortran");
-}
\ No newline at end of file
+}

>From 03a9832a4651a95c932d8a0e6643dce73128a943 Mon Sep 17 00:00:00 2001
From: Iasonas Karaprodromidis <[email protected]>
Date: Sun, 6 Sep 2026 22:27:08 +0300
Subject: [PATCH 3/4] Deleted redundant comments

Co-authored-by: Jonas Devlieghere <[email protected]>
---
 lldb/source/Plugins/Language/Fortran/FortranLanguage.cpp | 8 --------
 lldb/source/Plugins/Language/Fortran/FortranLanguage.h   | 7 -------
 lldb/unittests/Language/Fortran/FortranLanguageTest.cpp  | 5 -----
 3 files changed, 20 deletions(-)

diff --git a/lldb/source/Plugins/Language/Fortran/FortranLanguage.cpp 
b/lldb/source/Plugins/Language/Fortran/FortranLanguage.cpp
index 5df2f36f92eb7..40b8014b45416 100644
--- a/lldb/source/Plugins/Language/Fortran/FortranLanguage.cpp
+++ b/lldb/source/Plugins/Language/Fortran/FortranLanguage.cpp
@@ -5,11 +5,6 @@
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
 
//===----------------------------------------------------------------------===//
-///
-/// \file
-/// This file implements the Fortran language plugin.
-///
-//===----------------------------------------------------------------------===//
 
 #include "llvm/ADT/StringRef.h"
 
@@ -38,9 +33,6 @@ StringRef FortranLanguage::GetPluginNameStatic() {
   return g_name;
 }
 
-//------------------------------------------------------------------
-// PluginInterface protocol
-//------------------------------------------------------------------
 StringRef FortranLanguage::GetPluginName() { return GetPluginNameStatic(); }
 
 uint32_t FortranLanguage::GetPluginVersion() { return 1; }
diff --git a/lldb/source/Plugins/Language/Fortran/FortranLanguage.h 
b/lldb/source/Plugins/Language/Fortran/FortranLanguage.h
index b3958c2e8906e..fdb7df922aa88 100644
--- a/lldb/source/Plugins/Language/Fortran/FortranLanguage.h
+++ b/lldb/source/Plugins/Language/Fortran/FortranLanguage.h
@@ -5,11 +5,6 @@
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
 
//===----------------------------------------------------------------------===//
-///
-/// \file
-/// This file defines the Fortran language plugin.
-///
-//===----------------------------------------------------------------------===//
 
 #ifndef LLDB_SOURCE_PLUGINS_LANGUAGE_FORTRAN_FORTRANLANGUAGE_H
 #define LLDB_SOURCE_PLUGINS_LANGUAGE_FORTRAN_FORTRANLANGUAGE_H
@@ -33,7 +28,6 @@ class FortranLanguage : public Language {
     return lldb::eLanguageTypeFortran90;
   }
 
-  // Static Functions
   static void Initialize();
 
   static void Terminate();
@@ -42,7 +36,6 @@ class FortranLanguage : public Language {
 
   static llvm::StringRef GetPluginNameStatic();
 
-  // PluginInterface protocol
   llvm::StringRef GetPluginName() override;
 
   uint32_t GetPluginVersion();
diff --git a/lldb/unittests/Language/Fortran/FortranLanguageTest.cpp 
b/lldb/unittests/Language/Fortran/FortranLanguageTest.cpp
index 49432f2fed039..d24f1b00ecdeb 100644
--- a/lldb/unittests/Language/Fortran/FortranLanguageTest.cpp
+++ b/lldb/unittests/Language/Fortran/FortranLanguageTest.cpp
@@ -5,11 +5,6 @@
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
 
//===----------------------------------------------------------------------===//
-///
-/// \file
-/// This file tests the Fortran plugin features.
-///
-//===----------------------------------------------------------------------===//
 
 #include "Plugins/Language/Fortran/FortranLanguage.h"
 #include "TestingSupport/SubsystemRAII.h"

>From af5f8aceb5e7b3ce12e34551c65ef1b15707d9e7 Mon Sep 17 00:00:00 2001
From: Iasonaskrpr <[email protected]>
Date: Mon, 7 Sep 2026 17:08:32 +0300
Subject: [PATCH 4/4] [lldb][Fortran] Applied reccomended changes from code
 review

---
 .../Language/Fortran/FortranLanguage.cpp      |  6 ++---
 .../Language/Fortran/FortranLanguageTest.cpp  | 24 ++++++++-----------
 2 files changed, 13 insertions(+), 17 deletions(-)

diff --git a/lldb/source/Plugins/Language/Fortran/FortranLanguage.cpp 
b/lldb/source/Plugins/Language/Fortran/FortranLanguage.cpp
index 40b8014b45416..7543e8dded042 100644
--- a/lldb/source/Plugins/Language/Fortran/FortranLanguage.cpp
+++ b/lldb/source/Plugins/Language/Fortran/FortranLanguage.cpp
@@ -38,15 +38,15 @@ StringRef FortranLanguage::GetPluginName() { return 
GetPluginNameStatic(); }
 uint32_t FortranLanguage::GetPluginVersion() { return 1; }
 
 Language *FortranLanguage::CreateInstance(LanguageType language) {
-  if (Language::LanguageIsFortran(language)) {
+  if (Language::LanguageIsFortran(language))
     return new FortranLanguage();
-  }
+
   return nullptr;
 }
 
 bool FortranLanguage::IsSourceFile(StringRef file_path) const {
   const auto suffixes = {".f90", ".f",   ".f95", ".f03", ".f08",
-                         ".f18", ".for", ".ftn", ".fpp", ",f77"};
+                         ".f18", ".for", ".ftn", ".fpp", ".f77"};
   for (auto suffix : suffixes) {
     if (file_path.ends_with_insensitive(suffix))
       return true;
diff --git a/lldb/unittests/Language/Fortran/FortranLanguageTest.cpp 
b/lldb/unittests/Language/Fortran/FortranLanguageTest.cpp
index d24f1b00ecdeb..c1fe22345d710 100644
--- a/lldb/unittests/Language/Fortran/FortranLanguageTest.cpp
+++ b/lldb/unittests/Language/Fortran/FortranLanguageTest.cpp
@@ -15,21 +15,17 @@
 
 using namespace lldb_private;
 
-/// Returns the name of the LLDB plugin for the given language or an empty
-/// string if there is no fitting plugin.
-static llvm::StringRef GetPluginName(lldb::LanguageType language) {
-  if (Language *language_plugin = Language::FindPlugin(language))
-    return language_plugin->GetPluginName();
-  return "";
-}
-
 TEST(FortranLanguage, LookupFortranLanguageByLanguageType) {
   SubsystemRAII<FortranLanguage> langs;
 
-  EXPECT_EQ(GetPluginName(lldb::eLanguageTypeFortran77), "fortran");
-  EXPECT_EQ(GetPluginName(lldb::eLanguageTypeFortran90), "fortran");
-  EXPECT_EQ(GetPluginName(lldb::eLanguageTypeFortran95), "fortran");
-  EXPECT_EQ(GetPluginName(lldb::eLanguageTypeFortran03), "fortran");
-  EXPECT_EQ(GetPluginName(lldb::eLanguageTypeFortran08), "fortran");
-  EXPECT_EQ(GetPluginName(lldb::eLanguageTypeFortran18), "fortran");
+  const auto types = {
+      lldb::eLanguageTypeFortran77, lldb::eLanguageTypeFortran90,
+      lldb::eLanguageTypeFortran95, lldb::eLanguageTypeFortran03,
+      lldb::eLanguageTypeFortran08, lldb::eLanguageTypeFortran18};
+
+  for (lldb::LanguageType lang_type : types) {
+    Language *lang = Language::FindPlugin(lang_type);
+    ASSERT_NE(lang, nullptr);
+    EXPECT_EQ(lang->GetPluginName(), "fortran");
+  }
 }

_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to