forked from OSchip/llvm-project
Parse the noexcept operator and stub out sema.
llvm-svn: 113622
This commit is contained in:
parent
ce354af895
commit
22e3a93586
|
@ -278,6 +278,7 @@ KEYWORD(char16_t , KEYCXX0X)
|
|||
KEYWORD(char32_t , KEYCXX0X)
|
||||
KEYWORD(constexpr , KEYCXX0X)
|
||||
KEYWORD(decltype , KEYCXX0X)
|
||||
KEYWORD(noexcept , KEYCXX0X)
|
||||
KEYWORD(nullptr , KEYCXX0X)
|
||||
KEYWORD(static_assert , KEYCXX0X)
|
||||
KEYWORD(thread_local , KEYCXX0X)
|
||||
|
|
|
@ -2249,6 +2249,9 @@ public:
|
|||
SourceLocation StmtLoc,
|
||||
bool ConvertToBoolean);
|
||||
|
||||
ExprResult ActOnNoexceptExpr(SourceLocation KeyLoc, SourceLocation LParen,
|
||||
Expr *Operand, SourceLocation RParen);
|
||||
|
||||
/// ActOnUnaryTypeTrait - Parsed one of the unary type trait support
|
||||
/// pseudo-functions.
|
||||
ExprResult ActOnUnaryTypeTrait(UnaryTypeTrait OTT,
|
||||
|
|
|
@ -457,6 +457,7 @@ ExprResult Parser::ParseCastExpression(bool isUnaryExpression,
|
|||
/// [GNU] '&&' identifier
|
||||
/// [C++] new-expression
|
||||
/// [C++] delete-expression
|
||||
/// [C++0x] 'noexcept' '(' expression ')'
|
||||
///
|
||||
/// unary-operator: one of
|
||||
/// '&' '*' '+' '-' '~' '!'
|
||||
|
@ -546,9 +547,9 @@ ExprResult Parser::ParseCastExpression(bool isUnaryExpression,
|
|||
/// '__is_base_of' [TODO]
|
||||
///
|
||||
ExprResult Parser::ParseCastExpression(bool isUnaryExpression,
|
||||
bool isAddressOfOperand,
|
||||
bool &NotCastExpr,
|
||||
ParsedType TypeOfCast) {
|
||||
bool isAddressOfOperand,
|
||||
bool &NotCastExpr,
|
||||
ParsedType TypeOfCast) {
|
||||
ExprResult Res;
|
||||
tok::TokenKind SavedKind = Tok.getKind();
|
||||
NotCastExpr = false;
|
||||
|
@ -891,6 +892,19 @@ ExprResult Parser::ParseCastExpression(bool isUnaryExpression,
|
|||
case tok::kw_delete: // [C++] delete-expression
|
||||
return ParseCXXDeleteExpression(false, Tok.getLocation());
|
||||
|
||||
case tok::kw_noexcept: { // [C++0x] 'noexcept' '(' expression ')'
|
||||
SourceLocation KeyLoc = ConsumeToken();
|
||||
SourceLocation LParen = Tok.getLocation();
|
||||
if (ExpectAndConsume(tok::l_paren,
|
||||
diag::err_expected_lparen_after, "noexcept"))
|
||||
return ExprError();
|
||||
ExprResult Result = ParseExpression();
|
||||
SourceLocation RParen = MatchRHSPunctuation(tok::r_paren, LParen);
|
||||
if (!Result.isInvalid())
|
||||
Result = Actions.ActOnNoexceptExpr(KeyLoc, LParen, Result.take(), RParen);
|
||||
return move(Result);
|
||||
}
|
||||
|
||||
case tok::kw___is_pod: // [GNU] unary-type-trait
|
||||
case tok::kw___is_class:
|
||||
case tok::kw___is_enum:
|
||||
|
|
|
@ -3114,6 +3114,17 @@ CXXMemberCallExpr *Sema::BuildCXXMemberCallExpr(Expr *Exp,
|
|||
return CE;
|
||||
}
|
||||
|
||||
ExprResult Sema::ActOnNoexceptExpr(SourceLocation KeyLoc, SourceLocation LParen,
|
||||
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();
|
||||
}
|
||||
|
||||
ExprResult Sema::ActOnFinishFullExpr(Expr *FullExpr) {
|
||||
if (!FullExpr) return ExprError();
|
||||
return MaybeCreateCXXExprWithTemporaries(FullExpr);
|
||||
|
|
Loading…
Reference in New Issue