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 <[email protected] <mailto:[email protected]>> 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
    [email protected] <mailto:[email protected]>
    http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits



_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to