r325175 - [Debug] Annotate compiler generated range-for loop variables.
Galina Kistanova via cfe-commits
cfe-commits at lists.llvm.org
Thu Feb 15 09:32:33 PST 2018
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 at 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 at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180215/d6f3f739/attachment-0001.html>
More information about the cfe-commits
mailing list