From: David Majnemer Date: Sat, 1 Nov 2014 07:57:14 +0000 (+0000) Subject: IR: Restore the old behavior of getDISubprogram X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=666a51320e75d3a3fc1b38c0b683496b40f49c18 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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221044 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/IR/DebugInfo.cpp b/lib/IR/DebugInfo.cpp index 56b06230e22..60904c2b356 100644 --- a/lib/IR/DebugInfo.cpp +++ b/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();