[llvm-branch-commits] [lldb] [lldb][Fortran] Added support for functions to DWARFASTParserFortran (PR #234312)

Iasonas Karaprodromidis via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Fri Oct 23 09:00:07 PDT 2026


================
@@ -146,13 +177,61 @@ lldb::TypeSP DWARFASTParserFortran::ParseTypeFromDWARF(
                         compiler_type, Type::ResolveState::Full);
     break;
   }
+  case DW_TAG_subprogram:
+  case DW_TAG_subroutine_type: {
+    CompilerType return_type;
+    dwarf->GetDIEToType()[die.GetDIE()] = DIE_IS_BEING_PARSED;
+    attributes = die.GetAttributes();
+    size_t num_attr = attributes.Size();
+
+    for (size_t i = 0; i < num_attr; ++i) {
+      if (attributes.ExtractFormValueAtIndex(i, form_value)) {
+        switch (attributes.AttributeAtIndex(i)) {
+        case DW_AT_name:
+          type_name_cstr = form_value.AsCString();
+          if (type_name_cstr &&
+              type_name_cstr[0]) { // Check for null AND empty string
+            type_name.SetString(llvm::StringRef(type_name_cstr));
+          } else {
+            type_name.SetCString("UNKNOWN_FORTRAN_FUNCTION");
+          }
+          break;
+
+        case DW_AT_type: {
+          DWARFDIE type_die = form_value.Reference();
+          if (!type_die)
+            break;
+
+          if (Type *resolved_type = die.GetDWARF()->ResolveType(type_die))
+            return_type = resolved_type->GetForwardCompilerType();
+
+          break;
+        }
+
+        default:
+          break;
+        }
+      }
+    }
+
+    llvm::SmallVector<CompilerType, 4> function_params_types;
+    llvm::SmallVector<llvm::StringRef, 4> function_params_names;
+    ParseChildParameters(die, function_params_types, function_params_names);
+
+    compiler_type = m_ast.CreateFortranFunction(
+        type_name, function_params_types, function_params_names, return_type);
+
+    type_sp = dwarf->MakeType(die.GetID(), type_name, 0, nullptr,
+                              LLDB_INVALID_UID, Type::eEncodingIsUID, decl,
+                              compiler_type, Type::ResolveState::Full);
+    break;
+  }
 
   default:
-    if (log) {
+    if (log)
----------------
Iasonaskrpr wrote:

Understood! I will open seperate PRs for things like this. 

https://github.com/llvm/llvm-project/pull/234312


More information about the llvm-branch-commits mailing list