r226382 - DebugInfo: Correct the debug location of non-static data member initializers
Hans Wennborg
hans at chromium.org
Sat Jan 31 11:21:18 PST 2015
On Fri, Jan 30, 2015 at 9:26 PM, David Blaikie <dblaikie at gmail.com> wrote:
> Hi Hans,
>
> I believe this is the missing piece to fix PR22257 for the 3.6 release.
> Could you try pulling this onto the release branch? (the test case probably
> won't apply cleanly, but hopefully the main patch does) & possibly verify
> the PR22257 reproduction (I've verified it as best I can, but would be good
> to have something more authoritative).
Thanks! I'll try it out on the branch on Monday.
- Hans
> On Sat, Jan 17, 2015 at 4:12 PM, David Blaikie <dblaikie at gmail.com> wrote:
>>
>> Author: dblaikie
>> Date: Sat Jan 17 18:12:58 2015
>> New Revision: 226382
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=226382&view=rev
>> Log:
>> DebugInfo: Correct the debug location of non-static data member
>> initializers
>>
>> This was causing some trouble for otherwise dead code removed in r225085
>> (reverted in r225361). The location being set for function arguments was
>> leaking out to the call which wasn't setting its own location (so a
>> quality bug turned into a crasher with r225085). Fix this so r225085 can
>> be recommitted.
>>
>> Modified:
>> cfe/trunk/lib/AST/DeclCXX.cpp
>> cfe/trunk/lib/CodeGen/CGClass.cpp
>> cfe/trunk/test/CodeGenCXX/debug-info-line.cpp
>>
>> Modified: cfe/trunk/lib/AST/DeclCXX.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclCXX.cpp?rev=226382&r1=226381&r2=226382&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/AST/DeclCXX.cpp (original)
>> +++ cfe/trunk/lib/AST/DeclCXX.cpp Sat Jan 17 18:12:58 2015
>> @@ -1693,12 +1693,12 @@ const Type *CXXCtorInitializer::getBaseC
>> }
>>
>> SourceLocation CXXCtorInitializer::getSourceLocation() const {
>> - if (isAnyMemberInitializer())
>> - return getMemberLocation();
>> -
>> if (isInClassMemberInitializer())
>> return getAnyMember()->getLocation();
>>
>> + if (isAnyMemberInitializer())
>> + return getMemberLocation();
>> +
>> if (TypeSourceInfo *TSInfo = Initializee.get<TypeSourceInfo*>())
>> return TSInfo->getTypeLoc().getLocalSourceRange().getBegin();
>>
>>
>> Modified: cfe/trunk/lib/CodeGen/CGClass.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGClass.cpp?rev=226382&r1=226381&r2=226382&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/CodeGen/CGClass.cpp (original)
>> +++ cfe/trunk/lib/CodeGen/CGClass.cpp Sat Jan 17 18:12:58 2015
>> @@ -544,7 +544,7 @@ static void EmitMemberInitializer(CodeGe
>> CXXCtorInitializer *MemberInit,
>> const CXXConstructorDecl *Constructor,
>> FunctionArgList &Args) {
>> - ApplyDebugLocation Loc(CGF, MemberInit->getMemberLocation());
>> + ApplyDebugLocation Loc(CGF, MemberInit->getSourceLocation());
>> assert(MemberInit->isAnyMemberInitializer() &&
>> "Must have member initializer!");
>> assert(MemberInit->getInit() && "Must have initializer!");
>> @@ -598,7 +598,6 @@ static void EmitMemberInitializer(CodeGe
>> ArrayRef<VarDecl *> ArrayIndexes;
>> if (MemberInit->getNumArrayIndices())
>> ArrayIndexes = MemberInit->getArrayIndexes();
>> - ApplyDebugLocation DL(CGF, MemberInit->getMemberLocation());
>> CGF.EmitInitializerForField(Field, LHS, MemberInit->getInit(),
>> ArrayIndexes);
>> }
>>
>>
>> Modified: cfe/trunk/test/CodeGenCXX/debug-info-line.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-line.cpp?rev=226382&r1=226381&r2=226382&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/test/CodeGenCXX/debug-info-line.cpp (original)
>> +++ cfe/trunk/test/CodeGenCXX/debug-info-line.cpp Sat Jan 17 18:12:58 2015
>> @@ -173,12 +173,12 @@ struct f14 {
>> // CHECK-LABEL: define
>> // CHECK-LABEL: define
>> // CHECK-LABEL: define
>> +struct {
>> // CHECK: call {{.*}}, !dbg [[DBG_F14_CTOR_CALL:![0-9]*]]
>> -// FIXME: The ctor call should be attributed to the line of the NSDMI,
>> not the
>> -// start of this declaration.
>> #line 1600
>> -struct {
>> - f14 v = 1;
>> + f14 v
>> + =
>> + 1;
>> } f14_inst;
>>
>> // CHECK-LABEL: define
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
More information about the cfe-commits
mailing list