Skip to content

[flang] add option to generate runtime type info as external #145901

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 27, 2025

Conversation

jeanPerier
Copy link
Contributor

@jeanPerier jeanPerier commented Jun 26, 2025

So far flang generates runtime derived type info global definitions (as opposed to declaration) for all the types used in the current compilation unit even when the derived types are defined in other compilation units. It is using linkonce_odr to achieve derived type descriptor address "uniqueness" aspect needed to match two derived type inside the runtime.

This has two pros:

  • it allows not linking against module file objects of modules defining derived types only. Most compilers allow working with a derived type from a module file without linking against the related module file object if the type is trivial (no type bound procedures).
  • Having the full rtti definition allows LLVM to do devirtualization of type bound procedure calls of polymorphic objects after inlining.

This comes at a big compile time cost because of all the extra globals and their definitions in apps with many and complex derived types.

This patch adds and experimental option to only generate the rtti definition for the types defined in the current compilation unit and to only generate external declaration for the derived type descriptor object of types defined elsewhere.

Note that objects compiled with this option are not compatible with object files compiled without because files compiled without it may drop the rtti for type they defined if it is not used in the compilation unit because of the linkonce_odr aspect.

I am adding the option so that we can better measure the extra cost of the current approach on apps and allow speeding up some compilation where devirtualization does not matter (and the build config links to all module file object anyway).

This is notably bringing great speed-ups to CP2K and WRF compilation times (I measured about 30% speed-up on CP2K compilation and 15% speed-up on WRF, although these numbers may vary due to the parallel aspect of these builds).

@llvmbot llvmbot added flang Flang issues not falling into any other category flang:fir-hlfir flang:semantics flang:codegen labels Jun 26, 2025
@llvmbot
Copy link
Member

llvmbot commented Jun 26, 2025

@llvm/pr-subscribers-flang-codegen
@llvm/pr-subscribers-flang-semantics

@llvm/pr-subscribers-flang-fir-hlfir

Author: None (jeanPerier)

Changes

So far flang generates runtime derived type info global definitions (as opposed to declaratin) for all the types used in the current compilation unit even when the derived types are defined in other compilation units. It is using linkonce_odr to achieve derived type descriptor address "uniqueness" aspect needed to match two derived type inside the runtime.

This has two pros:

  • it allows not linking against module file objects of modules defining derived types only. Most compilers allow working with a derived type from a module file without linking against the related module file object if the type is trivial (no type bound procedures).
  • Having the full rtti definition allows LLVM to do devirtualization of type bound procedure calls of polymorphic objects after inlining.

This comes at a big compile time cost because of all the extra globals and their definitions in apps with many and complex derived types.

This patch adds and experimental option to only generate the rtti definition for the types defined in the current compilation unit and to only generate external declaration for the derived type descriptor object of types defined elsewhere.

Note that objects compiled with this option are not compatible with object files compiled without because files compiled without it may drop the rtti for type they defined if it is not used in the compilation unit because of the linkonce_odr aspect.

I am adding the option so that we can better measure the extra cost of the current approach on apps and allow speeding up some compilation where devirtualization does not matter (and the build config links to all module file object anyway).

This is notably bringing great speed-ups to CP2K and WRF compilation times (I measured about 30% speed-up on CP2K compilation and 15% speed-up on WRF, although these numbers may vary due to the parallel aspect of these builds).


Patch is 43.96 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/145901.diff

15 Files Affected:

  • (modified) flang/include/flang/Evaluate/tools.h (+1)
  • (modified) flang/include/flang/Optimizer/CodeGen/CodeGen.h (+3)
  • (modified) flang/include/flang/Optimizer/Passes/CommandLineOpts.h (+13)
  • (modified) flang/include/flang/Optimizer/Support/Utils.h (-26)
  • (modified) flang/include/flang/Semantics/runtime-type-info.h (+4)
  • (modified) flang/lib/Evaluate/tools.cpp (+5)
  • (modified) flang/lib/Lower/Bridge.cpp (+15-1)
  • (modified) flang/lib/Lower/ConvertVariable.cpp (+8-2)
  • (modified) flang/lib/Optimizer/CodeGen/CodeGen.cpp (+53-49)
  • (modified) flang/lib/Optimizer/Passes/CommandLineOpts.cpp (+6)
  • (modified) flang/lib/Optimizer/Passes/Pipelines.cpp (+1)
  • (modified) flang/lib/Optimizer/Transforms/PolymorphicOpConversion.cpp (+60-35)
  • (added) flang/test/Integration/skip-external-rtti-definition.F90 (+47)
  • (modified) flang/test/Lower/select-type-2.f90 (+4-4)
  • (modified) flang/test/Lower/select-type.f90 (+36-36)
diff --git a/flang/include/flang/Evaluate/tools.h b/flang/include/flang/Evaluate/tools.h
index e04621f71f9a7..3205a87a86eba 100644
--- a/flang/include/flang/Evaluate/tools.h
+++ b/flang/include/flang/Evaluate/tools.h
@@ -1575,6 +1575,7 @@ bool IsExtensibleType(const DerivedTypeSpec *);
 bool IsSequenceOrBindCType(const DerivedTypeSpec *);
 bool IsBuiltinDerivedType(const DerivedTypeSpec *derived, const char *name);
 bool IsBuiltinCPtr(const Symbol &);
+bool IsFromBuiltinModule(const Symbol &);
 bool IsEventType(const DerivedTypeSpec *);
 bool IsLockType(const DerivedTypeSpec *);
 bool IsNotifyType(const DerivedTypeSpec *);
diff --git a/flang/include/flang/Optimizer/CodeGen/CodeGen.h b/flang/include/flang/Optimizer/CodeGen/CodeGen.h
index 0398d0f248e08..93f07d8d5d4d9 100644
--- a/flang/include/flang/Optimizer/CodeGen/CodeGen.h
+++ b/flang/include/flang/Optimizer/CodeGen/CodeGen.h
@@ -39,6 +39,9 @@ struct FIRToLLVMPassOptions {
   // that such programs would crash at runtime if the derived type descriptors
   // are required by the runtime, so this is only an option to help debugging.
   bool ignoreMissingTypeDescriptors = false;
+  // Similar to ignoreMissingTypeDescriptors, but generate external declaration
+  // for the missing type descriptor globals instead.
+  bool skipExternalRttiDefinition = false;
 
   // Generate TBAA information for FIR types and memory accessing operations.
   bool applyTBAA = false;
diff --git a/flang/include/flang/Optimizer/Passes/CommandLineOpts.h b/flang/include/flang/Optimizer/Passes/CommandLineOpts.h
index 1cfaf285e75e6..76ac9d0622d2b 100644
--- a/flang/include/flang/Optimizer/Passes/CommandLineOpts.h
+++ b/flang/include/flang/Optimizer/Passes/CommandLineOpts.h
@@ -32,6 +32,19 @@ extern llvm::cl::opt<std::size_t> arrayStackAllocationThreshold;
 /// generated by the frontend.
 extern llvm::cl::opt<bool> ignoreMissingTypeDescriptors;
 
+/// Shared option in tools to only generate rtti static object definitions for
+/// derived types defined in the current compilation unit. Derived type
+/// descriptor object for types defined in other objects will only be declared
+/// as external. This also changes the linkage of rtti objects defined in the
+/// current compilation unit from linkonce_odr to external so that unused rtti
+/// objects are retained and can be accessed from other compilation units. This
+/// is an experimental option to explore compilation speed improvements and is
+/// an ABI breaking change because of the linkage change.
+/// It will also require linking against module file objects of modules defining
+/// only types (even for trivial types without type bound procedures, which
+/// differs from most compilers).
+extern llvm::cl::opt<bool> skipExternalRttiDefinition;
+
 /// Default optimization level used to create Flang pass pipeline is O0.
 extern llvm::OptimizationLevel defaultOptLevel;
 
diff --git a/flang/include/flang/Optimizer/Support/Utils.h b/flang/include/flang/Optimizer/Support/Utils.h
index ec73af6ec72e9..83c936b7dcada 100644
--- a/flang/include/flang/Optimizer/Support/Utils.h
+++ b/flang/include/flang/Optimizer/Support/Utils.h
@@ -35,32 +35,6 @@ inline std::int64_t toInt(mlir::arith::ConstantOp cop) {
       .getSExtValue();
 }
 
-// Reconstruct binding tables for dynamic dispatch.
-using BindingTable = llvm::DenseMap<llvm::StringRef, unsigned>;
-using BindingTables = llvm::DenseMap<llvm::StringRef, BindingTable>;
-
-inline void buildBindingTables(BindingTables &bindingTables,
-                               mlir::ModuleOp mod) {
-
-  // The binding tables are defined in FIR after lowering inside fir.type_info
-  // operations. Go through each binding tables and store the procedure name and
-  // binding index for later use by the fir.dispatch conversion pattern.
-  for (auto typeInfo : mod.getOps<fir::TypeInfoOp>()) {
-    unsigned bindingIdx = 0;
-    BindingTable bindings;
-    if (typeInfo.getDispatchTable().empty()) {
-      bindingTables[typeInfo.getSymName()] = bindings;
-      continue;
-    }
-    for (auto dtEntry :
-         typeInfo.getDispatchTable().front().getOps<fir::DTEntryOp>()) {
-      bindings[dtEntry.getMethod()] = bindingIdx;
-      ++bindingIdx;
-    }
-    bindingTables[typeInfo.getSymName()] = bindings;
-  }
-}
-
 // Translate front-end KINDs for use in the IR and code gen.
 inline std::vector<fir::KindTy>
 fromDefaultKinds(const Fortran::common::IntrinsicTypeDefaultKinds &defKinds) {
diff --git a/flang/include/flang/Semantics/runtime-type-info.h b/flang/include/flang/Semantics/runtime-type-info.h
index e90d3ae8baf1e..6c5a061d1c1a2 100644
--- a/flang/include/flang/Semantics/runtime-type-info.h
+++ b/flang/include/flang/Semantics/runtime-type-info.h
@@ -38,6 +38,10 @@ RuntimeDerivedTypeTables BuildRuntimeDerivedTypeTables(SemanticsContext &);
 /// to describe other derived types at runtime in flang descriptor.
 constexpr char typeInfoBuiltinModule[]{"__fortran_type_info"};
 
+/// Name of the builtin derived type in __fortran_type_inf that is used for
+/// derived type descriptors.
+constexpr char typeDescriptorTypeName[]{"derivedtype"};
+
 /// Name of the bindings descriptor component in the DerivedType type of the
 /// __Fortran_type_info module
 constexpr char bindingDescCompName[]{"binding"};
diff --git a/flang/lib/Evaluate/tools.cpp b/flang/lib/Evaluate/tools.cpp
index 68838564f87ba..fcacdb93d662b 100644
--- a/flang/lib/Evaluate/tools.cpp
+++ b/flang/lib/Evaluate/tools.cpp
@@ -2334,6 +2334,11 @@ bool IsBuiltinCPtr(const Symbol &symbol) {
   return false;
 }
 
+bool IsFromBuiltinModule(const Symbol &symbol) {
+  const Scope &scope{symbol.GetUltimate().owner()};
+  return IsSameModule(&scope, scope.context().GetBuiltinsScope());
+}
+
 bool IsIsoCType(const DerivedTypeSpec *derived) {
   return IsBuiltinDerivedType(derived, "c_ptr") ||
       IsBuiltinDerivedType(derived, "c_funptr");
diff --git a/flang/lib/Lower/Bridge.cpp b/flang/lib/Lower/Bridge.cpp
index 8506b9a984e58..39addfa41d7c4 100644
--- a/flang/lib/Lower/Bridge.cpp
+++ b/flang/lib/Lower/Bridge.cpp
@@ -52,6 +52,7 @@
 #include "flang/Optimizer/Dialect/FIROps.h"
 #include "flang/Optimizer/Dialect/Support/FIRContext.h"
 #include "flang/Optimizer/HLFIR/HLFIROps.h"
+#include "flang/Optimizer/Passes/CommandLineOpts.h"
 #include "flang/Optimizer/Support/DataLayout.h"
 #include "flang/Optimizer/Support/FatalError.h"
 #include "flang/Optimizer/Support/InternalNames.h"
@@ -262,6 +263,7 @@ class TypeInfoConverter {
   }
 
   void createTypeInfo(Fortran::lower::AbstractConverter &converter) {
+    createTypeInfoForTypeDescriptorBuiltinType(converter);
     while (!registeredTypeInfoA.empty()) {
       currentTypeInfoStack = &registeredTypeInfoB;
       for (const TypeInfo &info : registeredTypeInfoA)
@@ -277,10 +279,22 @@ class TypeInfoConverter {
 private:
   void createTypeInfoOpAndGlobal(Fortran::lower::AbstractConverter &converter,
                                  const TypeInfo &info) {
-    Fortran::lower::createRuntimeTypeInfoGlobal(converter, info.symbol.get());
+    if (!::skipExternalRttiDefinition)
+      Fortran::lower::createRuntimeTypeInfoGlobal(converter, info.symbol.get());
     createTypeInfoOp(converter, info);
   }
 
+  void createTypeInfoForTypeDescriptorBuiltinType(
+      Fortran::lower::AbstractConverter &converter) {
+    if (registeredTypeInfoA.empty())
+      return;
+    auto builtinTypeInfoType = llvm::cast<fir::RecordType>(
+        converter.genType(registeredTypeInfoA[0].symbol.get()));
+    converter.getFirOpBuilder().createTypeInfoOp(
+        registeredTypeInfoA[0].loc, builtinTypeInfoType,
+        /*parentType=*/fir::RecordType{});
+  }
+
   void createTypeInfoOp(Fortran::lower::AbstractConverter &converter,
                         const TypeInfo &info) {
     fir::RecordType parentType{};
diff --git a/flang/lib/Lower/ConvertVariable.cpp b/flang/lib/Lower/ConvertVariable.cpp
index 6f818cd7dc303..5e09a23e74c2b 100644
--- a/flang/lib/Lower/ConvertVariable.cpp
+++ b/flang/lib/Lower/ConvertVariable.cpp
@@ -38,6 +38,7 @@
 #include "flang/Optimizer/Dialect/FIROps.h"
 #include "flang/Optimizer/Dialect/Support/FIRContext.h"
 #include "flang/Optimizer/HLFIR/HLFIROps.h"
+#include "flang/Optimizer/Passes/CommandLineOpts.h"
 #include "flang/Optimizer/Support/FatalError.h"
 #include "flang/Optimizer/Support/InternalNames.h"
 #include "flang/Optimizer/Support/Utils.h"
@@ -652,8 +653,13 @@ getLinkageAttribute(fir::FirOpBuilder &builder,
   // Runtime type info for a same derived type is identical in each compilation
   // unit. It desired to avoid having to link against module that only define a
   // type. Therefore the runtime type info is generated everywhere it is needed
-  // with `linkonce_odr` LLVM linkage.
-  if (var.isRuntimeTypeInfoData())
+  // with `linkonce_odr` LLVM linkage (unless the skipExternalRttiDefinition
+  // option is set, in which case one will need to link against objects of
+  // modules defining types). Builtin objects rtti is always generated because
+  // the builtin module is currently not compiled or part of the runtime.
+  if (var.isRuntimeTypeInfoData() &&
+      (!::skipExternalRttiDefinition ||
+       Fortran::semantics::IsFromBuiltinModule(var.getSymbol())))
     return builder.createLinkOnceODRLinkage();
   if (var.isModuleOrSubmoduleVariable())
     return {}; // external linkage
diff --git a/flang/lib/Optimizer/CodeGen/CodeGen.cpp b/flang/lib/Optimizer/CodeGen/CodeGen.cpp
index a3de3ae9d116a..2b018912b40e4 100644
--- a/flang/lib/Optimizer/CodeGen/CodeGen.cpp
+++ b/flang/lib/Optimizer/CodeGen/CodeGen.cpp
@@ -1294,6 +1294,51 @@ genCUFAllocDescriptor(mlir::Location loc,
       .getResult();
 }
 
+/// Get the address of the type descriptor global variable that was created by
+/// lowering for derived type \p recType.
+template <typename ModOpTy>
+static mlir::Value
+getTypeDescriptor(ModOpTy mod, mlir::ConversionPatternRewriter &rewriter,
+                  mlir::Location loc, fir::RecordType recType,
+                  const fir::FIRToLLVMPassOptions &options) {
+  std::string name =
+      options.typeDescriptorsRenamedForAssembly
+          ? fir::NameUniquer::getTypeDescriptorAssemblyName(recType.getName())
+          : fir::NameUniquer::getTypeDescriptorName(recType.getName());
+  mlir::Type llvmPtrTy = ::getLlvmPtrType(mod.getContext());
+  if (auto global = mod.template lookupSymbol<fir::GlobalOp>(name))
+    return rewriter.create<mlir::LLVM::AddressOfOp>(loc, llvmPtrTy,
+                                                    global.getSymName());
+  // The global may have already been translated to LLVM.
+  if (auto global = mod.template lookupSymbol<mlir::LLVM::GlobalOp>(name))
+    return rewriter.create<mlir::LLVM::AddressOfOp>(loc, llvmPtrTy,
+                                                    global.getSymName());
+  // Type info derived types do not have type descriptors since they are the
+  // types defining type descriptors.
+  if (options.ignoreMissingTypeDescriptors ||
+      fir::NameUniquer::belongsToModule(
+          name, Fortran::semantics::typeInfoBuiltinModule))
+    return rewriter.create<mlir::LLVM::ZeroOp>(loc, llvmPtrTy);
+
+  if (!options.skipExternalRttiDefinition)
+    fir::emitFatalError(loc,
+                        "runtime derived type info descriptor was not "
+                        "generated and skipExternalRttiDefinition and "
+                        "ignoreMissingTypeDescriptors options are not set");
+
+  // Rtti for a derived type defined in another compilation unit and for which
+  // rtti was not defined in lowering because of the skipExternalRttiDefinition
+  // option. Generate the object declaration now.
+  auto insertPt = rewriter.saveInsertionPoint();
+  rewriter.setInsertionPoint(mod.getBody(), mod.getBody()->end());
+  mlir::LLVM::GlobalOp global = rewriter.create<mlir::LLVM::GlobalOp>(
+      loc, llvmPtrTy, /*constant=*/true, mlir::LLVM::Linkage::External, name,
+      mlir::Attribute());
+  rewriter.restoreInsertionPoint(insertPt);
+  return rewriter.create<mlir::LLVM::AddressOfOp>(loc, llvmPtrTy,
+                                                  global.getSymName());
+}
+
 /// Common base class for embox to descriptor conversion.
 template <typename OP>
 struct EmboxCommonConversion : public fir::FIROpConversion<OP> {
@@ -1406,36 +1451,6 @@ struct EmboxCommonConversion : public fir::FIROpConversion<OP> {
                        stride);
   }
 
-  /// Get the address of the type descriptor global variable that was created by
-  /// lowering for derived type \p recType.
-  template <typename ModOpTy>
-  mlir::Value
-  getTypeDescriptor(ModOpTy mod, mlir::ConversionPatternRewriter &rewriter,
-                    mlir::Location loc, fir::RecordType recType) const {
-    std::string name =
-        this->options.typeDescriptorsRenamedForAssembly
-            ? fir::NameUniquer::getTypeDescriptorAssemblyName(recType.getName())
-            : fir::NameUniquer::getTypeDescriptorName(recType.getName());
-    mlir::Type llvmPtrTy = ::getLlvmPtrType(mod.getContext());
-    if (auto global = mod.template lookupSymbol<fir::GlobalOp>(name)) {
-      return rewriter.create<mlir::LLVM::AddressOfOp>(loc, llvmPtrTy,
-                                                      global.getSymName());
-    }
-    if (auto global = mod.template lookupSymbol<mlir::LLVM::GlobalOp>(name)) {
-      // The global may have already been translated to LLVM.
-      return rewriter.create<mlir::LLVM::AddressOfOp>(loc, llvmPtrTy,
-                                                      global.getSymName());
-    }
-    // Type info derived types do not have type descriptors since they are the
-    // types defining type descriptors.
-    if (!this->options.ignoreMissingTypeDescriptors &&
-        !fir::NameUniquer::belongsToModule(
-            name, Fortran::semantics::typeInfoBuiltinModule))
-      fir::emitFatalError(
-          loc, "runtime derived type info descriptor was not generated");
-    return rewriter.create<mlir::LLVM::ZeroOp>(loc, llvmPtrTy);
-  }
-
   template <typename ModOpTy>
   mlir::Value populateDescriptor(mlir::Location loc, ModOpTy mod,
                                  fir::BaseBoxType boxTy, mlir::Type inputType,
@@ -1500,7 +1515,8 @@ struct EmboxCommonConversion : public fir::FIROpConversion<OP> {
           mlir::Type innerType = fir::unwrapInnerType(inputType);
           if (innerType && mlir::isa<fir::RecordType>(innerType)) {
             auto recTy = mlir::dyn_cast<fir::RecordType>(innerType);
-            typeDesc = getTypeDescriptor(mod, rewriter, loc, recTy);
+            typeDesc =
+                getTypeDescriptor(mod, rewriter, loc, recTy, this->options);
           } else {
             // Unlimited polymorphic type descriptor with no record type. Set
             // type descriptor address to a clean state.
@@ -1508,8 +1524,8 @@ struct EmboxCommonConversion : public fir::FIROpConversion<OP> {
                 loc, ::getLlvmPtrType(mod.getContext()));
           }
         } else {
-          typeDesc = getTypeDescriptor(mod, rewriter, loc,
-                                       fir::unwrapIfDerived(boxTy));
+          typeDesc = getTypeDescriptor(
+              mod, rewriter, loc, fir::unwrapIfDerived(boxTy), this->options);
         }
       }
       if (typeDesc)
@@ -3021,22 +3037,10 @@ struct TypeDescOpConversion : public fir::FIROpConversion<fir::TypeDescOp> {
     assert(mlir::isa<fir::RecordType>(inTy) && "expecting fir.type");
     auto recordType = mlir::dyn_cast<fir::RecordType>(inTy);
     auto module = typeDescOp.getOperation()->getParentOfType<mlir::ModuleOp>();
-    std::string typeDescName =
-        this->options.typeDescriptorsRenamedForAssembly
-            ? fir::NameUniquer::getTypeDescriptorAssemblyName(
-                  recordType.getName())
-            : fir::NameUniquer::getTypeDescriptorName(recordType.getName());
-    auto llvmPtrTy = ::getLlvmPtrType(typeDescOp.getContext());
-    if (auto global = module.lookupSymbol<mlir::LLVM::GlobalOp>(typeDescName)) {
-      rewriter.replaceOpWithNewOp<mlir::LLVM::AddressOfOp>(
-          typeDescOp, llvmPtrTy, global.getSymName());
-      return mlir::success();
-    } else if (auto global = module.lookupSymbol<fir::GlobalOp>(typeDescName)) {
-      rewriter.replaceOpWithNewOp<mlir::LLVM::AddressOfOp>(
-          typeDescOp, llvmPtrTy, global.getSymName());
-      return mlir::success();
-    }
-    return mlir::failure();
+    mlir::Value typeDesc = getTypeDescriptor(
+        module, rewriter, typeDescOp.getLoc(), recordType, this->options);
+    rewriter.replaceOp(typeDescOp, typeDesc);
+    return mlir::success();
   }
 };
 
diff --git a/flang/lib/Optimizer/Passes/CommandLineOpts.cpp b/flang/lib/Optimizer/Passes/CommandLineOpts.cpp
index f95a280883cba..014237542f24d 100644
--- a/flang/lib/Optimizer/Passes/CommandLineOpts.cpp
+++ b/flang/lib/Optimizer/Passes/CommandLineOpts.cpp
@@ -39,6 +39,12 @@ cl::opt<bool> ignoreMissingTypeDescriptors(
              "translating FIR to LLVM"),
     cl::init(false), cl::Hidden);
 
+cl::opt<bool> skipExternalRttiDefinition(
+    "skip-external-rtti-definition", llvm::cl::init(false),
+    llvm::cl::desc("do not define rtti static objects for types belonging to "
+                   "other compilation units"),
+    cl::Hidden);
+
 OptimizationLevel defaultOptLevel{OptimizationLevel::O0};
 
 codegenoptions::DebugInfoKind noDebugInfo{codegenoptions::NoDebugInfo};
diff --git a/flang/lib/Optimizer/Passes/Pipelines.cpp b/flang/lib/Optimizer/Passes/Pipelines.cpp
index 70f57bdeddd3f..42d9e7ba2418f 100644
--- a/flang/lib/Optimizer/Passes/Pipelines.cpp
+++ b/flang/lib/Optimizer/Passes/Pipelines.cpp
@@ -108,6 +108,7 @@ void addFIRToLLVMPass(mlir::PassManager &pm,
                       const MLIRToLLVMPassPipelineConfig &config) {
   fir::FIRToLLVMPassOptions options;
   options.ignoreMissingTypeDescriptors = ignoreMissingTypeDescriptors;
+  options.skipExternalRttiDefinition = skipExternalRttiDefinition;
   options.applyTBAA = config.AliasAnalysis;
   options.forceUnifiedTBAATree = useOldAliasTags;
   options.typeDescriptorsRenamedForAssembly =
diff --git a/flang/lib/Optimizer/Transforms/PolymorphicOpConversion.cpp b/flang/lib/Optimizer/Transforms/PolymorphicOpConversion.cpp
index f9a4c4d0283c7..57eae1ff052a2 100644
--- a/flang/lib/Optimizer/Transforms/PolymorphicOpConversion.cpp
+++ b/flang/lib/Optimizer/Transforms/PolymorphicOpConversion.cpp
@@ -16,7 +16,6 @@
 #include "flang/Optimizer/Dialect/Support/KindMapping.h"
 #include "flang/Optimizer/Support/InternalNames.h"
 #include "flang/Optimizer/Support/TypeCode.h"
-#include "flang/Optimizer/Support/Utils.h"
 #include "flang/Optimizer/Transforms/Passes.h"
 #include "flang/Runtime/derived-api.h"
 #include "flang/Semantics/runtime-type-info.h"
@@ -38,6 +37,45 @@ namespace fir {
 using namespace fir;
 using namespace mlir;
 
+// Reconstruct binding tables for dynamic dispatch.
+using BindingTable = llvm::DenseMap<llvm::StringRef, unsigned>;
+using BindingTables = llvm::DenseMap<llvm::StringRef, BindingTable>;
+
+static std::string getTypeDescriptorTypeName() {
+  llvm::SmallVector<llvm::StringRef, 1> modules = {
+      Fortran::semantics::typeInfoBuiltinModule};
+  return fir::NameUniquer::doType(modules, /*proc=*/{}, /*blockId=*/0,
+                                  Fortran::semantics::typeDescriptorTypeName,
+                                  /*kinds=*/{});
+}
+
+static std::optional<mlir::Type>
+buildBindingTables(BindingTables &bindingTables, mlir::ModuleOp mod) {
+
+  std::optional<mlir::Type> typeDescriptorType;
+  std::string typeDescriptorTypeName = getTypeDescriptorTypeName();
+  // The binding tables are defined in FIR after lowering inside fir.type_info
+  // operations. Go through each binding tables and store the procedure name and
+  // binding index for later use by the fir.dispatch conversion pattern.
+  for (auto typeInfo : mod.getOps<fir::TypeInfoOp>()) {
+    if (!typeDescriptorType && typeInfo.getSymName() == typeDescriptorTypeName)
+      typeDescriptorType = typeInfo.getType();
+    unsigned bindingIdx = 0;
+    BindingTable bindings;
+    if (typeInfo.getDispatchTable().empty()) {
+      bindingTables[typeInfo.getSymName()] = bindings;
+      continue;
+    }
+    for (auto dtEntry :
+         typeInfo.getDispatchTable().front().getOps<fir::DTEntryOp>()) {
+      bindings[dtEntry.getMethod()] = bindingIdx;
+      ++bindingIdx;
+    }
+    bindingTables[typeInfo.getS...
[truncated]

Copy link
Contributor

@vzakhari vzakhari left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great! Thank you, Jean!

Copy link
Contributor

@tblah tblah left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thanks!

@jeanPerier jeanPerier merged commit e816817 into llvm:main Jun 27, 2025
12 checks passed
@llvm-ci
Copy link
Collaborator

llvm-ci commented Jun 27, 2025

LLVM Buildbot has detected a new failure on builder amdgpu-offload-rhel-8-cmake-build-only running on rocm-docker-rhel-8 while building flang at step 4 "annotate".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/204/builds/13662

Here is the relevant piece of the build log for the reference
Step 4 (annotate) failure: '../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py --jobs=32' (failure)
...
[7847/7887] Linking CXX executable bin/tco
[7848/7887] Linking CXX shared library lib/libFortranSemantics.so.21.0git
[7849/7887] Creating library symlink lib/libFortranSemantics.so
[7850/7887] Linking CXX executable tools/flang/unittests/Evaluate/logical.test
[7851/7887] Linking CXX executable tools/flang/unittests/Evaluate/integer.test
[7852/7887] Linking CXX executable tools/flang/unittests/Evaluate/real.test
[7853/7887] Linking CXX executable tools/flang/unittests/Evaluate/intrinsics.test
[7854/7887] Linking CXX executable tools/flang/unittests/Evaluate/expression.test
[7855/7887] Linking CXX executable tools/flang/unittests/Evaluate/folding.test
[7856/7887] Linking CXX shared library lib/libFortranLower.so.21.0git
FAILED: lib/libFortranLower.so.21.0git 
: && /usr/bin/c++ -fPIC -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wno-uninitialized -Wno-nonnull -Wno-class-memaccess -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wno-comment -Wno-misleading-indentation -fdiagnostics-color -ffunction-sections -fdata-sections -Wno-deprecated-copy -Wno-ctad-maybe-unsupported -fno-semantic-interposition -fpch-preprocess -O3 -DNDEBUG -fno-semantic-interposition  -Wl,-z,defs -Wl,-z,nodelete   -Wl,-rpath-link,/home/botworker/bbot/amdgpu-offload-rhel-8-cmake-build-only/build/./lib  -Wl,--gc-sections -shared -Wl,-soname,libFortranLower.so.21.0git -o lib/libFortranLower.so.21.0git tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Allocatable.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Bridge.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/CallInterface.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Coarray.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ComponentPath.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertArrayConstructor.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertCall.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertConstant.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertExpr.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertExprToHLFIR.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertProcedureDesignator.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertType.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertVariable.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/CustomIntrinsicCall.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/HlfirIntrinsics.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/HostAssociations.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/IO.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/IterationSpace.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/LoweringOptions.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Mangler.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenACC.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/ClauseProcessor.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/Clauses.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/DataSharingProcessor.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/Decomposer.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/OpenMP.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/ReductionProcessor.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/Utils.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/PFTBuilder.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Runtime.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Support/PrivateReductionUtils.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Support/Utils.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/SymbolMap.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/VectorSubscripts.cpp.o  -Wl,-rpath,"\$ORIGIN/../lib:/home/botworker/bbot/amdgpu-offload-rhel-8-cmake-build-only/build/lib:"  lib/libFIRTransforms.so.21.0git  lib/libFortranSemantics.so.21.0git  lib/libFIRBuilder.so.21.0git  lib/libCUFDialect.so.21.0git  lib/libFIRSupport.so.21.0git  lib/libHLFIRDialect.so.21.0git  lib/libMLIRFuncAllExtensions.so.21.0git  lib/libMLIRFuncInlinerExtension.so.21.0git  lib/libMLIRFuncMeshShardingExtensions.so.21.0git  lib/libMLIRTensorAllExtensions.so.21.0git  lib/libMLIRTensorMeshShardingExtensions.so.21.0git  lib/libFIRDialect.so.21.0git  lib/libCUFAttrs.so.21.0git  lib/libFIRDialectSupport.so.21.0git  lib/libMLIRAffineTransformOps.so.21.0git  lib/libMLIRAMDGPUTransforms.so.21.0git  lib/libMLIRAMDGPUUtils.so.21.0git  lib/libMLIRArithValueBound
1.0git  lib/libMLIRArmSMEDialect.so.21.0git  lib/libMLIRArmSVEVectorTransformOps.so.21.0git  lib/libMLIRAsyncTransforms.so.21.0git  lib/libMLIRBufferizationPipelines.so.21.0git  lib/libMLIRBufferizationTransformOps.so.21.0git  lib/libMLIRControlFlowTransforms.so.21.0git  lib/libMLIRDLTITransformOps.so.21.0git  lib/libMLIREmitCTransforms.so.21.0git  lib/libMLIREmitCDialect.so.21.0git  lib/libMLIRFuncTransformOps.so.21.0git  lib/libMLIRFuncUtils.so.21.0git  lib/libMLIRGPUTransformOps.so.21.0git  lib/libMLIRGPUPipelines.so.21.0git  lib/libMLIRIndexToLLVM.so.21.0git  lib/libMLIRNVVMToLLVM.so.21.0git  lib/libMLIRVCIXDialect.so.21.0git  lib/libMLIRMathTransforms.so.21.0git  lib/libMLIRMemRefTransformOps.so.21.0git  lib/libMLIRMLProgramTransforms.so.21.0git  lib/libMLIRMLProgramDialect.so.21.0git  lib/libMLIRMPIDialect.so.21.0git  lib/libMLIRNVGPUUtils.so.21.0git  lib/libMLIRNVGPUTransformOps.so.21.0git  lib/libMLIRNVGPUToNVVM.so.21.0git  lib/libMLIRNVGPUTransforms.so.21.0git  lib/libMLIROpenACCTransforms.so.21.0git  lib/libMLIROpenACCDialect.so.21.0git  lib/libMLIRPtrDialect.so.21.0git  lib/libMLIRQuantTransforms.so.21.0git  lib/libMLIRSCFTransformOps.so.21.0git  lib/libMLIRShapeOpsTransforms.so.21.0git  lib/libMLIRShapeDialect.so.21.0git  lib/libMLIRSMT.so.21.0git  lib/libMLIRSparseTensorPipelines.so.21.0git  lib/libMLIRAffineToStandard.so.21.0git  lib/libMLIRSCFToControlFlow.so.21.0git  lib/libMLIRGPUToNVVMTransforms.so.21.0git  lib/libMLIRGPUToGPURuntimeTransforms.so.21.0git  lib/libMLIRGPUTransforms.so.21.0git  lib/libMLIRAMDGPUDialect.so.21.0git  lib/libMLIRAsyncToLLVM.so.21.0git  lib/libMLIRAsyncDialect.so.21.0git  lib/libMLIRConvertToLLVMPass.so.21.0git  lib/libMLIRConvertToLLVMInterface.so.21.0git  lib/libMLIRMathToLLVM.so.21.0git  lib/libMLIRReconcileUnrealizedCasts.so.21.0git  lib/libMLIRComplexToLLVM.so.21.0git  lib/libMLIRComplexToLibm.so.21.0git  lib/libMLIRComplexToStandard.so.21.0git  lib/libMLIRComplexDivisionConversion.so.21.0git  lib/libMLIRMathToLibm.so.21.0git  lib/libMLIRUBToLLVM.so.21.0git  lib/libMLIRVectorToLLVMPass.so.21.0git  lib/libMLIRAMXTransforms.so.21.0git  lib/libMLIRAMXDialect.so.21.0git  lib/libMLIRArmNeonTransforms.so.21.0git  lib/libMLIRArmNeonDialect.so.21.0git  lib/libMLIRArmSVETransforms.so.21.0git  lib/libMLIRArmSVEDialect.so.21.0git  lib/libMLIRSparseTensorTransformOps.so.21.0git  lib/libMLIRLinalgTransformOps.so.21.0git  lib/libMLIRSparseTensorTransforms.so.21.0git  lib/libMLIRLinalgTransforms.so.21.0git  lib/libMLIRMemRefTransforms.so.21.0git  lib/libMLIRNVGPUDialect.so.21.0git  lib/libMLIRMeshTransforms.so.21.0git  lib/libMLIRSparseTensorUtils.so.21.0git  lib/libMLIRSPIRVModuleCombiner.so.21.0git  lib/libMLIRSPIRVTransforms.so.21.0git  lib/libMLIRSPIRVConversion.so.21.0git  lib/libMLIRSPIRVUtils.so.21.0git  lib/libMLIRTensorInferTypeOpInterfaceImpl.so.21.0git  lib/libMLIRTensorTilingInterfaceImpl.so.21.0git  lib/libMLIRLinalgUtils.so.21.0git  lib/libMLIRTensorTransformOps.so.21.0git  lib/libMLIRTosaShardingInterfaceImpl.so.21.0git  lib/libMLIRTosaTransforms.so.21.0git  lib/libMLIRTransformDebugExtension.so.21.0git  lib/libMLIRTransformDialectIRDLExtension.so.21.0git  lib/libMLIRIRDL.so.21.0git  lib/libMLIRTransformLoopExtension.so.21.0git  lib/libMLIRTransformPDLExtension.so.21.0git  lib/libMLIRTransformDialectTransforms.so.21.0git  lib/libMLIRVectorTransformOps.so.21.0git  lib/libMLIRTransformDialect.so.21.0git  lib/libMLIRTransformDialectInterfaces.so.21.0git  lib/libMLIRTransformDialectUtils.so.21.0git  lib/libMLIRVectorToSCF.so.21.0git  lib/libMLIRVectorToLLVM.so.21.0git  lib/libMLIRX86VectorTransforms.so.21.0git  lib/libMLIRX86VectorDialect.so.21.0git  lib/libMLIRSPIRVTarget.so.21.0git  lib/libMLIRSPIRVSerialization.so.21.0git  lib/libMLIRSPIRVDialect.so.21.0git  lib/libMLIRSPIRVImageInterfaces.so.21.0git  lib/libMLIRSPIRVBinaryUtils.so.21.0git  lib/libMLIRNVVMTarget.so.21.0git  lib/libMLIRNVVMToLLVMIRTranslation.so.21.0git  lib/libMLIRROCDLTarget.so.21.0git  lib/libMLIRTargetLLVM.so.21.0git  lib/libMLIRExecutionEngineUtils.so.21.0git  lib/libMLIRROCDLToLLVMIRTranslation.so.21.

1.0git  -lpthread  lib/libLLVMFrontendOpenMP.so.21.0git  lib/libLLVMFrontendOffloading.so.21.0git  lib/libLLVMTransformUtils.so.21.0git  lib/libLLVMAnalysis.so.21.0git  lib/libLLVMMCParser.so.21.0git  lib/libLLVMIRReader.so.21.0git  lib/libLLVMAsmParser.so.21.0git  lib/libLLVMBitReader.so.21.0git  lib/libLLVMCore.so.21.0git  lib/libLLVMMC.so.21.0git  lib/libLLVMBinaryFormat.so.21.0git  lib/libLLVMTargetParser.so.21.0git  lib/libLLVMSupport.so.21.0git  -Wl,-rpath-link,/home/botworker/bbot/amdgpu-offload-rhel-8-cmake-build-only/build/lib && :
tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Bridge.cpp.o: In function `std::_Function_handler<void (), (anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::{lambda()#8}>::_M_invoke(std::_Any_data const&)':
Bridge.cpp:(.text._ZNSt17_Function_handlerIFvvEZN12_GLOBAL__N_112FirConverter3runERN7Fortran5lower3pft7ProgramEEUlvE6_E9_M_invokeERKSt9_Any_data+0xe7): undefined reference to `skipExternalRttiDefinition'
tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertVariable.cpp.o: In function `getLinkageAttribute(fir::FirOpBuilder&, Fortran::lower::pft::Variable const&)':
ConvertVariable.cpp:(.text._ZL19getLinkageAttributeRN3fir12FirOpBuilderERKN7Fortran5lower3pft8VariableE+0x1d): undefined reference to `skipExternalRttiDefinition'
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
['ninja'] exited with return code 1.
The build step threw an exception...
Traceback (most recent call last):
  File "../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 50, in step
    yield
  File "../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 41, in main
    run_command(["ninja"])
  File "../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 63, in run_command
    util.report_run_cmd(cmd, cwd=directory)
  File "/home/botworker/bbot/amdgpu-offload-rhel-8-cmake-build-only/llvm-zorg/zorg/buildbot/builders/annotated/util.py", line 49, in report_run_cmd
    subprocess.check_call(cmd, shell=shell, *args, **kwargs)
  File "/usr/lib64/python3.8/subprocess.py", line 364, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['ninja']' returned non-zero exit status 1.
@@@STEP_FAILURE@@@
Step 7 (build cmake config) failure: build cmake config (failure)
...
[7847/7887] Linking CXX executable bin/tco
[7848/7887] Linking CXX shared library lib/libFortranSemantics.so.21.0git
[7849/7887] Creating library symlink lib/libFortranSemantics.so
[7850/7887] Linking CXX executable tools/flang/unittests/Evaluate/logical.test
[7851/7887] Linking CXX executable tools/flang/unittests/Evaluate/integer.test
[7852/7887] Linking CXX executable tools/flang/unittests/Evaluate/real.test
[7853/7887] Linking CXX executable tools/flang/unittests/Evaluate/intrinsics.test
[7854/7887] Linking CXX executable tools/flang/unittests/Evaluate/expression.test
[7855/7887] Linking CXX executable tools/flang/unittests/Evaluate/folding.test
[7856/7887] Linking CXX shared library lib/libFortranLower.so.21.0git
FAILED: lib/libFortranLower.so.21.0git 
: && /usr/bin/c++ -fPIC -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wno-uninitialized -Wno-nonnull -Wno-class-memaccess -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wno-comment -Wno-misleading-indentation -fdiagnostics-color -ffunction-sections -fdata-sections -Wno-deprecated-copy -Wno-ctad-maybe-unsupported -fno-semantic-interposition -fpch-preprocess -O3 -DNDEBUG -fno-semantic-interposition  -Wl,-z,defs -Wl,-z,nodelete   -Wl,-rpath-link,/home/botworker/bbot/amdgpu-offload-rhel-8-cmake-build-only/build/./lib  -Wl,--gc-sections -shared -Wl,-soname,libFortranLower.so.21.0git -o lib/libFortranLower.so.21.0git tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Allocatable.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Bridge.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/CallInterface.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Coarray.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ComponentPath.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertArrayConstructor.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertCall.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertConstant.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertExpr.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertExprToHLFIR.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertProcedureDesignator.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertType.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertVariable.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/CustomIntrinsicCall.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/HlfirIntrinsics.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/HostAssociations.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/IO.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/IterationSpace.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/LoweringOptions.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Mangler.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenACC.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/ClauseProcessor.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/Clauses.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/DataSharingProcessor.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/Decomposer.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/OpenMP.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/ReductionProcessor.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/Utils.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/PFTBuilder.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Runtime.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Support/PrivateReductionUtils.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Support/Utils.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/SymbolMap.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/VectorSubscripts.cpp.o  -Wl,-rpath,"\$ORIGIN/../lib:/home/botworker/bbot/amdgpu-offload-rhel-8-cmake-build-only/build/lib:"  lib/libFIRTransforms.so.21.0git  lib/libFortranSemantics.so.21.0git  lib/libFIRBuilder.so.21.0git  lib/libCUFDialect.so.21.0git  lib/libFIRSupport.so.21.0git  lib/libHLFIRDialect.so.21.0git  lib/libMLIRFuncAllExtensions.so.21.0git  lib/libMLIRFuncInlinerExtension.so.21.0git  lib/libMLIRFuncMeshShardingExtensions.so.21.0git  lib/libMLIRTensorAllExtensions.so.21.0git  lib/libMLIRTensorMeshShardingExtensions.so.21.0git  lib/libFIRDialect.so.21.0git  lib/libCUFAttrs.so.21.0git  lib/libFIRDialectSupport.so.21.0git  lib/libMLIRAffineTransformOps.so.21.0git  lib/libMLIRAMDGPUTransforms.so.21.0git  lib/libMLIRAMDGPUUtils.so.21.0git  lib/libMLIRArithValueBound
1.0git  lib/libMLIRArmSMEDialect.so.21.0git  lib/libMLIRArmSVEVectorTransformOps.so.21.0git  lib/libMLIRAsyncTransforms.so.21.0git  lib/libMLIRBufferizationPipelines.so.21.0git  lib/libMLIRBufferizationTransformOps.so.21.0git  lib/libMLIRControlFlowTransforms.so.21.0git  lib/libMLIRDLTITransformOps.so.21.0git  lib/libMLIREmitCTransforms.so.21.0git  lib/libMLIREmitCDialect.so.21.0git  lib/libMLIRFuncTransformOps.so.21.0git  lib/libMLIRFuncUtils.so.21.0git  lib/libMLIRGPUTransformOps.so.21.0git  lib/libMLIRGPUPipelines.so.21.0git  lib/libMLIRIndexToLLVM.so.21.0git  lib/libMLIRNVVMToLLVM.so.21.0git  lib/libMLIRVCIXDialect.so.21.0git  lib/libMLIRMathTransforms.so.21.0git  lib/libMLIRMemRefTransformOps.so.21.0git  lib/libMLIRMLProgramTransforms.so.21.0git  lib/libMLIRMLProgramDialect.so.21.0git  lib/libMLIRMPIDialect.so.21.0git  lib/libMLIRNVGPUUtils.so.21.0git  lib/libMLIRNVGPUTransformOps.so.21.0git  lib/libMLIRNVGPUToNVVM.so.21.0git  lib/libMLIRNVGPUTransforms.so.21.0git  lib/libMLIROpenACCTransforms.so.21.0git  lib/libMLIROpenACCDialect.so.21.0git  lib/libMLIRPtrDialect.so.21.0git  lib/libMLIRQuantTransforms.so.21.0git  lib/libMLIRSCFTransformOps.so.21.0git  lib/libMLIRShapeOpsTransforms.so.21.0git  lib/libMLIRShapeDialect.so.21.0git  lib/libMLIRSMT.so.21.0git  lib/libMLIRSparseTensorPipelines.so.21.0git  lib/libMLIRAffineToStandard.so.21.0git  lib/libMLIRSCFToControlFlow.so.21.0git  lib/libMLIRGPUToNVVMTransforms.so.21.0git  lib/libMLIRGPUToGPURuntimeTransforms.so.21.0git  lib/libMLIRGPUTransforms.so.21.0git  lib/libMLIRAMDGPUDialect.so.21.0git  lib/libMLIRAsyncToLLVM.so.21.0git  lib/libMLIRAsyncDialect.so.21.0git  lib/libMLIRConvertToLLVMPass.so.21.0git  lib/libMLIRConvertToLLVMInterface.so.21.0git  lib/libMLIRMathToLLVM.so.21.0git  lib/libMLIRReconcileUnrealizedCasts.so.21.0git  lib/libMLIRComplexToLLVM.so.21.0git  lib/libMLIRComplexToLibm.so.21.0git  lib/libMLIRComplexToStandard.so.21.0git  lib/libMLIRComplexDivisionConversion.so.21.0git  lib/libMLIRMathToLibm.so.21.0git  lib/libMLIRUBToLLVM.so.21.0git  lib/libMLIRVectorToLLVMPass.so.21.0git  lib/libMLIRAMXTransforms.so.21.0git  lib/libMLIRAMXDialect.so.21.0git  lib/libMLIRArmNeonTransforms.so.21.0git  lib/libMLIRArmNeonDialect.so.21.0git  lib/libMLIRArmSVETransforms.so.21.0git  lib/libMLIRArmSVEDialect.so.21.0git  lib/libMLIRSparseTensorTransformOps.so.21.0git  lib/libMLIRLinalgTransformOps.so.21.0git  lib/libMLIRSparseTensorTransforms.so.21.0git  lib/libMLIRLinalgTransforms.so.21.0git  lib/libMLIRMemRefTransforms.so.21.0git  lib/libMLIRNVGPUDialect.so.21.0git  lib/libMLIRMeshTransforms.so.21.0git  lib/libMLIRSparseTensorUtils.so.21.0git  lib/libMLIRSPIRVModuleCombiner.so.21.0git  lib/libMLIRSPIRVTransforms.so.21.0git  lib/libMLIRSPIRVConversion.so.21.0git  lib/libMLIRSPIRVUtils.so.21.0git  lib/libMLIRTensorInferTypeOpInterfaceImpl.so.21.0git  lib/libMLIRTensorTilingInterfaceImpl.so.21.0git  lib/libMLIRLinalgUtils.so.21.0git  lib/libMLIRTensorTransformOps.so.21.0git  lib/libMLIRTosaShardingInterfaceImpl.so.21.0git  lib/libMLIRTosaTransforms.so.21.0git  lib/libMLIRTransformDebugExtension.so.21.0git  lib/libMLIRTransformDialectIRDLExtension.so.21.0git  lib/libMLIRIRDL.so.21.0git  lib/libMLIRTransformLoopExtension.so.21.0git  lib/libMLIRTransformPDLExtension.so.21.0git  lib/libMLIRTransformDialectTransforms.so.21.0git  lib/libMLIRVectorTransformOps.so.21.0git  lib/libMLIRTransformDialect.so.21.0git  lib/libMLIRTransformDialectInterfaces.so.21.0git  lib/libMLIRTransformDialectUtils.so.21.0git  lib/libMLIRVectorToSCF.so.21.0git  lib/libMLIRVectorToLLVM.so.21.0git  lib/libMLIRX86VectorTransforms.so.21.0git  lib/libMLIRX86VectorDialect.so.21.0git  lib/libMLIRSPIRVTarget.so.21.0git  lib/libMLIRSPIRVSerialization.so.21.0git  lib/libMLIRSPIRVDialect.so.21.0git  lib/libMLIRSPIRVImageInterfaces.so.21.0git  lib/libMLIRSPIRVBinaryUtils.so.21.0git  lib/libMLIRNVVMTarget.so.21.0git  lib/libMLIRNVVMToLLVMIRTranslation.so.21.0git  lib/libMLIRROCDLTarget.so.21.0git  lib/libMLIRTargetLLVM.so.21.0git  lib/libMLIRExecutionEngineUtils.so.21.0git  lib/libMLIRROCDLToLLVMIRTranslation.so.21.

1.0git  -lpthread  lib/libLLVMFrontendOpenMP.so.21.0git  lib/libLLVMFrontendOffloading.so.21.0git  lib/libLLVMTransformUtils.so.21.0git  lib/libLLVMAnalysis.so.21.0git  lib/libLLVMMCParser.so.21.0git  lib/libLLVMIRReader.so.21.0git  lib/libLLVMAsmParser.so.21.0git  lib/libLLVMBitReader.so.21.0git  lib/libLLVMCore.so.21.0git  lib/libLLVMMC.so.21.0git  lib/libLLVMBinaryFormat.so.21.0git  lib/libLLVMTargetParser.so.21.0git  lib/libLLVMSupport.so.21.0git  -Wl,-rpath-link,/home/botworker/bbot/amdgpu-offload-rhel-8-cmake-build-only/build/lib && :
tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Bridge.cpp.o: In function `std::_Function_handler<void (), (anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::{lambda()#8}>::_M_invoke(std::_Any_data const&)':
Bridge.cpp:(.text._ZNSt17_Function_handlerIFvvEZN12_GLOBAL__N_112FirConverter3runERN7Fortran5lower3pft7ProgramEEUlvE6_E9_M_invokeERKSt9_Any_data+0xe7): undefined reference to `skipExternalRttiDefinition'
tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertVariable.cpp.o: In function `getLinkageAttribute(fir::FirOpBuilder&, Fortran::lower::pft::Variable const&)':
ConvertVariable.cpp:(.text._ZL19getLinkageAttributeRN3fir12FirOpBuilderERKN7Fortran5lower3pft8VariableE+0x1d): undefined reference to `skipExternalRttiDefinition'
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
['ninja'] exited with return code 1.
The build step threw an exception...
Traceback (most recent call last):
  File "../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 50, in step
    yield
  File "../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 41, in main
    run_command(["ninja"])
  File "../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 63, in run_command
    util.report_run_cmd(cmd, cwd=directory)
  File "/home/botworker/bbot/amdgpu-offload-rhel-8-cmake-build-only/llvm-zorg/zorg/buildbot/builders/annotated/util.py", line 49, in report_run_cmd
    subprocess.check_call(cmd, shell=shell, *args, **kwargs)
  File "/usr/lib64/python3.8/subprocess.py", line 364, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['ninja']' returned non-zero exit status 1.
program finished with exit code 0
elapsedTime=352.940081

@llvm-ci
Copy link
Collaborator

llvm-ci commented Jun 27, 2025

LLVM Buildbot has detected a new failure on builder amdgpu-offload-ubuntu-22-cmake-build-only running on rocm-docker-ubu-22 while building flang at step 4 "annotate".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/203/builds/14849

Here is the relevant piece of the build log for the reference
Step 4 (annotate) failure: '../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py --jobs=32' (failure)
...
[7844/7887] Creating library symlink lib/libFIRTestAnalysis.so
[7845/7887] Linking CXX shared library lib/libHLFIRTransforms.so.21.0git
[7846/7887] Creating library symlink lib/libHLFIRTransforms.so
[7847/7887] Building CXX object tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertExpr.cpp.o
[7848/7887] Linking CXX shared library lib/libflangPasses.so.21.0git
[7849/7887] Creating library symlink lib/libflangPasses.so
[7850/7887] Linking CXX executable bin/fir-opt
[7851/7887] Linking CXX executable bin/tco
[7852/7887] Building CXX object tools/flang/tools/flang-driver/CMakeFiles/flang.dir/fc1_main.cpp.o
[7853/7887] Linking CXX shared library lib/libFortranLower.so.21.0git
FAILED: lib/libFortranLower.so.21.0git 
: && /usr/bin/c++ -fPIC -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wno-uninitialized -Wno-nonnull -Wno-class-memaccess -Wno-redundant-move -Wno-pessimizing-move -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wno-misleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -Wno-deprecated-copy -Wno-ctad-maybe-unsupported -fno-semantic-interposition -fpch-preprocess -O3 -DNDEBUG -fno-semantic-interposition  -Wl,-z,defs -Wl,-z,nodelete   -Wl,-rpath-link,/home/botworker/bbot/amdgpu-offload-ubuntu-22-cmake-build-only/build/./lib  -Wl,--gc-sections -shared -Wl,-soname,libFortranLower.so.21.0git -o lib/libFortranLower.so.21.0git tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Allocatable.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Bridge.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/CallInterface.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Coarray.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ComponentPath.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertArrayConstructor.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertCall.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertConstant.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertExpr.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertExprToHLFIR.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertProcedureDesignator.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertType.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertVariable.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/CustomIntrinsicCall.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/HlfirIntrinsics.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/HostAssociations.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/IO.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/IterationSpace.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/LoweringOptions.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Mangler.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenACC.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/ClauseProcessor.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/Clauses.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/DataSharingProcessor.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/Decomposer.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/OpenMP.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/ReductionProcessor.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/Utils.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/PFTBuilder.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Runtime.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Support/PrivateReductionUtils.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Support/Utils.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/SymbolMap.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/VectorSubscripts.cpp.o  -Wl,-rpath,"\$ORIGIN/../lib:/home/botworker/bbot/amdgpu-offload-ubuntu-22-cmake-build-only/build/lib:"  lib/libFIRTransforms.so.21.0git  lib/libFortranSemantics.so.21.0git  lib/libFIRBuilder.so.21.0git  lib/libCUFDialect.so.21.0git  lib/libFIRSupport.so.21.0git  lib/libHLFIRDialect.so.21.0git  lib/libMLIRFuncAllExtensions.so.21.0git  lib/libMLIRFuncInlinerExtension.so.21.0git  lib/libMLIRFuncMeshShardingExtensions.so.21.0git  lib/libMLIRTensorAllExtensions.so.21.0git  lib/libMLIRTensorMeshShardingExtensions.so.21.0git  lib/libFIRDialect.so.21.0git  lib/libCUFAttrs.so.21.0git  lib/libFIRDialectSupport.so.21.0git  lib/libMLIRAffineTransformOps.so.21.0git  lib/libML
o.21.0git  lib/libMLIRArmNeonVectorTransformOps.so.21.0git  lib/libMLIRArmSMETransforms.so.21.0git  lib/libMLIRArmSMEDialect.so.21.0git  lib/libMLIRArmSVEVectorTransformOps.so.21.0git  lib/libMLIRAsyncTransforms.so.21.0git  lib/libMLIRBufferizationPipelines.so.21.0git  lib/libMLIRBufferizationTransformOps.so.21.0git  lib/libMLIRControlFlowTransforms.so.21.0git  lib/libMLIRDLTITransformOps.so.21.0git  lib/libMLIREmitCTransforms.so.21.0git  lib/libMLIREmitCDialect.so.21.0git  lib/libMLIRFuncTransformOps.so.21.0git  lib/libMLIRFuncUtils.so.21.0git  lib/libMLIRGPUTransformOps.so.21.0git  lib/libMLIRGPUPipelines.so.21.0git  lib/libMLIRIndexToLLVM.so.21.0git  lib/libMLIRNVVMToLLVM.so.21.0git  lib/libMLIRVCIXDialect.so.21.0git  lib/libMLIRMathTransforms.so.21.0git  lib/libMLIRMemRefTransformOps.so.21.0git  lib/libMLIRMLProgramTransforms.so.21.0git  lib/libMLIRMLProgramDialect.so.21.0git  lib/libMLIRMPIDialect.so.21.0git  lib/libMLIRNVGPUUtils.so.21.0git  lib/libMLIRNVGPUTransformOps.so.21.0git  lib/libMLIRNVGPUToNVVM.so.21.0git  lib/libMLIRNVGPUTransforms.so.21.0git  lib/libMLIROpenACCTransforms.so.21.0git  lib/libMLIROpenACCDialect.so.21.0git  lib/libMLIRPtrDialect.so.21.0git  lib/libMLIRQuantTransforms.so.21.0git  lib/libMLIRSCFTransformOps.so.21.0git  lib/libMLIRShapeOpsTransforms.so.21.0git  lib/libMLIRShapeDialect.so.21.0git  lib/libMLIRSMT.so.21.0git  lib/libMLIRSparseTensorPipelines.so.21.0git  lib/libMLIRAffineToStandard.so.21.0git  lib/libMLIRSCFToControlFlow.so.21.0git  lib/libMLIRGPUToNVVMTransforms.so.21.0git  lib/libMLIRGPUToGPURuntimeTransforms.so.21.0git  lib/libMLIRGPUTransforms.so.21.0git  lib/libMLIRAMDGPUDialect.so.21.0git  lib/libMLIRAsyncToLLVM.so.21.0git  lib/libMLIRAsyncDialect.so.21.0git  lib/libMLIRConvertToLLVMPass.so.21.0git  lib/libMLIRConvertToLLVMInterface.so.21.0git  lib/libMLIRMathToLLVM.so.21.0git  lib/libMLIRReconcileUnrealizedCasts.so.21.0git  lib/libMLIRComplexToLLVM.so.21.0git  lib/libMLIRComplexToLibm.so.21.0git  lib/libMLIRComplexToStandard.so.21.0git  lib/libMLIRComplexDivisionConversion.so.21.0git  lib/libMLIRMathToLibm.so.21.0git  lib/libMLIRUBToLLVM.so.21.0git  lib/libMLIRVectorToLLVMPass.so.21.0git  lib/libMLIRAMXTransforms.so.21.0git  lib/libMLIRAMXDialect.so.21.0git  lib/libMLIRArmNeonTransforms.so.21.0git  lib/libMLIRArmNeonDialect.so.21.0git  lib/libMLIRArmSVETransforms.so.21.0git  lib/libMLIRArmSVEDialect.so.21.0git  lib/libMLIRSparseTensorTransformOps.so.21.0git  lib/libMLIRLinalgTransformOps.so.21.0git  lib/libMLIRSparseTensorTransforms.so.21.0git  lib/libMLIRLinalgTransforms.so.21.0git  lib/libMLIRMemRefTransforms.so.21.0git  lib/libMLIRNVGPUDialect.so.21.0git  lib/libMLIRMeshTransforms.so.21.0git  lib/libMLIRSparseTensorUtils.so.21.0git  lib/libMLIRSPIRVModuleCombiner.so.21.0git  lib/libMLIRSPIRVTransforms.so.21.0git  lib/libMLIRSPIRVConversion.so.21.0git  lib/libMLIRSPIRVUtils.so.21.0git  lib/libMLIRTensorInferTypeOpInterfaceImpl.so.21.0git  lib/libMLIRTensorTilingInterfaceImpl.so.21.0git  lib/libMLIRLinalgUtils.so.21.0git  lib/libMLIRTensorTransformOps.so.21.0git  lib/libMLIRTosaShardingInterfaceImpl.so.21.0git  lib/libMLIRTosaTransforms.so.21.0git  lib/libMLIRTransformDebugExtension.so.21.0git  lib/libMLIRTransformDialectIRDLExtension.so.21.0git  lib/libMLIRIRDL.so.21.0git  lib/libMLIRTransformLoopExtension.so.21.0git  lib/libMLIRTransformPDLExtension.so.21.0git  lib/libMLIRTransformDialectTransforms.so.21.0git  lib/libMLIRVectorTransformOps.so.21.0git  lib/libMLIRTransformDialect.so.21.0git  lib/libMLIRTransformDialectInterfaces.so.21.0git  lib/libMLIRTransformDialectUtils.so.21.0git  lib/libMLIRVectorToSCF.so.21.0git  lib/libMLIRVectorToLLVM.so.21.0git  lib/libMLIRX86VectorTransforms.so.21.0git  lib/libMLIRX86VectorDialect.so.21.0git  lib/libMLIRSPIRVTarget.so.21.0git  lib/libMLIRSPIRVSerialization.so.21.0git  lib/libMLIRSPIRVDialect.so.21.0git  lib/libMLIRSPIRVImageInterfaces.so.21.0git  lib/libMLIRSPIRVBinaryUtils.so.21.0git  lib/libMLIRNVVMTarget.so.21.0git  lib/libMLIRNVVMToLLVMIRTranslation.so.21.0git  lib/libMLIRROCDLTarget.so.21.0git  lib/libMLIRTargetLLVM.so.21.

21.0git  lib/libFortranSupport.so.21.0git  lib/libMLIRIR.so.21.0git  lib/libMLIRSupport.so.21.0git  lib/libLLVMFrontendOpenMP.so.21.0git  lib/libLLVMFrontendOffloading.so.21.0git  lib/libLLVMTransformUtils.so.21.0git  lib/libLLVMAnalysis.so.21.0git  lib/libLLVMMCParser.so.21.0git  lib/libLLVMIRReader.so.21.0git  lib/libLLVMAsmParser.so.21.0git  lib/libLLVMBitReader.so.21.0git  lib/libLLVMCore.so.21.0git  lib/libLLVMMC.so.21.0git  lib/libLLVMBinaryFormat.so.21.0git  lib/libLLVMTargetParser.so.21.0git  lib/libLLVMSupport.so.21.0git  -Wl,-rpath-link,/home/botworker/bbot/amdgpu-offload-ubuntu-22-cmake-build-only/build/lib && :
/usr/bin/ld: tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Bridge.cpp.o: in function `std::_Function_handler<void (), (anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::{lambda()#8}>::_M_invoke(std::_Any_data const&)':
Bridge.cpp:(.text._ZNSt17_Function_handlerIFvvEZN12_GLOBAL__N_112FirConverter3runERN7Fortran5lower3pft7ProgramEEUlvE6_E9_M_invokeERKSt9_Any_data+0xf5): undefined reference to `skipExternalRttiDefinition'
/usr/bin/ld: tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertVariable.cpp.o: in function `getLinkageAttribute(fir::FirOpBuilder&, Fortran::lower::pft::Variable const&)':
ConvertVariable.cpp:(.text._ZL19getLinkageAttributeRN3fir12FirOpBuilderERKN7Fortran5lower3pft8VariableE+0x2d): undefined reference to `skipExternalRttiDefinition'
collect2: error: ld returned 1 exit status
[7854/7887] Building CXX object tools/flang/tools/flang-driver/CMakeFiles/flang.dir/driver.cpp.o
[7855/7887] Building CXX object tools/flang/lib/Frontend/CMakeFiles/flangFrontend.dir/ParserActions.cpp.o
[7856/7887] Building CXX object tools/flang/tools/bbc/CMakeFiles/bbc.dir/bbc.cpp.o
ninja: build stopped: subcommand failed.
['ninja'] exited with return code 1.
The build step threw an exception...
Traceback (most recent call last):
  File "/home/botworker/bbot/amdgpu-offload-ubuntu-22-cmake-build-only/build/../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 50, in step
    yield
  File "/home/botworker/bbot/amdgpu-offload-ubuntu-22-cmake-build-only/build/../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 41, in main
    run_command(["ninja"])
  File "/home/botworker/bbot/amdgpu-offload-ubuntu-22-cmake-build-only/build/../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 63, in run_command
    util.report_run_cmd(cmd, cwd=directory)
  File "/home/botworker/bbot/amdgpu-offload-ubuntu-22-cmake-build-only/llvm-zorg/zorg/buildbot/builders/annotated/util.py", line 49, in report_run_cmd
    subprocess.check_call(cmd, shell=shell, *args, **kwargs)
  File "/usr/lib/python3.10/subprocess.py", line 369, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['ninja']' returned non-zero exit status 1.
@@@STEP_FAILURE@@@
Step 7 (build cmake config) failure: build cmake config (failure)
...
[7844/7887] Creating library symlink lib/libFIRTestAnalysis.so
[7845/7887] Linking CXX shared library lib/libHLFIRTransforms.so.21.0git
[7846/7887] Creating library symlink lib/libHLFIRTransforms.so
[7847/7887] Building CXX object tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertExpr.cpp.o
[7848/7887] Linking CXX shared library lib/libflangPasses.so.21.0git
[7849/7887] Creating library symlink lib/libflangPasses.so
[7850/7887] Linking CXX executable bin/fir-opt
[7851/7887] Linking CXX executable bin/tco
[7852/7887] Building CXX object tools/flang/tools/flang-driver/CMakeFiles/flang.dir/fc1_main.cpp.o
[7853/7887] Linking CXX shared library lib/libFortranLower.so.21.0git
FAILED: lib/libFortranLower.so.21.0git 
: && /usr/bin/c++ -fPIC -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wno-uninitialized -Wno-nonnull -Wno-class-memaccess -Wno-redundant-move -Wno-pessimizing-move -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wno-misleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -Wno-deprecated-copy -Wno-ctad-maybe-unsupported -fno-semantic-interposition -fpch-preprocess -O3 -DNDEBUG -fno-semantic-interposition  -Wl,-z,defs -Wl,-z,nodelete   -Wl,-rpath-link,/home/botworker/bbot/amdgpu-offload-ubuntu-22-cmake-build-only/build/./lib  -Wl,--gc-sections -shared -Wl,-soname,libFortranLower.so.21.0git -o lib/libFortranLower.so.21.0git tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Allocatable.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Bridge.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/CallInterface.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Coarray.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ComponentPath.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertArrayConstructor.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertCall.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertConstant.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertExpr.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertExprToHLFIR.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertProcedureDesignator.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertType.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertVariable.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/CustomIntrinsicCall.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/HlfirIntrinsics.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/HostAssociations.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/IO.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/IterationSpace.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/LoweringOptions.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Mangler.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenACC.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/ClauseProcessor.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/Clauses.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/DataSharingProcessor.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/Decomposer.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/OpenMP.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/ReductionProcessor.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/Utils.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/PFTBuilder.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Runtime.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Support/PrivateReductionUtils.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Support/Utils.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/SymbolMap.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/VectorSubscripts.cpp.o  -Wl,-rpath,"\$ORIGIN/../lib:/home/botworker/bbot/amdgpu-offload-ubuntu-22-cmake-build-only/build/lib:"  lib/libFIRTransforms.so.21.0git  lib/libFortranSemantics.so.21.0git  lib/libFIRBuilder.so.21.0git  lib/libCUFDialect.so.21.0git  lib/libFIRSupport.so.21.0git  lib/libHLFIRDialect.so.21.0git  lib/libMLIRFuncAllExtensions.so.21.0git  lib/libMLIRFuncInlinerExtension.so.21.0git  lib/libMLIRFuncMeshShardingExtensions.so.21.0git  lib/libMLIRTensorAllExtensions.so.21.0git  lib/libMLIRTensorMeshShardingExtensions.so.21.0git  lib/libFIRDialect.so.21.0git  lib/libCUFAttrs.so.21.0git  lib/libFIRDialectSupport.so.21.0git  lib/libMLIRAffineTransformOps.so.21.0git  lib/libML
o.21.0git  lib/libMLIRArmNeonVectorTransformOps.so.21.0git  lib/libMLIRArmSMETransforms.so.21.0git  lib/libMLIRArmSMEDialect.so.21.0git  lib/libMLIRArmSVEVectorTransformOps.so.21.0git  lib/libMLIRAsyncTransforms.so.21.0git  lib/libMLIRBufferizationPipelines.so.21.0git  lib/libMLIRBufferizationTransformOps.so.21.0git  lib/libMLIRControlFlowTransforms.so.21.0git  lib/libMLIRDLTITransformOps.so.21.0git  lib/libMLIREmitCTransforms.so.21.0git  lib/libMLIREmitCDialect.so.21.0git  lib/libMLIRFuncTransformOps.so.21.0git  lib/libMLIRFuncUtils.so.21.0git  lib/libMLIRGPUTransformOps.so.21.0git  lib/libMLIRGPUPipelines.so.21.0git  lib/libMLIRIndexToLLVM.so.21.0git  lib/libMLIRNVVMToLLVM.so.21.0git  lib/libMLIRVCIXDialect.so.21.0git  lib/libMLIRMathTransforms.so.21.0git  lib/libMLIRMemRefTransformOps.so.21.0git  lib/libMLIRMLProgramTransforms.so.21.0git  lib/libMLIRMLProgramDialect.so.21.0git  lib/libMLIRMPIDialect.so.21.0git  lib/libMLIRNVGPUUtils.so.21.0git  lib/libMLIRNVGPUTransformOps.so.21.0git  lib/libMLIRNVGPUToNVVM.so.21.0git  lib/libMLIRNVGPUTransforms.so.21.0git  lib/libMLIROpenACCTransforms.so.21.0git  lib/libMLIROpenACCDialect.so.21.0git  lib/libMLIRPtrDialect.so.21.0git  lib/libMLIRQuantTransforms.so.21.0git  lib/libMLIRSCFTransformOps.so.21.0git  lib/libMLIRShapeOpsTransforms.so.21.0git  lib/libMLIRShapeDialect.so.21.0git  lib/libMLIRSMT.so.21.0git  lib/libMLIRSparseTensorPipelines.so.21.0git  lib/libMLIRAffineToStandard.so.21.0git  lib/libMLIRSCFToControlFlow.so.21.0git  lib/libMLIRGPUToNVVMTransforms.so.21.0git  lib/libMLIRGPUToGPURuntimeTransforms.so.21.0git  lib/libMLIRGPUTransforms.so.21.0git  lib/libMLIRAMDGPUDialect.so.21.0git  lib/libMLIRAsyncToLLVM.so.21.0git  lib/libMLIRAsyncDialect.so.21.0git  lib/libMLIRConvertToLLVMPass.so.21.0git  lib/libMLIRConvertToLLVMInterface.so.21.0git  lib/libMLIRMathToLLVM.so.21.0git  lib/libMLIRReconcileUnrealizedCasts.so.21.0git  lib/libMLIRComplexToLLVM.so.21.0git  lib/libMLIRComplexToLibm.so.21.0git  lib/libMLIRComplexToStandard.so.21.0git  lib/libMLIRComplexDivisionConversion.so.21.0git  lib/libMLIRMathToLibm.so.21.0git  lib/libMLIRUBToLLVM.so.21.0git  lib/libMLIRVectorToLLVMPass.so.21.0git  lib/libMLIRAMXTransforms.so.21.0git  lib/libMLIRAMXDialect.so.21.0git  lib/libMLIRArmNeonTransforms.so.21.0git  lib/libMLIRArmNeonDialect.so.21.0git  lib/libMLIRArmSVETransforms.so.21.0git  lib/libMLIRArmSVEDialect.so.21.0git  lib/libMLIRSparseTensorTransformOps.so.21.0git  lib/libMLIRLinalgTransformOps.so.21.0git  lib/libMLIRSparseTensorTransforms.so.21.0git  lib/libMLIRLinalgTransforms.so.21.0git  lib/libMLIRMemRefTransforms.so.21.0git  lib/libMLIRNVGPUDialect.so.21.0git  lib/libMLIRMeshTransforms.so.21.0git  lib/libMLIRSparseTensorUtils.so.21.0git  lib/libMLIRSPIRVModuleCombiner.so.21.0git  lib/libMLIRSPIRVTransforms.so.21.0git  lib/libMLIRSPIRVConversion.so.21.0git  lib/libMLIRSPIRVUtils.so.21.0git  lib/libMLIRTensorInferTypeOpInterfaceImpl.so.21.0git  lib/libMLIRTensorTilingInterfaceImpl.so.21.0git  lib/libMLIRLinalgUtils.so.21.0git  lib/libMLIRTensorTransformOps.so.21.0git  lib/libMLIRTosaShardingInterfaceImpl.so.21.0git  lib/libMLIRTosaTransforms.so.21.0git  lib/libMLIRTransformDebugExtension.so.21.0git  lib/libMLIRTransformDialectIRDLExtension.so.21.0git  lib/libMLIRIRDL.so.21.0git  lib/libMLIRTransformLoopExtension.so.21.0git  lib/libMLIRTransformPDLExtension.so.21.0git  lib/libMLIRTransformDialectTransforms.so.21.0git  lib/libMLIRVectorTransformOps.so.21.0git  lib/libMLIRTransformDialect.so.21.0git  lib/libMLIRTransformDialectInterfaces.so.21.0git  lib/libMLIRTransformDialectUtils.so.21.0git  lib/libMLIRVectorToSCF.so.21.0git  lib/libMLIRVectorToLLVM.so.21.0git  lib/libMLIRX86VectorTransforms.so.21.0git  lib/libMLIRX86VectorDialect.so.21.0git  lib/libMLIRSPIRVTarget.so.21.0git  lib/libMLIRSPIRVSerialization.so.21.0git  lib/libMLIRSPIRVDialect.so.21.0git  lib/libMLIRSPIRVImageInterfaces.so.21.0git  lib/libMLIRSPIRVBinaryUtils.so.21.0git  lib/libMLIRNVVMTarget.so.21.0git  lib/libMLIRNVVMToLLVMIRTranslation.so.21.0git  lib/libMLIRROCDLTarget.so.21.0git  lib/libMLIRTargetLLVM.so.21.

21.0git  lib/libFortranSupport.so.21.0git  lib/libMLIRIR.so.21.0git  lib/libMLIRSupport.so.21.0git  lib/libLLVMFrontendOpenMP.so.21.0git  lib/libLLVMFrontendOffloading.so.21.0git  lib/libLLVMTransformUtils.so.21.0git  lib/libLLVMAnalysis.so.21.0git  lib/libLLVMMCParser.so.21.0git  lib/libLLVMIRReader.so.21.0git  lib/libLLVMAsmParser.so.21.0git  lib/libLLVMBitReader.so.21.0git  lib/libLLVMCore.so.21.0git  lib/libLLVMMC.so.21.0git  lib/libLLVMBinaryFormat.so.21.0git  lib/libLLVMTargetParser.so.21.0git  lib/libLLVMSupport.so.21.0git  -Wl,-rpath-link,/home/botworker/bbot/amdgpu-offload-ubuntu-22-cmake-build-only/build/lib && :
/usr/bin/ld: tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Bridge.cpp.o: in function `std::_Function_handler<void (), (anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::{lambda()#8}>::_M_invoke(std::_Any_data const&)':
Bridge.cpp:(.text._ZNSt17_Function_handlerIFvvEZN12_GLOBAL__N_112FirConverter3runERN7Fortran5lower3pft7ProgramEEUlvE6_E9_M_invokeERKSt9_Any_data+0xf5): undefined reference to `skipExternalRttiDefinition'
/usr/bin/ld: tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertVariable.cpp.o: in function `getLinkageAttribute(fir::FirOpBuilder&, Fortran::lower::pft::Variable const&)':
ConvertVariable.cpp:(.text._ZL19getLinkageAttributeRN3fir12FirOpBuilderERKN7Fortran5lower3pft8VariableE+0x2d): undefined reference to `skipExternalRttiDefinition'
collect2: error: ld returned 1 exit status
[7854/7887] Building CXX object tools/flang/tools/flang-driver/CMakeFiles/flang.dir/driver.cpp.o
[7855/7887] Building CXX object tools/flang/lib/Frontend/CMakeFiles/flangFrontend.dir/ParserActions.cpp.o
[7856/7887] Building CXX object tools/flang/tools/bbc/CMakeFiles/bbc.dir/bbc.cpp.o
ninja: build stopped: subcommand failed.
['ninja'] exited with return code 1.
The build step threw an exception...
Traceback (most recent call last):
  File "/home/botworker/bbot/amdgpu-offload-ubuntu-22-cmake-build-only/build/../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 50, in step
    yield
  File "/home/botworker/bbot/amdgpu-offload-ubuntu-22-cmake-build-only/build/../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 41, in main
    run_command(["ninja"])
  File "/home/botworker/bbot/amdgpu-offload-ubuntu-22-cmake-build-only/build/../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 63, in run_command
    util.report_run_cmd(cmd, cwd=directory)
  File "/home/botworker/bbot/amdgpu-offload-ubuntu-22-cmake-build-only/llvm-zorg/zorg/buildbot/builders/annotated/util.py", line 49, in report_run_cmd
    subprocess.check_call(cmd, shell=shell, *args, **kwargs)
  File "/usr/lib/python3.10/subprocess.py", line 369, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['ninja']' returned non-zero exit status 1.
program finished with exit code 0
elapsedTime=412.272277

@llvm-ci
Copy link
Collaborator

llvm-ci commented Jun 27, 2025

LLVM Buildbot has detected a new failure on builder amdgpu-offload-rhel-9-cmake-build-only running on rocm-docker-rhel-9 while building flang at step 4 "annotate".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/205/builds/13639

Here is the relevant piece of the build log for the reference
Step 4 (annotate) failure: '../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py --jobs=32' (failure)
...
[7841/7887] Creating library symlink lib/libFIRTestAnalysis.so
[7842/7887] Linking CXX shared library lib/libHLFIRTransforms.so.21.0git
[7843/7887] Creating library symlink lib/libHLFIRTransforms.so
[7844/7887] Linking CXX shared library lib/libflangPasses.so.21.0git
[7845/7887] Creating library symlink lib/libflangPasses.so
[7846/7887] Linking CXX executable bin/fir-opt
[7847/7887] Building CXX object tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertExpr.cpp.o
[7848/7887] Building CXX object tools/flang/tools/flang-driver/CMakeFiles/flang.dir/fc1_main.cpp.o
[7849/7887] Building CXX object tools/flang/tools/flang-driver/CMakeFiles/flang.dir/driver.cpp.o
[7850/7887] Linking CXX shared library lib/libFortranLower.so.21.0git
FAILED: lib/libFortranLower.so.21.0git 
: && /usr/bin/c++ -fPIC -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wno-uninitialized -Wno-nonnull -Wno-class-memaccess -Wno-redundant-move -Wno-pessimizing-move -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wno-misleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -Wno-deprecated-copy -Wno-ctad-maybe-unsupported -fno-semantic-interposition -fpch-preprocess -O3 -DNDEBUG -fno-semantic-interposition  -Wl,-z,defs -Wl,-z,nodelete   -Wl,-rpath-link,/home/botworker/bbot/amdgpu-offload-rhel-9-cmake-build-only/build/./lib  -Wl,--gc-sections -shared -Wl,-soname,libFortranLower.so.21.0git -o lib/libFortranLower.so.21.0git tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Allocatable.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Bridge.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/CallInterface.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Coarray.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ComponentPath.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertArrayConstructor.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertCall.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertConstant.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertExpr.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertExprToHLFIR.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertProcedureDesignator.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertType.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertVariable.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/CustomIntrinsicCall.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/HlfirIntrinsics.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/HostAssociations.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/IO.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/IterationSpace.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/LoweringOptions.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Mangler.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenACC.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/ClauseProcessor.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/Clauses.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/DataSharingProcessor.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/Decomposer.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/OpenMP.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/ReductionProcessor.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/Utils.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/PFTBuilder.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Runtime.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Support/PrivateReductionUtils.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Support/Utils.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/SymbolMap.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/VectorSubscripts.cpp.o  -Wl,-rpath,"\$ORIGIN/../lib:/home/botworker/bbot/amdgpu-offload-rhel-9-cmake-build-only/build/lib:"  lib/libFIRTransforms.so.21.0git  lib/libFortranSemantics.so.21.0git  lib/libFIRBuilder.so.21.0git  lib/libCUFDialect.so.21.0git  lib/libFIRSupport.so.21.0git  lib/libHLFIRDialect.so.21.0git  lib/libMLIRFuncAllExtensions.so.21.0git  lib/libMLIRFuncInlinerExtension.so.21.0git  lib/libMLIRFuncMeshShardingExtensions.so.21.0git  lib/libMLIRTensorAllExtensions.so.21.0git  lib/libMLIRTensorMeshShardingExtensions.so.21.0git  lib/libFIRDialect.so.21.0git  lib/libCUFAttrs.so.21.0git  lib/libFIRDialectSupport.so.21.0git  lib/libMLIRAffineTransformOps.so.21.0git  lib/libMLIRAMDG
git  lib/libMLIRArmNeonVectorTransformOps.so.21.0git  lib/libMLIRArmSMETransforms.so.21.0git  lib/libMLIRArmSMEDialect.so.21.0git  lib/libMLIRArmSVEVectorTransformOps.so.21.0git  lib/libMLIRAsyncTransforms.so.21.0git  lib/libMLIRBufferizationPipelines.so.21.0git  lib/libMLIRBufferizationTransformOps.so.21.0git  lib/libMLIRControlFlowTransforms.so.21.0git  lib/libMLIRDLTITransformOps.so.21.0git  lib/libMLIREmitCTransforms.so.21.0git  lib/libMLIREmitCDialect.so.21.0git  lib/libMLIRFuncTransformOps.so.21.0git  lib/libMLIRFuncUtils.so.21.0git  lib/libMLIRGPUTransformOps.so.21.0git  lib/libMLIRGPUPipelines.so.21.0git  lib/libMLIRIndexToLLVM.so.21.0git  lib/libMLIRNVVMToLLVM.so.21.0git  lib/libMLIRVCIXDialect.so.21.0git  lib/libMLIRMathTransforms.so.21.0git  lib/libMLIRMemRefTransformOps.so.21.0git  lib/libMLIRMLProgramTransforms.so.21.0git  lib/libMLIRMLProgramDialect.so.21.0git  lib/libMLIRMPIDialect.so.21.0git  lib/libMLIRNVGPUUtils.so.21.0git  lib/libMLIRNVGPUTransformOps.so.21.0git  lib/libMLIRNVGPUToNVVM.so.21.0git  lib/libMLIRNVGPUTransforms.so.21.0git  lib/libMLIROpenACCTransforms.so.21.0git  lib/libMLIROpenACCDialect.so.21.0git  lib/libMLIRPtrDialect.so.21.0git  lib/libMLIRQuantTransforms.so.21.0git  lib/libMLIRSCFTransformOps.so.21.0git  lib/libMLIRShapeOpsTransforms.so.21.0git  lib/libMLIRShapeDialect.so.21.0git  lib/libMLIRSMT.so.21.0git  lib/libMLIRSparseTensorPipelines.so.21.0git  lib/libMLIRAffineToStandard.so.21.0git  lib/libMLIRSCFToControlFlow.so.21.0git  lib/libMLIRGPUToNVVMTransforms.so.21.0git  lib/libMLIRGPUToGPURuntimeTransforms.so.21.0git  lib/libMLIRGPUTransforms.so.21.0git  lib/libMLIRAMDGPUDialect.so.21.0git  lib/libMLIRAsyncToLLVM.so.21.0git  lib/libMLIRAsyncDialect.so.21.0git  lib/libMLIRConvertToLLVMPass.so.21.0git  lib/libMLIRConvertToLLVMInterface.so.21.0git  lib/libMLIRMathToLLVM.so.21.0git  lib/libMLIRReconcileUnrealizedCasts.so.21.0git  lib/libMLIRComplexToLLVM.so.21.0git  lib/libMLIRComplexToLibm.so.21.0git  lib/libMLIRComplexToStandard.so.21.0git  lib/libMLIRComplexDivisionConversion.so.21.0git  lib/libMLIRMathToLibm.so.21.0git  lib/libMLIRUBToLLVM.so.21.0git  lib/libMLIRVectorToLLVMPass.so.21.0git  lib/libMLIRAMXTransforms.so.21.0git  lib/libMLIRAMXDialect.so.21.0git  lib/libMLIRArmNeonTransforms.so.21.0git  lib/libMLIRArmNeonDialect.so.21.0git  lib/libMLIRArmSVETransforms.so.21.0git  lib/libMLIRArmSVEDialect.so.21.0git  lib/libMLIRSparseTensorTransformOps.so.21.0git  lib/libMLIRLinalgTransformOps.so.21.0git  lib/libMLIRSparseTensorTransforms.so.21.0git  lib/libMLIRLinalgTransforms.so.21.0git  lib/libMLIRMemRefTransforms.so.21.0git  lib/libMLIRNVGPUDialect.so.21.0git  lib/libMLIRMeshTransforms.so.21.0git  lib/libMLIRSparseTensorUtils.so.21.0git  lib/libMLIRSPIRVModuleCombiner.so.21.0git  lib/libMLIRSPIRVTransforms.so.21.0git  lib/libMLIRSPIRVConversion.so.21.0git  lib/libMLIRSPIRVUtils.so.21.0git  lib/libMLIRTensorInferTypeOpInterfaceImpl.so.21.0git  lib/libMLIRTensorTilingInterfaceImpl.so.21.0git  lib/libMLIRLinalgUtils.so.21.0git  lib/libMLIRTensorTransformOps.so.21.0git  lib/libMLIRTosaShardingInterfaceImpl.so.21.0git  lib/libMLIRTosaTransforms.so.21.0git  lib/libMLIRTransformDebugExtension.so.21.0git  lib/libMLIRTransformDialectIRDLExtension.so.21.0git  lib/libMLIRIRDL.so.21.0git  lib/libMLIRTransformLoopExtension.so.21.0git  lib/libMLIRTransformPDLExtension.so.21.0git  lib/libMLIRTransformDialectTransforms.so.21.0git  lib/libMLIRVectorTransformOps.so.21.0git  lib/libMLIRTransformDialect.so.21.0git  lib/libMLIRTransformDialectInterfaces.so.21.0git  lib/libMLIRTransformDialectUtils.so.21.0git  lib/libMLIRVectorToSCF.so.21.0git  lib/libMLIRVectorToLLVM.so.21.0git  lib/libMLIRX86VectorTransforms.so.21.0git  lib/libMLIRX86VectorDialect.so.21.0git  lib/libMLIRSPIRVTarget.so.21.0git  lib/libMLIRSPIRVSerialization.so.21.0git  lib/libMLIRSPIRVDialect.so.21.0git  lib/libMLIRSPIRVImageInterfaces.so.21.0git  lib/libMLIRSPIRVBinaryUtils.so.21.0git  lib/libMLIRNVVMTarget.so.21.0git  lib/libMLIRNVVMToLLVMIRTranslation.so.21.0git  lib/libMLIRROCDLTarget.so.21.0git  lib/libMLIRTargetLLVM.so.21.0git  

t  lib/libFortranSupport.so.21.0git  lib/libMLIRIR.so.21.0git  lib/libMLIRSupport.so.21.0git  lib/libLLVMFrontendOpenMP.so.21.0git  lib/libLLVMFrontendOffloading.so.21.0git  lib/libLLVMTransformUtils.so.21.0git  lib/libLLVMAnalysis.so.21.0git  lib/libLLVMMCParser.so.21.0git  lib/libLLVMIRReader.so.21.0git  lib/libLLVMAsmParser.so.21.0git  lib/libLLVMBitReader.so.21.0git  lib/libLLVMCore.so.21.0git  lib/libLLVMMC.so.21.0git  lib/libLLVMBinaryFormat.so.21.0git  lib/libLLVMTargetParser.so.21.0git  lib/libLLVMSupport.so.21.0git  -Wl,-rpath-link,/home/botworker/bbot/amdgpu-offload-rhel-9-cmake-build-only/build/lib && :
/usr/bin/ld: tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Bridge.cpp.o: in function `std::_Function_handler<void (), (anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::{lambda()#8}>::_M_invoke(std::_Any_data const&)':
Bridge.cpp:(.text._ZNSt17_Function_handlerIFvvEZN12_GLOBAL__N_112FirConverter3runERN7Fortran5lower3pft7ProgramEEUlvE6_E9_M_invokeERKSt9_Any_data+0xe1): undefined reference to `skipExternalRttiDefinition'
/usr/bin/ld: tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertVariable.cpp.o: in function `getLinkageAttribute(fir::FirOpBuilder&, Fortran::lower::pft::Variable const&)':
ConvertVariable.cpp:(.text._ZL19getLinkageAttributeRN3fir12FirOpBuilderERKN7Fortran5lower3pft8VariableE+0x1d): undefined reference to `skipExternalRttiDefinition'
collect2: error: ld returned 1 exit status
[7851/7887] Building CXX object tools/flang/tools/fir-lsp-server/CMakeFiles/fir-lsp-server.dir/fir-lsp-server.cpp.o
[7852/7887] Building CXX object tools/flang/tools/tco/CMakeFiles/tco.dir/tco.cpp.o
[7853/7887] Building CXX object tools/flang/lib/Frontend/CMakeFiles/flangFrontend.dir/ParserActions.cpp.o
[7854/7887] Building CXX object tools/flang/tools/bbc/CMakeFiles/bbc.dir/bbc.cpp.o
ninja: build stopped: subcommand failed.
['ninja'] exited with return code 1.
The build step threw an exception...
Traceback (most recent call last):
  File "/home/botworker/bbot/amdgpu-offload-rhel-9-cmake-build-only/build/../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 50, in step
    yield
  File "/home/botworker/bbot/amdgpu-offload-rhel-9-cmake-build-only/build/../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 41, in main
    run_command(["ninja"])
  File "/home/botworker/bbot/amdgpu-offload-rhel-9-cmake-build-only/build/../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 63, in run_command
    util.report_run_cmd(cmd, cwd=directory)
  File "/home/botworker/bbot/amdgpu-offload-rhel-9-cmake-build-only/llvm-zorg/zorg/buildbot/builders/annotated/util.py", line 49, in report_run_cmd
    subprocess.check_call(cmd, shell=shell, *args, **kwargs)
  File "/usr/lib64/python3.9/subprocess.py", line 373, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['ninja']' returned non-zero exit status 1.
@@@STEP_FAILURE@@@
Step 7 (build cmake config) failure: build cmake config (failure)
...
[7841/7887] Creating library symlink lib/libFIRTestAnalysis.so
[7842/7887] Linking CXX shared library lib/libHLFIRTransforms.so.21.0git
[7843/7887] Creating library symlink lib/libHLFIRTransforms.so
[7844/7887] Linking CXX shared library lib/libflangPasses.so.21.0git
[7845/7887] Creating library symlink lib/libflangPasses.so
[7846/7887] Linking CXX executable bin/fir-opt
[7847/7887] Building CXX object tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertExpr.cpp.o
[7848/7887] Building CXX object tools/flang/tools/flang-driver/CMakeFiles/flang.dir/fc1_main.cpp.o
[7849/7887] Building CXX object tools/flang/tools/flang-driver/CMakeFiles/flang.dir/driver.cpp.o
[7850/7887] Linking CXX shared library lib/libFortranLower.so.21.0git
FAILED: lib/libFortranLower.so.21.0git 
: && /usr/bin/c++ -fPIC -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wno-uninitialized -Wno-nonnull -Wno-class-memaccess -Wno-redundant-move -Wno-pessimizing-move -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wno-misleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -Wno-deprecated-copy -Wno-ctad-maybe-unsupported -fno-semantic-interposition -fpch-preprocess -O3 -DNDEBUG -fno-semantic-interposition  -Wl,-z,defs -Wl,-z,nodelete   -Wl,-rpath-link,/home/botworker/bbot/amdgpu-offload-rhel-9-cmake-build-only/build/./lib  -Wl,--gc-sections -shared -Wl,-soname,libFortranLower.so.21.0git -o lib/libFortranLower.so.21.0git tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Allocatable.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Bridge.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/CallInterface.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Coarray.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ComponentPath.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertArrayConstructor.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertCall.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertConstant.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertExpr.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertExprToHLFIR.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertProcedureDesignator.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertType.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertVariable.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/CustomIntrinsicCall.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/HlfirIntrinsics.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/HostAssociations.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/IO.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/IterationSpace.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/LoweringOptions.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Mangler.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenACC.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/ClauseProcessor.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/Clauses.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/DataSharingProcessor.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/Decomposer.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/OpenMP.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/ReductionProcessor.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/OpenMP/Utils.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/PFTBuilder.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Runtime.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Support/PrivateReductionUtils.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Support/Utils.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/SymbolMap.cpp.o tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/VectorSubscripts.cpp.o  -Wl,-rpath,"\$ORIGIN/../lib:/home/botworker/bbot/amdgpu-offload-rhel-9-cmake-build-only/build/lib:"  lib/libFIRTransforms.so.21.0git  lib/libFortranSemantics.so.21.0git  lib/libFIRBuilder.so.21.0git  lib/libCUFDialect.so.21.0git  lib/libFIRSupport.so.21.0git  lib/libHLFIRDialect.so.21.0git  lib/libMLIRFuncAllExtensions.so.21.0git  lib/libMLIRFuncInlinerExtension.so.21.0git  lib/libMLIRFuncMeshShardingExtensions.so.21.0git  lib/libMLIRTensorAllExtensions.so.21.0git  lib/libMLIRTensorMeshShardingExtensions.so.21.0git  lib/libFIRDialect.so.21.0git  lib/libCUFAttrs.so.21.0git  lib/libFIRDialectSupport.so.21.0git  lib/libMLIRAffineTransformOps.so.21.0git  lib/libMLIRAMDG
git  lib/libMLIRArmNeonVectorTransformOps.so.21.0git  lib/libMLIRArmSMETransforms.so.21.0git  lib/libMLIRArmSMEDialect.so.21.0git  lib/libMLIRArmSVEVectorTransformOps.so.21.0git  lib/libMLIRAsyncTransforms.so.21.0git  lib/libMLIRBufferizationPipelines.so.21.0git  lib/libMLIRBufferizationTransformOps.so.21.0git  lib/libMLIRControlFlowTransforms.so.21.0git  lib/libMLIRDLTITransformOps.so.21.0git  lib/libMLIREmitCTransforms.so.21.0git  lib/libMLIREmitCDialect.so.21.0git  lib/libMLIRFuncTransformOps.so.21.0git  lib/libMLIRFuncUtils.so.21.0git  lib/libMLIRGPUTransformOps.so.21.0git  lib/libMLIRGPUPipelines.so.21.0git  lib/libMLIRIndexToLLVM.so.21.0git  lib/libMLIRNVVMToLLVM.so.21.0git  lib/libMLIRVCIXDialect.so.21.0git  lib/libMLIRMathTransforms.so.21.0git  lib/libMLIRMemRefTransformOps.so.21.0git  lib/libMLIRMLProgramTransforms.so.21.0git  lib/libMLIRMLProgramDialect.so.21.0git  lib/libMLIRMPIDialect.so.21.0git  lib/libMLIRNVGPUUtils.so.21.0git  lib/libMLIRNVGPUTransformOps.so.21.0git  lib/libMLIRNVGPUToNVVM.so.21.0git  lib/libMLIRNVGPUTransforms.so.21.0git  lib/libMLIROpenACCTransforms.so.21.0git  lib/libMLIROpenACCDialect.so.21.0git  lib/libMLIRPtrDialect.so.21.0git  lib/libMLIRQuantTransforms.so.21.0git  lib/libMLIRSCFTransformOps.so.21.0git  lib/libMLIRShapeOpsTransforms.so.21.0git  lib/libMLIRShapeDialect.so.21.0git  lib/libMLIRSMT.so.21.0git  lib/libMLIRSparseTensorPipelines.so.21.0git  lib/libMLIRAffineToStandard.so.21.0git  lib/libMLIRSCFToControlFlow.so.21.0git  lib/libMLIRGPUToNVVMTransforms.so.21.0git  lib/libMLIRGPUToGPURuntimeTransforms.so.21.0git  lib/libMLIRGPUTransforms.so.21.0git  lib/libMLIRAMDGPUDialect.so.21.0git  lib/libMLIRAsyncToLLVM.so.21.0git  lib/libMLIRAsyncDialect.so.21.0git  lib/libMLIRConvertToLLVMPass.so.21.0git  lib/libMLIRConvertToLLVMInterface.so.21.0git  lib/libMLIRMathToLLVM.so.21.0git  lib/libMLIRReconcileUnrealizedCasts.so.21.0git  lib/libMLIRComplexToLLVM.so.21.0git  lib/libMLIRComplexToLibm.so.21.0git  lib/libMLIRComplexToStandard.so.21.0git  lib/libMLIRComplexDivisionConversion.so.21.0git  lib/libMLIRMathToLibm.so.21.0git  lib/libMLIRUBToLLVM.so.21.0git  lib/libMLIRVectorToLLVMPass.so.21.0git  lib/libMLIRAMXTransforms.so.21.0git  lib/libMLIRAMXDialect.so.21.0git  lib/libMLIRArmNeonTransforms.so.21.0git  lib/libMLIRArmNeonDialect.so.21.0git  lib/libMLIRArmSVETransforms.so.21.0git  lib/libMLIRArmSVEDialect.so.21.0git  lib/libMLIRSparseTensorTransformOps.so.21.0git  lib/libMLIRLinalgTransformOps.so.21.0git  lib/libMLIRSparseTensorTransforms.so.21.0git  lib/libMLIRLinalgTransforms.so.21.0git  lib/libMLIRMemRefTransforms.so.21.0git  lib/libMLIRNVGPUDialect.so.21.0git  lib/libMLIRMeshTransforms.so.21.0git  lib/libMLIRSparseTensorUtils.so.21.0git  lib/libMLIRSPIRVModuleCombiner.so.21.0git  lib/libMLIRSPIRVTransforms.so.21.0git  lib/libMLIRSPIRVConversion.so.21.0git  lib/libMLIRSPIRVUtils.so.21.0git  lib/libMLIRTensorInferTypeOpInterfaceImpl.so.21.0git  lib/libMLIRTensorTilingInterfaceImpl.so.21.0git  lib/libMLIRLinalgUtils.so.21.0git  lib/libMLIRTensorTransformOps.so.21.0git  lib/libMLIRTosaShardingInterfaceImpl.so.21.0git  lib/libMLIRTosaTransforms.so.21.0git  lib/libMLIRTransformDebugExtension.so.21.0git  lib/libMLIRTransformDialectIRDLExtension.so.21.0git  lib/libMLIRIRDL.so.21.0git  lib/libMLIRTransformLoopExtension.so.21.0git  lib/libMLIRTransformPDLExtension.so.21.0git  lib/libMLIRTransformDialectTransforms.so.21.0git  lib/libMLIRVectorTransformOps.so.21.0git  lib/libMLIRTransformDialect.so.21.0git  lib/libMLIRTransformDialectInterfaces.so.21.0git  lib/libMLIRTransformDialectUtils.so.21.0git  lib/libMLIRVectorToSCF.so.21.0git  lib/libMLIRVectorToLLVM.so.21.0git  lib/libMLIRX86VectorTransforms.so.21.0git  lib/libMLIRX86VectorDialect.so.21.0git  lib/libMLIRSPIRVTarget.so.21.0git  lib/libMLIRSPIRVSerialization.so.21.0git  lib/libMLIRSPIRVDialect.so.21.0git  lib/libMLIRSPIRVImageInterfaces.so.21.0git  lib/libMLIRSPIRVBinaryUtils.so.21.0git  lib/libMLIRNVVMTarget.so.21.0git  lib/libMLIRNVVMToLLVMIRTranslation.so.21.0git  lib/libMLIRROCDLTarget.so.21.0git  lib/libMLIRTargetLLVM.so.21.0git  

t  lib/libFortranSupport.so.21.0git  lib/libMLIRIR.so.21.0git  lib/libMLIRSupport.so.21.0git  lib/libLLVMFrontendOpenMP.so.21.0git  lib/libLLVMFrontendOffloading.so.21.0git  lib/libLLVMTransformUtils.so.21.0git  lib/libLLVMAnalysis.so.21.0git  lib/libLLVMMCParser.so.21.0git  lib/libLLVMIRReader.so.21.0git  lib/libLLVMAsmParser.so.21.0git  lib/libLLVMBitReader.so.21.0git  lib/libLLVMCore.so.21.0git  lib/libLLVMMC.so.21.0git  lib/libLLVMBinaryFormat.so.21.0git  lib/libLLVMTargetParser.so.21.0git  lib/libLLVMSupport.so.21.0git  -Wl,-rpath-link,/home/botworker/bbot/amdgpu-offload-rhel-9-cmake-build-only/build/lib && :
/usr/bin/ld: tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/Bridge.cpp.o: in function `std::_Function_handler<void (), (anonymous namespace)::FirConverter::run(Fortran::lower::pft::Program&)::{lambda()#8}>::_M_invoke(std::_Any_data const&)':
Bridge.cpp:(.text._ZNSt17_Function_handlerIFvvEZN12_GLOBAL__N_112FirConverter3runERN7Fortran5lower3pft7ProgramEEUlvE6_E9_M_invokeERKSt9_Any_data+0xe1): undefined reference to `skipExternalRttiDefinition'
/usr/bin/ld: tools/flang/lib/Lower/CMakeFiles/FortranLower.dir/ConvertVariable.cpp.o: in function `getLinkageAttribute(fir::FirOpBuilder&, Fortran::lower::pft::Variable const&)':
ConvertVariable.cpp:(.text._ZL19getLinkageAttributeRN3fir12FirOpBuilderERKN7Fortran5lower3pft8VariableE+0x1d): undefined reference to `skipExternalRttiDefinition'
collect2: error: ld returned 1 exit status
[7851/7887] Building CXX object tools/flang/tools/fir-lsp-server/CMakeFiles/fir-lsp-server.dir/fir-lsp-server.cpp.o
[7852/7887] Building CXX object tools/flang/tools/tco/CMakeFiles/tco.dir/tco.cpp.o
[7853/7887] Building CXX object tools/flang/lib/Frontend/CMakeFiles/flangFrontend.dir/ParserActions.cpp.o
[7854/7887] Building CXX object tools/flang/tools/bbc/CMakeFiles/bbc.dir/bbc.cpp.o
ninja: build stopped: subcommand failed.
['ninja'] exited with return code 1.
The build step threw an exception...
Traceback (most recent call last):
  File "/home/botworker/bbot/amdgpu-offload-rhel-9-cmake-build-only/build/../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 50, in step
    yield
  File "/home/botworker/bbot/amdgpu-offload-rhel-9-cmake-build-only/build/../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 41, in main
    run_command(["ninja"])
  File "/home/botworker/bbot/amdgpu-offload-rhel-9-cmake-build-only/build/../llvm-zorg/zorg/buildbot/builders/annotated/amdgpu-offload-cmake.py", line 63, in run_command
    util.report_run_cmd(cmd, cwd=directory)
  File "/home/botworker/bbot/amdgpu-offload-rhel-9-cmake-build-only/llvm-zorg/zorg/buildbot/builders/annotated/util.py", line 49, in report_run_cmd
    subprocess.check_call(cmd, shell=shell, *args, **kwargs)
  File "/usr/lib64/python3.9/subprocess.py", line 373, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['ninja']' returned non-zero exit status 1.
program finished with exit code 0
elapsedTime=416.456285

jeanPerier added a commit that referenced this pull request Jun 27, 2025
…#146064)

Reverts #145901

Broke shared library builds because of the usage of
`skipExternalRttiDefinition` in Lowering.
llvm-sync bot pushed a commit to arm/arm-toolchain that referenced this pull request Jun 27, 2025
…s external" (#146064)

Reverts llvm/llvm-project#145901

Broke shared library builds because of the usage of
`skipExternalRttiDefinition` in Lowering.
@jeanPerier jeanPerier deleted the external_rtti_2 branch June 27, 2025 12:47
jeanPerier added a commit to jeanPerier/llvm-project that referenced this pull request Jun 27, 2025
…5901)

So far flang generates runtime derived type info global definitions (as
opposed to declarations) for all the types used in the current
compilation unit even when the derived types are defined in other
compilation units. It is using linkonce_odr to achieve derived type
descriptor address "uniqueness" aspect needed to match two derived type
inside the runtime.

This comes at a big compile time cost because of all the extra globals
and their definitions in apps with many and complex derived types.

This patch adds and experimental option to only generate the rtti
definition for the types defined in the current compilation unit and to
only generate external declaration for the derived type descriptor
object of types defined elsewhere.

Note that objects compiled with this option are not compatible with
object files compiled without because files compiled without it may drop
the rtti for type they defined if it is not used in the compilation unit
because of the linkonce_odr aspect.

I am adding the option so that we can better measure the extra cost of
the current approach on apps and allow speeding up some compilation
where devirtualization does not matter (and the build config links to
all module file object anyway).
jeanPerier added a commit that referenced this pull request Jun 30, 2025
Reland #145901 with a fix for shared library builds.

So far flang generates runtime derived type info global definitions (as
opposed to declarations) for all the types used in the current
compilation unit even when the derived types are defined in other
compilation units. It is using linkonce_odr to achieve derived type
descriptor address "uniqueness" aspect needed to match two derived type
inside the runtime.

This comes at a big compile time cost because of all the extra globals
and their definitions in apps with many and complex derived types.

This patch adds and experimental option to only generate the rtti
definition for the types defined in the current compilation unit and to
only generate external declaration for the derived type descriptor
object of types defined elsewhere.

Note that objects compiled with this option are not compatible with
object files compiled without because files compiled without it may drop
the rtti for type they defined if it is not used in the compilation unit
because of the linkonce_odr aspect.

I am adding the option so that we can better measure the extra cost of
the current approach on apps and allow speeding up some compilation
where devirtualization does not matter (and the build config links to
all module file object anyway).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
flang:codegen flang:fir-hlfir flang:semantics flang Flang issues not falling into any other category
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants