r345009 - [DebugInfo] Generate debug information for labels. (After fix PR39094)
Hans Wennborg via cfe-commits
cfe-commits at lists.llvm.org
Tue Oct 23 06:47:56 PDT 2018
I found another assert (two really) caused by this patch. Reproducer
for one of them here:
https://bugs.chromium.org/p/chromium/issues/detail?id=898160#c3
On Tue, Oct 23, 2018 at 6:19 AM, Hans Wennborg <hans at chromium.org> wrote:
> This broke Chromium again. I've reverted in rr345026
>
> See https://bugs.chromium.org/p/chromium/issues/detail?id=898152#c1
> for the reproducer.
>
> On Tue, Oct 23, 2018 at 1:06 AM, Hsiangkai Wang via cfe-commits
> <cfe-commits at lists.llvm.org> wrote:
>> Author: hsiangkai
>> Date: Tue Oct 23 01:06:21 2018
>> New Revision: 345009
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=345009&view=rev
>> Log:
>> [DebugInfo] Generate debug information for labels. (After fix PR39094)
>>
>> Generate DILabel metadata and call llvm.dbg.label after label
>> statement to associate the metadata with the label.
>>
>> After fixing PR37395.
>> After fixing problems in LiveDebugVariables.
>> After fixing NULL symbol problems in AddressPool when enabling
>> split-dwarf-file.
>> After fixing PR39094.
>>
>> Differential Revision: https://reviews.llvm.org/D45045
>>
>> Added:
>> cfe/trunk/test/CodeGen/debug-label-inline.c
>> cfe/trunk/test/CodeGen/debug-label.c
>> Modified:
>> cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
>> cfe/trunk/lib/CodeGen/CGDebugInfo.h
>> cfe/trunk/lib/CodeGen/CGStmt.cpp
>>
>> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=345009&r1=345008&r2=345009&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original)
>> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Tue Oct 23 01:06:21 2018
>> @@ -3804,6 +3804,32 @@ CGDebugInfo::EmitDeclareOfAutoVariable(c
>> return EmitDeclare(VD, Storage, llvm::None, Builder);
>> }
>>
>> +void CGDebugInfo::EmitLabel(const LabelDecl *D, CGBuilderTy &Builder) {
>> + assert(DebugKind >= codegenoptions::LimitedDebugInfo);
>> + assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!");
>> +
>> + if (D->hasAttr<NoDebugAttr>())
>> + return;
>> +
>> + auto *Scope = cast<llvm::DIScope>(LexicalBlockStack.back());
>> + llvm::DIFile *Unit = getOrCreateFile(D->getLocation());
>> +
>> + // Get location information.
>> + unsigned Line = getLineNumber(D->getLocation());
>> + unsigned Column = getColumnNumber(D->getLocation());
>> +
>> + StringRef Name = D->getName();
>> +
>> + // Create the descriptor for the label.
>> + auto *L =
>> + DBuilder.createLabel(Scope, Name, Unit, Line, CGM.getLangOpts().Optimize);
>> +
>> + // Insert an llvm.dbg.label into the current block.
>> + DBuilder.insertLabel(L,
>> + llvm::DebugLoc::get(Line, Column, Scope, CurInlinedAt),
>> + Builder.GetInsertBlock());
>> +}
>> +
>> llvm::DIType *CGDebugInfo::CreateSelfType(const QualType &QualTy,
>> llvm::DIType *Ty) {
>> llvm::DIType *CachedTy = getTypeOrNull(QualTy);
>>
>> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.h?rev=345009&r1=345008&r2=345009&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/CodeGen/CGDebugInfo.h (original)
>> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.h Tue Oct 23 01:06:21 2018
>> @@ -420,6 +420,9 @@ public:
>> llvm::Value *AI,
>> CGBuilderTy &Builder);
>>
>> + /// Emit call to \c llvm.dbg.label for an label.
>> + void EmitLabel(const LabelDecl *D, CGBuilderTy &Builder);
>> +
>> /// Emit call to \c llvm.dbg.declare for an imported variable
>> /// declaration in a block.
>> void EmitDeclareOfBlockDeclRefVariable(
>>
>> Modified: cfe/trunk/lib/CodeGen/CGStmt.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGStmt.cpp?rev=345009&r1=345008&r2=345009&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/CodeGen/CGStmt.cpp (original)
>> +++ cfe/trunk/lib/CodeGen/CGStmt.cpp Tue Oct 23 01:06:21 2018
>> @@ -531,6 +531,16 @@ void CodeGenFunction::EmitLabel(const La
>> }
>>
>> EmitBlock(Dest.getBlock());
>> +
>> + // Emit debug info for labels.
>> + if (CGDebugInfo *DI = getDebugInfo()) {
>> + if (CGM.getCodeGenOpts().getDebugInfo() >=
>> + codegenoptions::LimitedDebugInfo) {
>> + DI->setLocation(D->getLocation());
>> + DI->EmitLabel(D, Builder);
>> + }
>> + }
>> +
>> incrementProfileCounter(D->getStmt());
>> }
>>
>>
>> Added: cfe/trunk/test/CodeGen/debug-label-inline.c
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/debug-label-inline.c?rev=345009&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/CodeGen/debug-label-inline.c (added)
>> +++ cfe/trunk/test/CodeGen/debug-label-inline.c Tue Oct 23 01:06:21 2018
>> @@ -0,0 +1,28 @@
>> +// This test will test the correctness of generating DILabel and
>> +// llvm.dbg.label when the label is in inlined functions.
>> +//
>> +// RUN: %clang_cc1 -O2 %s -o - -emit-llvm -debug-info-kind=limited | FileCheck %s
>> +inline int f1(int a, int b) {
>> + int sum;
>> +
>> +top:
>> + sum = a + b;
>> + return sum;
>> +}
>> +
>> +extern int ga, gb;
>> +
>> +int f2(void) {
>> + int result;
>> +
>> + result = f1(ga, gb);
>> + // CHECK: call void @llvm.dbg.label(metadata [[LABEL_METADATA:!.*]]), !dbg [[LABEL_LOCATION:!.*]]
>> +
>> + return result;
>> +}
>> +
>> +// CHECK: distinct !DISubprogram(name: "f1", {{.*}}, retainedNodes: [[ELEMENTS:!.*]])
>> +// CHECK: [[ELEMENTS]] = !{{{.*}}, [[LABEL_METADATA]]}
>> +// CHECK: [[LABEL_METADATA]] = !DILabel({{.*}}, name: "top", {{.*}}, line: 8)
>> +// CHECK: [[INLINEDAT:!.*]] = distinct !DILocation(line: 18,
>> +// CHECK: [[LABEL_LOCATION]] = !DILocation(line: 8, {{.*}}, inlinedAt: [[INLINEDAT]])
>>
>> Added: cfe/trunk/test/CodeGen/debug-label.c
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/debug-label.c?rev=345009&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/CodeGen/debug-label.c (added)
>> +++ cfe/trunk/test/CodeGen/debug-label.c Tue Oct 23 01:06:21 2018
>> @@ -0,0 +1,16 @@
>> +// This test will test the correstness of generating DILabel and
>> +// llvm.dbg.label for labels.
>> +//
>> +// RUN: %clang_cc1 -emit-llvm %s -o - -emit-llvm -debug-info-kind=limited | FileCheck %s
>> +
>> +int f1(int a, int b) {
>> + int sum;
>> +
>> +top:
>> + // CHECK: call void @llvm.dbg.label(metadata [[LABEL_METADATA:!.*]]), !dbg [[LABEL_LOCATION:!.*]]
>> + sum = a + b;
>> + return sum;
>> +}
>> +
>> +// CHECK: [[LABEL_METADATA]] = !DILabel({{.*}}, name: "top", {{.*}}, line: 9)
>> +// CHECK: [[LABEL_LOCATION]] = !DILocation(line: 9,
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list