diff options
Diffstat (limited to 'clang/lib/Sema/SemaExprCXX.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaExprCXX.cpp | 14 | 
1 files changed, 10 insertions, 4 deletions
| diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp index 7c9baa756b7..8e29caa6a1a 100644 --- a/clang/lib/Sema/SemaExprCXX.cpp +++ b/clang/lib/Sema/SemaExprCXX.cpp @@ -3114,15 +3114,21 @@ CXXMemberCallExpr *Sema::BuildCXXMemberCallExpr(Expr *Exp,    return CE;  } -ExprResult Sema::ActOnNoexceptExpr(SourceLocation KeyLoc, SourceLocation LParen, -                                   Expr *Operand, SourceLocation RParen) { +ExprResult Sema::BuildCXXNoexceptExpr(SourceLocation KeyLoc, Expr *Operand, +                                      SourceLocation RParen) {    // C++ [expr.unary.noexcept]p1:    //   The noexcept operator determines whether the evaluation of its operand,    //   which is an unevaluated operand, can throw an exception.    ExprEvalContexts.back().Context = Unevaluated; -//return Owned(new (Context) CXXNoexceptExpr(KeyLoc, LParen, Operand, RParen)); -  return ExprError(); +  return Owned(new (Context) CXXNoexceptExpr(Context.BoolTy, Operand, +                                             Operand->CanThrow(Context), +                                             KeyLoc, RParen)); +} + +ExprResult Sema::ActOnNoexceptExpr(SourceLocation KeyLoc, SourceLocation, +                                   Expr *Operand, SourceLocation RParen) { +  return BuildCXXNoexceptExpr(KeyLoc, Operand, RParen);  }  ExprResult Sema::ActOnFinishFullExpr(Expr *FullExpr) { | 

