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