On Fri, Mar 21, 2014 at 5:01 PM, Adrian Prantl <[email protected]> wrote: > Author: adrian > Date: Fri Mar 21 16:01:58 2014 > New Revision: 204517 > > URL: http://llvm.org/viewvc/llvm-project?rev=204517&view=rev > Log: > CGDebugInfo: At the end of EmitFunctionStart, Initialize PrevLoc to the > location that the next call emitLocation() would default to. Otherwise > setLocation() may wrongly believe that the current source file didn't > change, when in fact it did. > > Added: > cfe/trunk/test/CodeGenCXX/linetable-fnbegin.cpp > Modified: > cfe/trunk/lib/CodeGen/CGDebugInfo.cpp > > Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=204517&r1=204516&r2=204517&view=diff > ============================================================================== > --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original) > +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Fri Mar 21 16:01:58 2014 > @@ -2577,9 +2577,12 @@ void CGDebugInfo::EmitFunctionStart(Glob > if (HasDecl) > DeclCache.insert(std::make_pair(D->getCanonicalDecl(), > llvm::WeakVH(SP))); > > - // Push function on region stack. > + // Push the function onto the lexical block stack. > llvm::MDNode *SPN = SP; > LexicalBlockStack.push_back(SPN); > + // Initialize PrevLoc to the location of the function header. > + PrevLoc = Loc; > + > if (HasDecl) > RegionMap[D] = llvm::WeakVH(SP); > } > > Added: cfe/trunk/test/CodeGenCXX/linetable-fnbegin.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/linetable-fnbegin.cpp?rev=204517&view=auto > ============================================================================== > --- cfe/trunk/test/CodeGenCXX/linetable-fnbegin.cpp (added) > +++ cfe/trunk/test/CodeGenCXX/linetable-fnbegin.cpp Fri Mar 21 16:01:58 2014 > @@ -0,0 +1,24 @@ > +// RUN: %clang_cc1 -emit-llvm -g %s -o - | FileCheck %s > +// Test that the line table info for Foo<T>::bar() is pointing to the > +// right header file. > +// CHECK: define{{.*}} @_ZN3FooIiE3barEv > +// CHECK-NOT: define > +// CHECK: ret {{.*}}, !dbg ![[DBG:.*]] > +// CHECK: ![[HPP:.*]] = metadata !{metadata !"./template.hpp", > +// CHECK:![[BLOCK:.*]] = metadata !{{{.*}}, metadata ![[HPP]], {{.*}}} ; [ > DW_TAG_lexical_block ] > +// CHECK: [[DBG]] = metadata !{i32 23, i32 0, metadata ![[BLOCK]], null} > +# 1 "./template.h" 1 > +template <typename T> > +class Foo { > +public: > + int bar(); > +}; > +# 21 "./template.hpp" > +template <typename T> > +int Foo<T>::bar() { > +} > +int main (int argc, const char * argv[]) > +{ > + Foo<int> f; > + f.bar(); > +}
This testcase is causing one of the Windows bots to go red: http://bb.pgr.jp/builders/ninja-x64-msvc-RA-centos6/builds/1115 ~Aaron _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
