Make ActOnExprStmt take a FullExprArg.

llvm-svn: 71989
This commit is contained in:
Anders Carlsson 2009-05-17 21:11:30 +00:00
parent 0e70d84e29
commit 24824e5009
7 changed files with 14 additions and 11 deletions

View File

@ -460,8 +460,8 @@ public:
return StmtEmpty();
}
virtual OwningStmtResult ActOnExprStmt(ExprArg Expr) {
return OwningStmtResult(*this, Expr.release());
virtual OwningStmtResult ActOnExprStmt(FullExprArg Expr) {
return OwningStmtResult(*this, Expr->release());
}
/// ActOnCaseStmt - Note that this handles the GNU 'case 1 ... 4' extension,

View File

@ -594,6 +594,9 @@ bool Expr::isUnusedResultAWarning(SourceLocation &Loc, SourceRange &R1,
// effects (e.g. a placement new with an uninitialized POD).
case CXXDeleteExprClass:
return false;
case CXXExprWithTemporariesClass:
return cast<CXXExprWithTemporaries>(this)
->getSubExpr()->isUnusedResultAWarning(Loc, R1, R2);
}
}

View File

@ -1408,7 +1408,7 @@ Parser::OwningStmtResult Parser::ParseObjCAtStatement(SourceLocation AtLoc) {
}
// Otherwise, eat the semicolon.
ExpectAndConsume(tok::semi, diag::err_expected_semi_after_expr);
return Actions.ActOnExprStmt(move(Res));
return Actions.ActOnExprStmt(Actions.FullExpr(Res));
}
Parser::OwningExprResult Parser::ParseObjCAtExpression(SourceLocation AtLoc) {

View File

@ -121,7 +121,7 @@ Parser::ParseStatementOrDeclaration(bool OnlyStatement) {
}
// Otherwise, eat the semicolon.
ExpectAndConsume(tok::semi, diag::err_expected_semi_after_expr);
return Actions.ActOnExprStmt(move(Expr));
return Actions.ActOnExprStmt(Actions.FullExpr(Expr));
}
case tok::kw_case: // C99 6.8.1: labeled-statement
@ -457,7 +457,7 @@ Parser::OwningStmtResult Parser::ParseCompoundStatementBody(bool isStmtExpr) {
// Eat the semicolon at the end of stmt and convert the expr into a
// statement.
ExpectAndConsume(tok::semi, diag::err_expected_semi_after_expr);
R = Actions.ActOnExprStmt(move(Res));
R = Actions.ActOnExprStmt(Actions.FullExpr(Res));
}
}
@ -929,7 +929,7 @@ Parser::OwningStmtResult Parser::ParseForStatement() {
// Turn the expression into a stmt.
if (!Value.isInvalid())
FirstPart = Actions.ActOnExprStmt(move(Value));
FirstPart = Actions.ActOnExprStmt(Actions.FullExpr(Value));
if (Tok.is(tok::semi)) {
ConsumeToken();

View File

@ -1155,7 +1155,7 @@ public:
//===--------------------------------------------------------------------===//
// Statement Parsing Callbacks: SemaStmt.cpp.
public:
virtual OwningStmtResult ActOnExprStmt(ExprArg Expr);
virtual OwningStmtResult ActOnExprStmt(FullExprArg Expr);
virtual OwningStmtResult ActOnNullStmt(SourceLocation SemiLoc);
virtual OwningStmtResult ActOnCompoundStmt(SourceLocation L, SourceLocation R,

View File

@ -21,8 +21,8 @@
#include "clang/Basic/TargetInfo.h"
using namespace clang;
Sema::OwningStmtResult Sema::ActOnExprStmt(ExprArg expr) {
Expr *E = expr.takeAs<Expr>();
Sema::OwningStmtResult Sema::ActOnExprStmt(FullExprArg expr) {
Expr *E = expr->takeAs<Expr>();
assert(E && "ActOnExprStmt(): missing expression");
// C99 6.8.3p2: The expression in an expression statement is evaluated as a

View File

@ -266,9 +266,9 @@ namespace {
return StmtEmpty();
}
virtual OwningStmtResult ActOnExprStmt(ExprArg Expr) {
virtual OwningStmtResult ActOnExprStmt(FullExprArg Expr) {
llvm::cout << __FUNCTION__ << "\n";
return OwningStmtResult(*this, Expr.release());
return OwningStmtResult(*this, Expr->release());
}
/// ActOnCaseStmt - Note that this handles the GNU 'case 1 ... 4' extension,