From c758df4053767b19709a3345eb22f73f8894931b Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Sat, 1 Nov 2014 07:57:14 +0000 Subject: [PATCH] IR: Restore the old behavior of getDISubprogram getDISubprogram was mistakenly thought to contain a bug: we thought we might need to try harder if we found a DebugLoc we didn't find. llvm-svn: 221044 --- llvm/lib/IR/DebugInfo.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/llvm/lib/IR/DebugInfo.cpp b/llvm/lib/IR/DebugInfo.cpp index 56b0623..60904c2 100644 --- a/llvm/lib/IR/DebugInfo.cpp +++ b/llvm/lib/IR/DebugInfo.cpp @@ -914,17 +914,16 @@ DISubprogram llvm::getDISubprogram(const MDNode *Scope) { DISubprogram llvm::getDISubprogram(const Function *F) { // We look for the first instr that has a debug annotation leading back to F. - const LLVMContext &Ctx = F->getParent()->getContext(); for (auto &BB : *F) { - for (auto &Inst : BB.getInstList()) { - DebugLoc DLoc = Inst.getDebugLoc(); - if (DLoc.isUnknown()) - continue; - const MDNode *Scope = DLoc.getScopeNode(Ctx); - DISubprogram Subprogram = getDISubprogram(Scope); - if (Subprogram.describes(F)) - return Subprogram; - } + auto Inst = std::find_if(BB.begin(), BB.end(), [](const Instruction &Inst) { + return !Inst.getDebugLoc().isUnknown(); + }); + if (Inst == BB.end()) + continue; + DebugLoc DLoc = Inst->getDebugLoc(); + const MDNode *Scope = DLoc.getScopeNode(F->getParent()->getContext()); + DISubprogram Subprogram = getDISubprogram(Scope); + return Subprogram.describes(F) ? Subprogram : DISubprogram(); } return DISubprogram(); -- 2.7.4