From 39146d6497ad5e7ca8ef639221e7b3e15d07c888 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 20 Oct 2008 06:51:33 +0000 Subject: [PATCH] simplify some other code for __extension__ processing. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57807 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Parse/ParseStmt.cpp | 12 +++++------- lib/Parse/Parser.cpp | 1 + 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/lib/Parse/ParseStmt.cpp b/lib/Parse/ParseStmt.cpp index 228bc4886c..f5cdfffba5 100644 --- a/lib/Parse/ParseStmt.cpp +++ b/lib/Parse/ParseStmt.cpp @@ -13,6 +13,7 @@ //===----------------------------------------------------------------------===// #include "clang/Parse/Parser.h" +#include "ExtensionRAIIObject.h" #include "clang/Basic/Diagnostic.h" #include "clang/Basic/SourceManager.h" #include "clang/Parse/DeclSpec.h" @@ -364,9 +365,8 @@ Parser::StmtResult Parser::ParseCompoundStatementBody(bool isStmtExpr) { ConsumeToken(); // __extension__ silences extension warnings in the subexpression. - bool SavedExtWarn = Diags.getWarnOnExtensions(); - Diags.setWarnOnExtensions(false); - + ExtensionRAIIObject O(Diags); // Use RAII to do this. + // If this is the start of a declaration, parse it as such. if (isDeclarationStatement()) { // FIXME: Save the __extension__ on the decl as a node somehow. @@ -374,13 +374,10 @@ Parser::StmtResult Parser::ParseCompoundStatementBody(bool isStmtExpr) { DeclTy *Res = ParseDeclaration(Declarator::BlockContext); // FIXME: Pass in the right location for the end of the declstmt. R = Actions.ActOnDeclStmt(Res, DeclStart, DeclStart); - - Diags.setWarnOnExtensions(SavedExtWarn); } else { // Otherwise this was a unary __extension__ marker. Parse the // subexpression and add the __extension__ unary op. ExprResult Res = ParseCastExpression(false); - Diags.setWarnOnExtensions(SavedExtWarn); if (Res.isInvalid) { SkipUntil(tok::semi); @@ -392,7 +389,8 @@ Parser::StmtResult Parser::ParseCompoundStatementBody(bool isStmtExpr) { if (Res.isInvalid) continue; - // Eat the semicolon at the end of stmt and convert the expr into a stmt. + // 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(Res.Val); } diff --git a/lib/Parse/Parser.cpp b/lib/Parse/Parser.cpp index e30e4f4fa8..a347bf162a 100644 --- a/lib/Parse/Parser.cpp +++ b/lib/Parse/Parser.cpp @@ -344,6 +344,7 @@ Parser::DeclTy *Parser::ParseExternalDeclaration() { case tok::kw___extension__: { // __extension__ silences extension warnings in the subexpression. ExtensionRAIIObject O(Diags); // Use RAII to do this. + ConsumeToken(); return ParseExternalDeclaration(); } case tok::kw_asm: { -- 2.50.1