Index: lib/Parse/ParseDeclCXX.cpp =================================================================== --- lib/Parse/ParseDeclCXX.cpp +++ lib/Parse/ParseDeclCXX.cpp @@ -3544,8 +3544,6 @@ NoexceptExpr = Actions.CheckBooleanCondition(KeywordLoc, NoexceptExpr.get()); NoexceptRange = SourceRange(KeywordLoc, T.getCloseLocation()); - } else { - NoexceptType = EST_None; } } else { // There is no argument. Index: lib/Sema/TreeTransform.h =================================================================== --- lib/Sema/TreeTransform.h +++ lib/Sema/TreeTransform.h @@ -5041,12 +5041,12 @@ EnterExpressionEvaluationContext Unevaluated(getSema(), Sema::ConstantEvaluated); ExprResult NoexceptExpr = getDerived().TransformExpr(ESI.NoexceptExpr); - if (NoexceptExpr.isInvalid()) + if (!NoexceptExpr.isUsable()) return true; // FIXME: This is bogus, a noexcept expression is not a condition. NoexceptExpr = getSema().CheckBooleanCondition(Loc, NoexceptExpr.get()); - if (NoexceptExpr.isInvalid()) + if (!NoexceptExpr.isUsable()) return true; if (!NoexceptExpr.get()->isValueDependent()) { @@ -5054,7 +5054,7 @@ NoexceptExpr.get(), nullptr, diag::err_noexcept_needs_constant_expression, /*AllowFold*/false); - if (NoexceptExpr.isInvalid()) + if (!NoexceptExpr.isUsable()) return true; }