diff --git a/projects/clr/rocclr/compiler/lib/backends/common/linker.cpp b/projects/clr/rocclr/compiler/lib/backends/common/linker.cpp index c166da29bb..b63db511ce 100644 --- a/projects/clr/rocclr/compiler/lib/backends/common/linker.cpp +++ b/projects/clr/rocclr/compiler/lib/backends/common/linker.cpp @@ -517,7 +517,10 @@ translateSpirv(llvm::Module *&M, const std::string &DumpSpirv, OFS.close(); } - if (!llvm::ReadSPIRV(M->getContext(), SS, M, Err)) { + auto &Ctx = M->getContext(); + delete M; + M = nullptr; + if (!llvm::ReadSPIRV(Ctx, SS, M, Err)) { llvm::errs() << "Fails to load SPIR-V as LLVM Module: " << Err << '\n'; return false; } @@ -823,5 +826,19 @@ amdcl::OCLLinker::link(llvm::Module* input, std::vector &libs) return 1; } + // check undefined function +#ifndef NDEBUG + { + auto M = LLVMBinary(); + for (auto I = M->begin(), E = M->end(); I != E; ++I) { + if (!I->isDeclaration() || I->use_empty() || (I->hasName() && + (I->getName().startswith("__") || + I->getName().startswith("llvm.")))) + continue; + llvm::errs() << "Warning: Undefined function: " << *I << '\n'; + } + } +#endif + return 0; }