r204517 - CGDebugInfo: At the end of EmitFunctionStart, Initialize PrevLoc to the

Adrian Prantl aprantl at apple.com
Fri Mar 21 15:56:23 PDT 2014


All right. My fault for using a mangled name here!

thanks!
-- adrian

On Mar 21, 2014, at 3:55 PM, Aaron Ballman <aaron at aaronballman.com> wrote:

> On Fri, Mar 21, 2014 at 5:01 PM, Adrian Prantl <aprantl at apple.com> 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




More information about the cfe-commits mailing list