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