r224329 - Renamed RefersToEnclosingLocal bitfield to RefersToCapturedVariable.

Bataev, Alexey a.bataev at hotmail.com
Sat Jan 3 04:13:14 PST 2015


Richard, I'm not sure that you're right in this case.
Technically yes, for lambdas it means that DRE refers to enclosing 
local, but you can consider this enclosing local as a captured copy of 
an original variable. From this point of view you can consider DRE for 
this local as a ref to the original captured variable.
Moreover, a fix committed in r225060 fixes just the order of captures 
processing for some corner cases, but not the processing itself.

Best regards,
Alexey Bataev
=============
Software Engineer
Intel Compiler Team

02.01.2015 18:10, Richard Smith пишет:
> On Tue, Dec 16, 2014 at 12:01 AM, Alexey Bataev <a.bataev at hotmail.com 
> <mailto: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 <mailto: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/20150103/90f44af0/attachment.html>


More information about the cfe-commits mailing list