Hello Matt, This commit broke tests on one of our builders: http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-win/builds/7920 . . . Failing Tests (1): Clang :: CodeGenCXX/debug-info-range-for-var-names.cpp
Please have a look? Thanks Galina On Wed, Feb 14, 2018 at 1:22 PM, Matt Davis via cfe-commits < cfe-commits@lists.llvm.org> wrote: > Author: mattd > Date: Wed Feb 14 13:22:11 2018 > New Revision: 325175 > > URL: http://llvm.org/viewvc/llvm-project?rev=325175&view=rev > Log: > [Debug] Annotate compiler generated range-for loop variables. > > Summary: > This change aims to simplify debugging by annotating the range-for loop > artificial variables (range, begin, end) with the scope depth. > > > Reviewers: rsmith, dblaikie > > Reviewed By: dblaikie > > Subscribers: dblaikie, cfe-commits > > Tags: #debug-info > > Differential Revision: https://reviews.llvm.org/D42813 > > Added: > cfe/trunk/test/CodeGenCXX/debug-info-range-for-var-names.cpp > Modified: > cfe/trunk/include/clang/Sema/Scope.h > cfe/trunk/lib/Sema/SemaStmt.cpp > cfe/trunk/test/CodeGenCXX/debug-info-scope.cpp > cfe/trunk/test/CodeGenCXX/vla.cpp > > Modified: cfe/trunk/include/clang/Sema/Scope.h > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/ > clang/Sema/Scope.h?rev=325175&r1=325174&r2=325175&view=diff > ============================================================ > ================== > --- cfe/trunk/include/clang/Sema/Scope.h (original) > +++ cfe/trunk/include/clang/Sema/Scope.h Wed Feb 14 13:22:11 2018 > @@ -259,6 +259,9 @@ public: > Scope *getTemplateParamParent() { return TemplateParamParent; } > const Scope *getTemplateParamParent() const { return > TemplateParamParent; } > > + /// Returns the depth of this scope. The translation-unit has scope > depth 0. > + unsigned getDepth() const { return Depth; } > + > /// Returns the number of function prototype scopes in this scope > /// chain. > unsigned getFunctionPrototypeDepth() const { > > Modified: cfe/trunk/lib/Sema/SemaStmt.cpp > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/ > SemaStmt.cpp?rev=325175&r1=325174&r2=325175&view=diff > ============================================================ > ================== > --- cfe/trunk/lib/Sema/SemaStmt.cpp (original) > +++ cfe/trunk/lib/Sema/SemaStmt.cpp Wed Feb 14 13:22:11 2018 > @@ -2025,7 +2025,7 @@ void NoteForRangeBeginEndFunction(Sema & > > /// Build a variable declaration for a for-range statement. > VarDecl *BuildForRangeVarDecl(Sema &SemaRef, SourceLocation Loc, > - QualType Type, const char *Name) { > + QualType Type, StringRef Name) { > DeclContext *DC = SemaRef.CurContext; > IdentifierInfo *II = &SemaRef.PP.getIdentifierTable().get(Name); > TypeSourceInfo *TInfo = SemaRef.Context.getTrivialTypeSourceInfo(Type, > Loc); > @@ -2094,10 +2094,12 @@ StmtResult Sema::ActOnCXXForRangeStmt(Sc > } > > // Build auto && __range = range-init > + // Divide by 2, since the variables are in the inner scope (loop body). > + const auto DepthStr = std::to_string(S->getDepth() / 2); > SourceLocation RangeLoc = Range->getLocStart(); > VarDecl *RangeVar = BuildForRangeVarDecl(*this, RangeLoc, > Context.getAutoRRefDeductType( > ), > - "__range"); > + std::string("__range") + > DepthStr); > if (FinishForRangeVarDecl(*this, RangeVar, Range, RangeLoc, > diag::err_for_range_deduction_failure)) { > LoopVar->setInvalidDecl(); > @@ -2340,10 +2342,12 @@ Sema::BuildCXXForRangeStmt(SourceLocatio > return StmtError(); > > // Build auto __begin = begin-expr, __end = end-expr. > + // Divide by 2, since the variables are in the inner scope (loop > body). > + const auto DepthStr = std::to_string(S->getDepth() / 2); > VarDecl *BeginVar = BuildForRangeVarDecl(*this, ColonLoc, AutoType, > - "__begin"); > + std::string("__begin") + > DepthStr); > VarDecl *EndVar = BuildForRangeVarDecl(*this, ColonLoc, AutoType, > - "__end"); > + std::string("__end") + > DepthStr); > > // Build begin-expr and end-expr and attach to __begin and __end > variables. > ExprResult BeginExpr, EndExpr; > > Added: cfe/trunk/test/CodeGenCXX/debug-info-range-for-var-names.cpp > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ > CodeGenCXX/debug-info-range-for-var-names.cpp?rev=325175&view=auto > ============================================================ > ================== > --- cfe/trunk/test/CodeGenCXX/debug-info-range-for-var-names.cpp (added) > +++ cfe/trunk/test/CodeGenCXX/debug-info-range-for-var-names.cpp Wed Feb > 14 13:22:11 2018 > @@ -0,0 +1,36 @@ > +// RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited %s -o - | > FileCheck %s > + > +struct vec { > + using itr = int*; > + itr begin() { return nullptr; } > + itr end() { return nullptr; } > +}; > + > +void test() { > + vec as, bs, cs; > + > + for (auto a : as) > + for (auto b : bs) > + for (auto c : cs) { > + } > +} > + > +// CHECK: define void @_Z4testv() > +// CHECK: call void @llvm.dbg.declare(metadata %struct.vec** {{.*}}, > metadata ![[RANGE1:[0-9]+]] > +// CHECK: call void @llvm.dbg.declare(metadata i32** {{.*}}, metadata > ![[BEGIN1:[0-9]+]] > +// CHECK: call void @llvm.dbg.declare(metadata i32** {{.*}}, metadata > ![[END1:[0-9]+]] > +// CHECK: call void @llvm.dbg.declare(metadata %struct.vec** {{.*}}, > metadata ![[RANGE2:[0-9]+]] > +// CHECK: call void @llvm.dbg.declare(metadata i32** {{.*}}, metadata > ![[BEGIN2:[0-9]+]] > +// CHECK: call void @llvm.dbg.declare(metadata i32** {{.*}}, metadata > ![[END2:[0-9]+]] > +// CHECK: call void @llvm.dbg.declare(metadata %struct.vec** {{.*}}, > metadata ![[RANGE3:[0-9]+]] > +// CHECK: call void @llvm.dbg.declare(metadata i32** {{.*}}, metadata > ![[BEGIN3:[0-9]+]] > +// CHECK: call void @llvm.dbg.declare(metadata i32** {{.*}}, metadata > ![[END3:[0-9]+]] > +// CHECK: ![[RANGE1]] = !DILocalVariable(name: "__range1", > +// CHECK: ![[BEGIN1]] = !DILocalVariable(name: "__begin1", > +// CHECK: ![[END1]] = !DILocalVariable(name: "__end1", > +// CHECK: ![[RANGE2]] = !DILocalVariable(name: "__range2", > +// CHECK: ![[BEGIN2]] = !DILocalVariable(name: "__begin2", > +// CHECK: ![[END2]] = !DILocalVariable(name: "__end2", > +// CHECK: ![[RANGE3]] = !DILocalVariable(name: "__range3", > +// CHECK: ![[BEGIN3]] = !DILocalVariable(name: "__begin3", > +// CHECK: ![[END3]] = !DILocalVariable(name: "__end3", > > Modified: cfe/trunk/test/CodeGenCXX/debug-info-scope.cpp > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ > CodeGenCXX/debug-info-scope.cpp?rev=325175&r1=325174&r2=325175&view=diff > ============================================================ > ================== > --- cfe/trunk/test/CodeGenCXX/debug-info-scope.cpp (original) > +++ cfe/trunk/test/CodeGenCXX/debug-info-scope.cpp Wed Feb 14 13:22:11 > 2018 > @@ -58,7 +58,7 @@ void func() { > } > > int x[] = {1, 2}; > - // CHECK: = !DILocalVariable(name: "__range" > + // CHECK: = !DILocalVariable(name: "__range1" > // CHECK-SAME: scope: [[RANGE_FOR:![0-9]*]] > // CHECK-NOT: line: > // CHECK-SAME: ){{$}} > > Modified: cfe/trunk/test/CodeGenCXX/vla.cpp > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ > CodeGenCXX/vla.cpp?rev=325175&r1=325174&r2=325175&view=diff > ============================================================ > ================== > --- cfe/trunk/test/CodeGenCXX/vla.cpp (original) > +++ cfe/trunk/test/CodeGenCXX/vla.cpp Wed Feb 14 13:22:11 2018 > @@ -68,8 +68,8 @@ void test0(void *array, int n) { > void test2(int b) { > // CHECK-LABEL: define void {{.*}}test2{{.*}}(i32 %b) > int varr[b]; > - // AMD: %__end = alloca i32*, align 8, addrspace(5) > - // AMD: [[END:%.*]] = addrspacecast i32* addrspace(5)* %__end to i32** > + // AMD: %__end1 = alloca i32*, align 8, addrspace(5) > + // AMD: [[END:%.*]] = addrspacecast i32* addrspace(5)* %__end1 to i32** > // get the address of %b by checking the first store that stores it > //CHECK: store i32 %b, i32* [[PTR_B:%.*]] > > @@ -86,7 +86,7 @@ void test2(int b) { > //CHECK: [[VLA_SIZEOF:%.*]] = mul nuw i64 4, [[VLA_NUM_ELEMENTS_PRE]] > //CHECK-NEXT: [[VLA_NUM_ELEMENTS_POST:%.*]] = udiv i64 [[VLA_SIZEOF]], 4 > //CHECK-NEXT: [[VLA_END_PTR:%.*]] = getelementptr inbounds i32, i32* > {{%.*}}, i64 [[VLA_NUM_ELEMENTS_POST]] > - //X64-NEXT: store i32* [[VLA_END_PTR]], i32** %__end > + //X64-NEXT: store i32* [[VLA_END_PTR]], i32** %__end1 > //AMD-NEXT: store i32* [[VLA_END_PTR]], i32** [[END]] > for (int d : varr) 0; > } > @@ -94,8 +94,8 @@ void test2(int b) { > void test3(int b, int c) { > // CHECK-LABEL: define void {{.*}}test3{{.*}}(i32 %b, i32 %c) > int varr[b][c]; > - // AMD: %__end = alloca i32*, align 8, addrspace(5) > - // AMD: [[END:%.*]] = addrspacecast i32* addrspace(5)* %__end to i32** > + // AMD: %__end1 = alloca i32*, align 8, addrspace(5) > + // AMD: [[END:%.*]] = addrspacecast i32* addrspace(5)* %__end1 to i32** > // get the address of %b by checking the first store that stores it > //CHECK: store i32 %b, i32* [[PTR_B:%.*]] > //CHECK-NEXT: store i32 %c, i32* [[PTR_C:%.*]] > > > _______________________________________________ > 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