Index: lib/Sema/SemaExprObjC.cpp =================================================================== --- lib/Sema/SemaExprObjC.cpp +++ lib/Sema/SemaExprObjC.cpp @@ -3140,7 +3140,7 @@ Prop->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_weak; if (!IsWeak && Sel.isUnarySelector()) IsWeak = ReturnType.getObjCLifetime() & Qualifiers::OCL_Weak; - if (IsWeak && + if (IsWeak && !isUnevaluatedContext() && !Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, LBracLoc)) getCurFunction()->recordUseOfWeak(Result, Prop); } Index: lib/Sema/SemaType.cpp =================================================================== --- lib/Sema/SemaType.cpp +++ lib/Sema/SemaType.cpp @@ -8040,6 +8040,8 @@ } QualType Sema::BuildTypeofExprType(Expr *E, SourceLocation Loc) { + EnterExpressionEvaluationContext Unevaluated( + *this, ExpressionEvaluationContext::Unevaluated); ExprResult ER = CheckPlaceholderExpr(E); if (ER.isInvalid()) return QualType(); E = ER.get(); @@ -8127,6 +8129,9 @@ QualType Sema::BuildDecltypeType(Expr *E, SourceLocation Loc, bool AsUnevaluated) { + EnterExpressionEvaluationContext Unevaluated( + *this, ExpressionEvaluationContext::Unevaluated); + ExprResult ER = CheckPlaceholderExpr(E); if (ER.isInvalid()) return QualType(); E = ER.get(); Index: test/SemaObjC/arc-repeated-weak.mm =================================================================== --- test/SemaObjC/arc-repeated-weak.mm +++ test/SemaObjC/arc-repeated-weak.mm @@ -462,6 +462,9 @@ NSString * t2 = NSBundle.foo2.prop; use(NSBundle.foo2.weakProp); // expected-warning{{weak property 'weakProp' may be accessed multiple times}} use(NSBundle2.foo2.weakProp); // expected-note{{also accessed here}} + decltype([NSBundle2.foo2 weakProp]) t3; + decltype(NSBundle2.foo2.weakProp) t4; + __typeof__(NSBundle2.foo2.weakProp) t5; } // This used to crash in the constructor of WeakObjectProfileTy when a