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 <h...@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@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@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits