r224329 - Renamed RefersToEnclosingLocal bitfield to RefersToCapturedVariable.

Richard Smith richard at metafoo.co.uk
Fri Jan 2 07:10:39 PST 2015


On Tue, Dec 16, 2014 at 12:01 AM, Alexey Bataev <a.bataev at hotmail.com>
wrote:

> Author: abataev
> Date: Tue Dec 16 02:01:48 2014
> New Revision: 224329
>
> URL: http://llvm.org/viewvc/llvm-project?rev=224329&view=rev
> Log:
> Renamed RefersToEnclosingLocal bitfield to RefersToCapturedVariable.
> Bitfield RefersToEnclosingLocal of Stmt::DeclRefExprBitfields renamed to
> RefersToCapturedVariable to reflect latest changes introduced in commit
> 224323. Also renamed method Expr::refersToEnclosingLocal() to
> Expr::refersToCapturedVariable() and comments for constant arguments.
> No functional changes.
>

This seems like a bad idea for me. It's incorrect: for a lambda, the flag
means that the DeclRefExpr refers to an enclosing local, and does *not*
imply that the variable is necessarily captured. This confusion has already
led to a bug (fixed in r225060).

It seems like the purpose of this change is to allow the same flag to be
used to represent the case where a CapturedStmt captures a global variable?
Using the same flag to mean "this is a local from an enclosing function
scope (that may or may not be captured)" and to mean "this is a global that
is definitely captured" seems problematic.

Modified:
>     cfe/trunk/include/clang/AST/Expr.h
>     cfe/trunk/include/clang/AST/Stmt.h
>     cfe/trunk/lib/AST/ASTImporter.cpp
>     cfe/trunk/lib/AST/Expr.cpp
>     cfe/trunk/lib/Analysis/BodyFarm.cpp
>     cfe/trunk/lib/CodeGen/CGExpr.cpp
>     cfe/trunk/lib/Frontend/Rewrite/RewriteModernObjC.cpp
>     cfe/trunk/lib/Frontend/Rewrite/RewriteObjC.cpp
>     cfe/trunk/lib/Sema/SemaChecking.cpp
>     cfe/trunk/lib/Sema/SemaDecl.cpp
>     cfe/trunk/lib/Sema/SemaExpr.cpp
>     cfe/trunk/lib/Sema/SemaOpenMP.cpp
>     cfe/trunk/lib/Sema/SemaStmt.cpp
>     cfe/trunk/lib/Serialization/ASTReaderStmt.cpp
>     cfe/trunk/lib/Serialization/ASTWriterDecl.cpp
>     cfe/trunk/lib/Serialization/ASTWriterStmt.cpp
>
> Modified: cfe/trunk/include/clang/AST/Expr.h
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Expr.h?rev=224329&r1=224328&r2=224329&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang/AST/Expr.h (original)
> +++ cfe/trunk/include/clang/AST/Expr.h Tue Dec 16 02:01:48 2014
> @@ -886,9 +886,9 @@ public:
>  ///   DeclRefExprBits.HasTemplateKWAndArgsInfo:
>  ///       Specifies when this declaration reference expression has an
> explicit
>  ///       C++ template keyword and/or template argument list.
> -///   DeclRefExprBits.RefersToEnclosingLocal
> +///   DeclRefExprBits.RefersToCapturedVariable
>  ///       Specifies when this declaration reference expression (validly)
> -///       refers to a local variable from a different function.
> +///       refers to a captured variable.
>  class DeclRefExpr : public Expr {
>    /// \brief The declaration that we are referencing.
>    ValueDecl *D;
> @@ -933,7 +933,7 @@ class DeclRefExpr : public Expr {
>    DeclRefExpr(const ASTContext &Ctx,
>                NestedNameSpecifierLoc QualifierLoc,
>                SourceLocation TemplateKWLoc,
> -              ValueDecl *D, bool refersToEnclosingLocal,
> +              ValueDecl *D, bool RefersToCapturedVariable,
>                const DeclarationNameInfo &NameInfo,
>                NamedDecl *FoundD,
>                const TemplateArgumentListInfo *TemplateArgs,
> @@ -948,7 +948,7 @@ class DeclRefExpr : public Expr {
>    void computeDependence(const ASTContext &C);
>
>  public:
> -  DeclRefExpr(ValueDecl *D, bool refersToEnclosingLocal, QualType T,
> +  DeclRefExpr(ValueDecl *D, bool RefersToCapturedVariable, QualType T,
>                ExprValueKind VK, SourceLocation L,
>                const DeclarationNameLoc &LocInfo = DeclarationNameLoc())
>      : Expr(DeclRefExprClass, T, VK, OK_Ordinary, false, false, false,
> false),
> @@ -957,22 +957,22 @@ public:
>      DeclRefExprBits.HasTemplateKWAndArgsInfo = 0;
>      DeclRefExprBits.HasFoundDecl = 0;
>      DeclRefExprBits.HadMultipleCandidates = 0;
> -    DeclRefExprBits.RefersToEnclosingLocal = refersToEnclosingLocal;
> +    DeclRefExprBits.RefersToCapturedVariable = RefersToCapturedVariable;
>      computeDependence(D->getASTContext());
>    }
>
>    static DeclRefExpr *
>    Create(const ASTContext &Context, NestedNameSpecifierLoc QualifierLoc,
> -         SourceLocation TemplateKWLoc, ValueDecl *D, bool
> isEnclosingLocal,
> -         SourceLocation NameLoc, QualType T, ExprValueKind VK,
> -         NamedDecl *FoundD = nullptr,
> +         SourceLocation TemplateKWLoc, ValueDecl *D,
> +         bool RefersToCapturedVariable, SourceLocation NameLoc, QualType
> T,
> +         ExprValueKind VK, NamedDecl *FoundD = nullptr,
>           const TemplateArgumentListInfo *TemplateArgs = nullptr);
>
>    static DeclRefExpr *
>    Create(const ASTContext &Context, NestedNameSpecifierLoc QualifierLoc,
> -         SourceLocation TemplateKWLoc, ValueDecl *D, bool
> isEnclosingLocal,
> -         const DeclarationNameInfo &NameInfo, QualType T, ExprValueKind
> VK,
> -         NamedDecl *FoundD = nullptr,
> +         SourceLocation TemplateKWLoc, ValueDecl *D,
> +         bool RefersToCapturedVariable, const DeclarationNameInfo
> &NameInfo,
> +         QualType T, ExprValueKind VK, NamedDecl *FoundD = nullptr,
>           const TemplateArgumentListInfo *TemplateArgs = nullptr);
>
>    /// \brief Construct an empty declaration reference expression.
> @@ -1144,10 +1144,9 @@ public:
>      DeclRefExprBits.HadMultipleCandidates = V;
>    }
>
> -  /// Does this DeclRefExpr refer to a local declaration from an
> -  /// enclosing function scope?
> -  bool refersToEnclosingLocal() const {
> -    return DeclRefExprBits.RefersToEnclosingLocal;
> +  /// \brief Does this DeclRefExpr refer to a captured variable?
> +  bool refersToCapturedVariable() const {
> +    return DeclRefExprBits.RefersToCapturedVariable;
>    }
>
>    static bool classof(const Stmt *T) {
>
> Modified: cfe/trunk/include/clang/AST/Stmt.h
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Stmt.h?rev=224329&r1=224328&r2=224329&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang/AST/Stmt.h (original)
> +++ cfe/trunk/include/clang/AST/Stmt.h Tue Dec 16 02:01:48 2014
> @@ -212,7 +212,7 @@ protected:
>      unsigned HasTemplateKWAndArgsInfo : 1;
>      unsigned HasFoundDecl : 1;
>      unsigned HadMultipleCandidates : 1;
> -    unsigned RefersToEnclosingLocal : 1;
> +    unsigned RefersToCapturedVariable : 1;
>    };
>
>    class CastExprBitfields {
>
> Modified: cfe/trunk/lib/AST/ASTImporter.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTImporter.cpp?rev=224329&r1=224328&r2=224329&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/AST/ASTImporter.cpp (original)
> +++ cfe/trunk/lib/AST/ASTImporter.cpp Tue Dec 16 02:01:48 2014
> @@ -4406,7 +4406,7 @@ Expr *ASTNodeImporter::VisitDeclRefExpr(
>
> Importer.Import(E->getQualifierLoc()),
>
> Importer.Import(E->getTemplateKeywordLoc()),
>                                           ToD,
> -                                         E->refersToEnclosingLocal(),
> +                                         E->refersToCapturedVariable(),
>
> Importer.Import(E->getLocation()),
>                                           T, E->getValueKind(),
>                                           FoundD,
>
> Modified: cfe/trunk/lib/AST/Expr.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Expr.cpp?rev=224329&r1=224328&r2=224329&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/AST/Expr.cpp (original)
> +++ cfe/trunk/lib/AST/Expr.cpp Tue Dec 16 02:01:48 2014
> @@ -322,7 +322,7 @@ void DeclRefExpr::computeDependence(cons
>  DeclRefExpr::DeclRefExpr(const ASTContext &Ctx,
>                           NestedNameSpecifierLoc QualifierLoc,
>                           SourceLocation TemplateKWLoc,
> -                         ValueDecl *D, bool RefersToEnclosingLocal,
> +                         ValueDecl *D, bool RefersToCapturedVariable,
>                           const DeclarationNameInfo &NameInfo,
>                           NamedDecl *FoundD,
>                           const TemplateArgumentListInfo *TemplateArgs,
> @@ -343,7 +343,7 @@ DeclRefExpr::DeclRefExpr(const ASTContex
>      getInternalFoundDecl() = FoundD;
>    DeclRefExprBits.HasTemplateKWAndArgsInfo
>      = (TemplateArgs || TemplateKWLoc.isValid()) ? 1 : 0;
> -  DeclRefExprBits.RefersToEnclosingLocal = RefersToEnclosingLocal;
> +  DeclRefExprBits.RefersToCapturedVariable = RefersToCapturedVariable;
>    if (TemplateArgs) {
>      bool Dependent = false;
>      bool InstantiationDependent = false;
> @@ -367,14 +367,14 @@ DeclRefExpr *DeclRefExpr::Create(const A
>                                   NestedNameSpecifierLoc QualifierLoc,
>                                   SourceLocation TemplateKWLoc,
>                                   ValueDecl *D,
> -                                 bool RefersToEnclosingLocal,
> +                                 bool RefersToCapturedVariable,
>                                   SourceLocation NameLoc,
>                                   QualType T,
>                                   ExprValueKind VK,
>                                   NamedDecl *FoundD,
>                                   const TemplateArgumentListInfo
> *TemplateArgs) {
>    return Create(Context, QualifierLoc, TemplateKWLoc, D,
> -                RefersToEnclosingLocal,
> +                RefersToCapturedVariable,
>                  DeclarationNameInfo(D->getDeclName(), NameLoc),
>                  T, VK, FoundD, TemplateArgs);
>  }
> @@ -383,7 +383,7 @@ DeclRefExpr *DeclRefExpr::Create(const A
>                                   NestedNameSpecifierLoc QualifierLoc,
>                                   SourceLocation TemplateKWLoc,
>                                   ValueDecl *D,
> -                                 bool RefersToEnclosingLocal,
> +                                 bool RefersToCapturedVariable,
>                                   const DeclarationNameInfo &NameInfo,
>                                   QualType T,
>                                   ExprValueKind VK,
> @@ -405,7 +405,7 @@ DeclRefExpr *DeclRefExpr::Create(const A
>
>    void *Mem = Context.Allocate(Size, llvm::alignOf<DeclRefExpr>());
>    return new (Mem) DeclRefExpr(Context, QualifierLoc, TemplateKWLoc, D,
> -                               RefersToEnclosingLocal,
> +                               RefersToCapturedVariable,
>                                 NameInfo, FoundD, TemplateArgs, T, VK);
>  }
>
>
> Modified: cfe/trunk/lib/Analysis/BodyFarm.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/BodyFarm.cpp?rev=224329&r1=224328&r2=224329&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Analysis/BodyFarm.cpp (original)
> +++ cfe/trunk/lib/Analysis/BodyFarm.cpp Tue Dec 16 02:01:48 2014
> @@ -115,7 +115,7 @@ DeclRefExpr *ASTMaker::makeDeclRefExpr(c
>                          /* QualifierLoc = */ NestedNameSpecifierLoc(),
>                          /* TemplateKWLoc = */ SourceLocation(),
>                          /* D = */ const_cast<VarDecl*>(D),
> -                        /* isEnclosingLocal = */ false,
> +                        /* RefersToCapturedVariable = */ false,
>                          /* NameLoc = */ SourceLocation(),
>                          /* T = */ D->getType(),
>                          /* VK = */ VK_LValue);
>
> Modified: cfe/trunk/lib/CodeGen/CGExpr.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExpr.cpp?rev=224329&r1=224328&r2=224329&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGExpr.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGExpr.cpp Tue Dec 16 02:01:48 2014
> @@ -1907,7 +1907,7 @@ LValue CodeGenFunction::EmitDeclRefLValu
>
>    if (const auto *VD = dyn_cast<VarDecl>(ND)) {
>      // Check for captured variables.
> -    if (E->refersToEnclosingLocal()) {
> +    if (E->refersToCapturedVariable()) {
>        if (auto *FD = LambdaCaptureFields.lookup(VD))
>          return EmitCapturedFieldLValue(*this, FD, CXXABIThisValue);
>        else if (CapturedStmtInfo) {
> @@ -1916,9 +1916,10 @@ LValue CodeGenFunction::EmitDeclRefLValu
>          else
>            return EmitCapturedFieldLValue(*this,
> CapturedStmtInfo->lookup(VD),
>
> CapturedStmtInfo->getContextValue());
> -      } else
> -        return MakeAddrLValue(GetAddrOfBlockDecl(VD,
> VD->hasAttr<BlocksAttr>()),
> -                              T, Alignment);
> +      }
> +      assert(isa<BlockDecl>(CurCodeDecl));
> +      return MakeAddrLValue(GetAddrOfBlockDecl(VD,
> VD->hasAttr<BlocksAttr>()),
> +                            T, Alignment);
>      }
>
>      // Global Named registers access via intrinsics only
>
> Modified: cfe/trunk/lib/Frontend/Rewrite/RewriteModernObjC.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/Rewrite/RewriteModernObjC.cpp?rev=224329&r1=224328&r2=224329&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Frontend/Rewrite/RewriteModernObjC.cpp (original)
> +++ cfe/trunk/lib/Frontend/Rewrite/RewriteModernObjC.cpp Tue Dec 16
> 02:01:48 2014
> @@ -4564,7 +4564,7 @@ void RewriteModernObjC::GetBlockDeclRefE
>      }
>    // Handle specific things.
>    if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(S))
> -    if (DRE->refersToEnclosingLocal() ||
> +    if (DRE->refersToCapturedVariable() ||
>          HasLocalVariableExternalStorage(DRE->getDecl()))
>        // FIXME: Handle enums.
>        BlockDeclRefs.push_back(DRE);
> @@ -4591,7 +4591,7 @@ void RewriteModernObjC::GetInnerBlockDec
>      }
>    // Handle specific things.
>    if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(S)) {
> -    if (DRE->refersToEnclosingLocal() ||
> +    if (DRE->refersToCapturedVariable() ||
>          HasLocalVariableExternalStorage(DRE->getDecl())) {
>        if (!InnerContexts.count(DRE->getDecl()->getDeclContext()))
>          InnerBlockDeclRefs.push_back(DRE);
> @@ -4772,7 +4772,7 @@ Stmt *RewriteModernObjC::RewriteBlockDec
>    // Rewrite the byref variable into BYREFVAR->__forwarding->BYREFVAR
>    // for each DeclRefExp where BYREFVAR is name of the variable.
>    ValueDecl *VD = DeclRefExp->getDecl();
> -  bool isArrow = DeclRefExp->refersToEnclosingLocal() ||
> +  bool isArrow = DeclRefExp->refersToCapturedVariable() ||
>                   HasLocalVariableExternalStorage(DeclRefExp->getDecl());
>
>    FieldDecl *FD = FieldDecl::Create(*Context, nullptr, SourceLocation(),
>
> Modified: cfe/trunk/lib/Frontend/Rewrite/RewriteObjC.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/Rewrite/RewriteObjC.cpp?rev=224329&r1=224328&r2=224329&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Frontend/Rewrite/RewriteObjC.cpp (original)
> +++ cfe/trunk/lib/Frontend/Rewrite/RewriteObjC.cpp Tue Dec 16 02:01:48 2014
> @@ -3672,7 +3672,7 @@ void RewriteObjC::GetBlockDeclRefExprs(S
>      }
>    // Handle specific things.
>    if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(S))
> -    if (DRE->refersToEnclosingLocal() ||
> +    if (DRE->refersToCapturedVariable() ||
>          HasLocalVariableExternalStorage(DRE->getDecl()))
>        // FIXME: Handle enums.
>        BlockDeclRefs.push_back(DRE);
> @@ -3699,7 +3699,7 @@ void RewriteObjC::GetInnerBlockDeclRefEx
>      }
>    // Handle specific things.
>    if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(S)) {
> -    if (DRE->refersToEnclosingLocal() ||
> +    if (DRE->refersToCapturedVariable() ||
>          HasLocalVariableExternalStorage(DRE->getDecl())) {
>        if (!InnerContexts.count(DRE->getDecl()->getDeclContext()))
>          InnerBlockDeclRefs.push_back(DRE);
> @@ -3861,7 +3861,7 @@ Stmt *RewriteObjC::RewriteBlockDeclRefEx
>    // Rewrite the byref variable into BYREFVAR->__forwarding->BYREFVAR
>    // for each DeclRefExp where BYREFVAR is name of the variable.
>    ValueDecl *VD = DeclRefExp->getDecl();
> -  bool isArrow = DeclRefExp->refersToEnclosingLocal() ||
> +  bool isArrow = DeclRefExp->refersToCapturedVariable() ||
>                   HasLocalVariableExternalStorage(DeclRefExp->getDecl());
>
>    FieldDecl *FD = FieldDecl::Create(*Context, nullptr, SourceLocation(),
>
> Modified: cfe/trunk/lib/Sema/SemaChecking.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaChecking.cpp?rev=224329&r1=224328&r2=224329&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaChecking.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaChecking.cpp Tue Dec 16 02:01:48 2014
> @@ -4972,7 +4972,7 @@ static Expr *EvalAddr(Expr *E, SmallVect
>      DeclRefExpr *DR = cast<DeclRefExpr>(E);
>
>      // If we leave the immediate function, the lifetime isn't about to
> end.
> -    if (DR->refersToEnclosingLocal())
> +    if (DR->refersToCapturedVariable())
>        return nullptr;
>
>      if (VarDecl *V = dyn_cast<VarDecl>(DR->getDecl()))
> @@ -5139,7 +5139,7 @@ do {
>      DeclRefExpr *DR = cast<DeclRefExpr>(E);
>
>      // If we leave the immediate function, the lifetime isn't about to
> end.
> -    if (DR->refersToEnclosingLocal())
> +    if (DR->refersToCapturedVariable())
>        return nullptr;
>
>      if (VarDecl *V = dyn_cast<VarDecl>(DR->getDecl())) {
>
> Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=224329&r1=224328&r2=224329&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaDecl.cpp Tue Dec 16 02:01:48 2014
> @@ -10181,7 +10181,7 @@ static void RebuildLambdaScopeInfo(CXXMe
>        QualType CaptureType = VD->getType();
>        const bool ByRef = C.getCaptureKind() == LCK_ByRef;
>        LSI->addCapture(VD, /*IsBlock*/false, ByRef,
> -          /*RefersToEnclosingLocal*/true, C.getLocation(),
> +          /*RefersToCapturedVariable*/true, C.getLocation(),
>            /*EllipsisLoc*/C.isPackExpansion()
>                           ? C.getEllipsisLoc() : SourceLocation(),
>            CaptureType, /*Expr*/ nullptr);
>
> Modified: cfe/trunk/lib/Sema/SemaExpr.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=224329&r1=224328&r2=224329&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaExpr.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaExpr.cpp Tue Dec 16 02:01:48 2014
> @@ -1601,7 +1601,7 @@ Sema::BuildDeclRefExpr(ValueDecl *D, Qua
>          }
>        }
>
> -  bool refersToEnclosingScope =
> +  bool RefersToCapturedVariable =
>        isa<VarDecl>(D) &&
>        NeedToCaptureVariable(cast<VarDecl>(D), NameInfo.getLoc());
>
> @@ -1613,15 +1613,15 @@ Sema::BuildDeclRefExpr(ValueDecl *D, Qua
>      E = DeclRefExpr::Create(
>          Context,
>          SS ? SS->getWithLocInContext(Context) : NestedNameSpecifierLoc(),
> -        VarSpec->getTemplateKeywordLoc(), D, refersToEnclosingScope,
> +        VarSpec->getTemplateKeywordLoc(), D, RefersToCapturedVariable,
>          NameInfo.getLoc(), Ty, VK, FoundD, TemplateArgs);
>    } else {
>      assert(!TemplateArgs && "No template arguments for non-variable"
>                              " template specialization references");
> -    E = DeclRefExpr::Create(
> -        Context,
> -        SS ? SS->getWithLocInContext(Context) : NestedNameSpecifierLoc(),
> -        SourceLocation(), D, refersToEnclosingScope, NameInfo, Ty, VK,
> FoundD);
> +    E = DeclRefExpr::Create(Context, SS ? SS->getWithLocInContext(Context)
> +                                        : NestedNameSpecifierLoc(),
> +                            SourceLocation(), D, RefersToCapturedVariable,
> +                            NameInfo, Ty, VK, FoundD);
>    }
>
>    MarkDeclRefReferenced(E);
> @@ -8586,7 +8586,7 @@ static NonConstCaptureKind isReferenceTo
>    // Must be a reference to a declaration from an enclosing scope.
>    DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E);
>    if (!DRE) return NCCK_None;
> -  if (!DRE->refersToEnclosingLocal()) return NCCK_None;
> +  if (!DRE->refersToCapturedVariable()) return NCCK_None;
>
>    // The declaration must be a variable which is not declared 'const'.
>    VarDecl *var = dyn_cast<VarDecl>(DRE->getDecl());
> @@ -11965,7 +11965,7 @@ static bool captureInCapturedRegion(Capt
>                                      const bool BuildAndDiagnose,
>                                      QualType &CaptureType,
>                                      QualType &DeclRefType,
> -                                    const bool RefersToEnclosingLocal,
> +                                    const bool RefersToCapturedVariable,
>                                      Sema &S) {
>
>    // By default, capture variables by reference.
> @@ -11987,7 +11987,7 @@ static bool captureInCapturedRegion(Capt
>      Field->setAccess(AS_private);
>      RD->addDecl(Field);
>
> -    CopyExpr = new (S.Context) DeclRefExpr(Var, RefersToEnclosingLocal,
> +    CopyExpr = new (S.Context) DeclRefExpr(Var, RefersToCapturedVariable,
>                                              DeclRefType, VK_LValue, Loc);
>      Var->setReferenced(true);
>      Var->markUsed(S.Context);
> @@ -11995,7 +11995,7 @@ static bool captureInCapturedRegion(Capt
>
>    // Actually capture the variable.
>    if (BuildAndDiagnose)
> -    RSI->addCapture(Var, /*isBlock*/false, ByRef, RefersToEnclosingLocal,
> Loc,
> +    RSI->addCapture(Var, /*isBlock*/false, ByRef,
> RefersToCapturedVariable, Loc,
>                      SourceLocation(), CaptureType, CopyExpr);
>
>
> @@ -12009,7 +12009,7 @@ static ExprResult addAsFieldToClosureTyp
>                                    VarDecl *Var, QualType FieldType,
>                                    QualType DeclRefType,
>                                    SourceLocation Loc,
> -                                  bool RefersToEnclosingLocal) {
> +                                  bool RefersToCapturedVariable) {
>    CXXRecordDecl *Lambda = LSI->Lambda;
>
>    // Build the non-static data member.
> @@ -12038,7 +12038,7 @@ static ExprResult addAsFieldToClosureTyp
>    // C++ [expr.prim.labda]p12:
>    //   An entity captured by a lambda-expression is odr-used (3.2) in
>    //   the scope containing the lambda-expression.
> -  Expr *Ref = new (S.Context) DeclRefExpr(Var, RefersToEnclosingLocal,
> +  Expr *Ref = new (S.Context) DeclRefExpr(Var, RefersToCapturedVariable,
>                                            DeclRefType, VK_LValue, Loc);
>    Var->setReferenced(true);
>    Var->markUsed(S.Context);
> @@ -12132,7 +12132,7 @@ static bool captureInLambda(LambdaScopeI
>                              const bool BuildAndDiagnose,
>                              QualType &CaptureType,
>                              QualType &DeclRefType,
> -                            const bool RefersToEnclosingLocal,
> +                            const bool RefersToCapturedVariable,
>                              const Sema::TryCaptureKind Kind,
>                              SourceLocation EllipsisLoc,
>                              const bool IsTopScope,
> @@ -12206,7 +12206,7 @@ static bool captureInLambda(LambdaScopeI
>    if (BuildAndDiagnose) {
>      ExprResult Result = addAsFieldToClosureType(S, LSI, Var,
>                                          CaptureType, DeclRefType, Loc,
> -                                        RefersToEnclosingLocal);
> +                                        RefersToCapturedVariable);
>      if (!Result.isInvalid())
>        CopyExpr = Result.get();
>    }
> @@ -12227,7 +12227,7 @@ static bool captureInLambda(LambdaScopeI
>
>    // Add the capture.
>    if (BuildAndDiagnose)
> -    LSI->addCapture(Var, /*IsBlock=*/false, ByRef, RefersToEnclosingLocal,
> +    LSI->addCapture(Var, /*IsBlock=*/false, ByRef,
> RefersToCapturedVariable,
>                      Loc, EllipsisLoc, CaptureType, CopyExpr);
>
>    return true;
>
> Modified: cfe/trunk/lib/Sema/SemaOpenMP.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaOpenMP.cpp?rev=224329&r1=224328&r2=224329&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaOpenMP.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaOpenMP.cpp Tue Dec 16 02:01:48 2014
> @@ -4166,11 +4166,12 @@ OMPClause *Sema::ActOnOpenMPPrivateClaus
>      if (VDPrivate->isInvalidDecl())
>        continue;
>      CurContext->addDecl(VDPrivate);
> -    auto VDPrivateRefExpr = DeclRefExpr::Create(
> -        Context, /*QualifierLoc*/ NestedNameSpecifierLoc(),
> -        /*TemplateKWLoc*/ SourceLocation(), VDPrivate,
> -        /*isEnclosingLocal*/ false, /*NameLoc*/ SourceLocation(),
> DE->getType(),
> -        /*VK*/ VK_LValue);
> +    auto VDPrivateRefExpr =
> +        DeclRefExpr::Create(Context, /*QualifierLoc*/
> NestedNameSpecifierLoc(),
> +                            /*TemplateKWLoc*/ SourceLocation(), VDPrivate,
> +                            /*RefersToCapturedVariable*/ false,
> +                            /*NameLoc*/ SourceLocation(), DE->getType(),
> +                            /*VK*/ VK_LValue);
>
>      DSAStack->addDSA(VD, DE, OMPC_private);
>      Vars.push_back(DE);
> @@ -4391,7 +4392,7 @@ OMPClause *Sema::ActOnOpenMPFirstprivate
>        VDInitRefExpr = DeclRefExpr::Create(
>            Context, /*QualifierLoc*/ NestedNameSpecifierLoc(),
>            /*TemplateKWLoc*/ SourceLocation(), VDInit,
> -          /*isEnclosingLocal*/ true, ELoc, Type,
> +          /*RefersToCapturedVariable*/ true, ELoc, Type,
>            /*VK*/ VK_LValue);
>        VDInit->setIsUsed();
>        auto Init = DefaultLvalueConversion(VDInitRefExpr).get();
> @@ -4409,7 +4410,7 @@ OMPClause *Sema::ActOnOpenMPFirstprivate
>            VDPrivate, DefaultLvalueConversion(
>                           DeclRefExpr::Create(Context,
> NestedNameSpecifierLoc(),
>                                               SourceLocation(),
> DE->getDecl(),
> -                                             /*isEnclosingLocal=*/true,
> +
>  /*RefersToCapturedVariable=*/true,
>                                               DE->getExprLoc(),
> DE->getType(),
>                                               /*VK=*/VK_LValue)).get(),
>            /*DirectInit=*/false, /*TypeMayContainAuto=*/false);
> @@ -4425,7 +4426,7 @@ OMPClause *Sema::ActOnOpenMPFirstprivate
>      auto VDPrivateRefExpr = DeclRefExpr::Create(
>          Context, /*QualifierLoc*/ NestedNameSpecifierLoc(),
>          /*TemplateKWLoc*/ SourceLocation(), VDPrivate,
> -        /*isEnclosingLocal*/ false, DE->getLocStart(), DE->getType(),
> +        /*RefersToCapturedVariable*/ false, DE->getLocStart(),
> DE->getType(),
>          /*VK*/ VK_LValue);
>      DSAStack->addDSA(VD, DE, OMPC_firstprivate);
>      Vars.push_back(DE);
>
> Modified: cfe/trunk/lib/Sema/SemaStmt.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaStmt.cpp?rev=224329&r1=224328&r2=224329&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaStmt.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaStmt.cpp Tue Dec 16 02:01:48 2014
> @@ -2484,7 +2484,7 @@ VarDecl *Sema::getCopyElisionCandidate(Q
>    // - in a return statement in a function [where] ...
>    // ... the expression is the name of a non-volatile automatic object ...
>    DeclRefExpr *DR = dyn_cast<DeclRefExpr>(E->IgnoreParens());
> -  if (!DR || DR->refersToEnclosingLocal())
> +  if (!DR || DR->refersToCapturedVariable())
>      return nullptr;
>    VarDecl *VD = dyn_cast<VarDecl>(DR->getDecl());
>    if (!VD)
>
> Modified: cfe/trunk/lib/Serialization/ASTReaderStmt.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReaderStmt.cpp?rev=224329&r1=224328&r2=224329&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Serialization/ASTReaderStmt.cpp (original)
> +++ cfe/trunk/lib/Serialization/ASTReaderStmt.cpp Tue Dec 16 02:01:48 2014
> @@ -433,7 +433,7 @@ void ASTStmtReader::VisitDeclRefExpr(Dec
>    E->DeclRefExprBits.HasFoundDecl = Record[Idx++];
>    E->DeclRefExprBits.HasTemplateKWAndArgsInfo = Record[Idx++];
>    E->DeclRefExprBits.HadMultipleCandidates = Record[Idx++];
> -  E->DeclRefExprBits.RefersToEnclosingLocal = Record[Idx++];
> +  E->DeclRefExprBits.RefersToCapturedVariable = Record[Idx++];
>    unsigned NumTemplateArgs = 0;
>    if (E->hasTemplateKWAndArgsInfo())
>      NumTemplateArgs = Record[Idx++];
>
> Modified: cfe/trunk/lib/Serialization/ASTWriterDecl.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriterDecl.cpp?rev=224329&r1=224328&r2=224329&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Serialization/ASTWriterDecl.cpp (original)
> +++ cfe/trunk/lib/Serialization/ASTWriterDecl.cpp Tue Dec 16 02:01:48 2014
> @@ -1842,7 +1842,8 @@ void ASTWriter::WriteDeclAbbrevs() {
>    Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); //GetDeclFound
>    Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
> //ExplicitTemplateArgs
>    Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
> //HadMultipleCandidates
> -  Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
> //RefersToEnclosingLocal
> +  Abv->Add(
> +      BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); //
> RefersToCapturedVariable
>    Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // DeclRef
>    Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Location
>    DeclRefExprAbbrev = Stream.EmitAbbrev(Abv);
>
> Modified: cfe/trunk/lib/Serialization/ASTWriterStmt.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriterStmt.cpp?rev=224329&r1=224328&r2=224329&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Serialization/ASTWriterStmt.cpp (original)
> +++ cfe/trunk/lib/Serialization/ASTWriterStmt.cpp Tue Dec 16 02:01:48 2014
> @@ -344,7 +344,7 @@ void ASTStmtWriter::VisitDeclRefExpr(Dec
>    Record.push_back(E->getDecl() != E->getFoundDecl());
>    Record.push_back(E->hasTemplateKWAndArgsInfo());
>    Record.push_back(E->hadMultipleCandidates());
> -  Record.push_back(E->refersToEnclosingLocal());
> +  Record.push_back(E->refersToCapturedVariable());
>
>    if (E->hasTemplateKWAndArgsInfo()) {
>      unsigned NumTemplateArgs = E->getNumTemplateArgs();
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150102/038fcbf1/attachment.html>


More information about the cfe-commits mailing list