]> granicus.if.org Git - clang/commitdiff
Make ActOnExprStmt take a FullExprArg.
authorAnders Carlsson <andersca@mac.com>
Sun, 17 May 2009 21:11:30 +0000 (21:11 +0000)
committerAnders Carlsson <andersca@mac.com>
Sun, 17 May 2009 21:11:30 +0000 (21:11 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71989 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Parse/Action.h
lib/AST/Expr.cpp
lib/Parse/ParseObjc.cpp
lib/Parse/ParseStmt.cpp
lib/Sema/Sema.h
lib/Sema/SemaStmt.cpp
tools/clang-cc/PrintParserCallbacks.cpp

index 6d4e2b753dd1bb3ff1f03787406646b7c2896766..cd1945704fac3a1cafa1c2bb895cd77928459fac 100644 (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,
index 3133a8f42c25c3870a2269575408a5e5be4cf981..19ab835707beb091e8caf2ea7f482f68b440b65d 100644 (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);
   }
 }
 
index 6c42f429ccdb7296f9c8590892f1f532b00e0a12..e1d0bb6e13431cae63c068cf0bab144023d958a5 100644 (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) {
index 16b7a9f07f258b7dd73cfb697b63d26f7d3dea45..cf4e2f44bc213488f19f5c71976487728d435423 100644 (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();
index eb723bb080e43fbcee0a17f52449fc82248a2506..9c2774549801d22943b48d7cb8ab0ed96a118582 100644 (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,
index 5c04c2491f672764ddd6b8cdc60187ca25b41745..155b51048a7c7c5feddb3dce5b538d3a27d6b6e7 100644 (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
index 4ee48f072ae093612987150186b75bb5cd8e0f48..73a653d7d88038ed2a13dc784d06fe95c521ec85 100644 (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,