From: Fariborz Jahanian Date: Mon, 12 Jul 2010 17:26:57 +0000 (+0000) Subject: Move setting of Dependent Type to BlockDeclRefExpr's X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=52bc56a296b11b4fc6bf5ddf4ded5262f6484bdb;p=clang Move setting of Dependent Type to BlockDeclRefExpr's constructor. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@108157 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/AST/Expr.h b/include/clang/AST/Expr.h index 9d1ba48a35..5cf285bad0 100644 --- a/include/clang/AST/Expr.h +++ b/include/clang/AST/Expr.h @@ -3398,8 +3398,10 @@ public: // FIXME: Fix type/value dependence! BlockDeclRefExpr(ValueDecl *d, QualType t, SourceLocation l, bool ByRef, bool constAdded = false, - Stmt *copyConstructorVal = 0) - : Expr(BlockDeclRefExprClass, t, false, false), D(d), Loc(l), IsByRef(ByRef), + Stmt *copyConstructorVal = 0, + bool hasDependentType = false) + : Expr(BlockDeclRefExprClass, t, hasDependentType, false), + D(d), Loc(l), IsByRef(ByRef), ConstQualAdded(constAdded), CopyConstructorVal(copyConstructorVal) {} // \brief Build an empty reference to a declared variable in a diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index 57b4232294..53886e108e 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -1744,10 +1744,11 @@ Sema::BuildDeclarationNameExpr(const CXXScopeSpec &SS, // Variable will be bound by-copy, make it const within the closure. ExprTy.addConst(); + QualType T = VD->getType(); BlockDeclRefExpr *BDRE = new (Context) BlockDeclRefExpr(VD, ExprTy, Loc, false, - constAdded); - QualType T = VD->getType(); + constAdded, 0, + (getLangOptions().CPlusPlus && T->isDependentType())); if (getLangOptions().CPlusPlus) { if (!T->isDependentType() && !T->isReferenceType()) { Expr *E = new (Context) @@ -1765,8 +1766,6 @@ Sema::BuildDeclarationNameExpr(const CXXScopeSpec &SS, BDRE->setCopyConstructorExpr(Init); } } - else if (T->isDependentType()) - BDRE->setTypeDependent(true); } return Owned(BDRE); }