summaryrefslogtreecommitdiffstats
path: root/clang/lib/Parse/ParseDeclCXX.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-12-18 01:12:00 +0000
committerChris Lattner <sabre@nondot.org>2008-12-18 01:12:00 +0000
commitd19c1c0d6d0c91ef729475392835d0982955d14f (patch)
tree06fd8b299961d495b2342b9c5922b6aa263e444b /clang/lib/Parse/ParseDeclCXX.cpp
parent49c44fa0144aaf6eb12a6f84b01e6ef813515667 (diff)
downloadbcm5719-llvm-d19c1c0d6d0c91ef729475392835d0982955d14f.tar.gz
bcm5719-llvm-d19c1c0d6d0c91ef729475392835d0982955d14f.zip
implement PR3177 - "__extension__ union" not supported in C++ mode
llvm-svn: 61180
Diffstat (limited to 'clang/lib/Parse/ParseDeclCXX.cpp')
-rw-r--r--clang/lib/Parse/ParseDeclCXX.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index ec2a37a8524..eaada1c26cb 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -16,6 +16,7 @@
#include "clang/Parse/DeclSpec.h"
#include "clang/Parse/Scope.h"
#include "AstGuard.h"
+#include "ExtensionRAIIObject.h"
using namespace clang;
/// ParseNamespace - We know that the current token is a namespace keyword. This
@@ -408,6 +409,7 @@ AccessSpecifier Parser::getAccessSpecifierIfPresent() const
/// using-declaration [TODO]
/// [C++0x] static_assert-declaration [TODO]
/// template-declaration [TODO]
+/// [GNU] '__extension__' member-declaration
///
/// member-declarator-list:
/// member-declarator
@@ -425,6 +427,14 @@ AccessSpecifier Parser::getAccessSpecifierIfPresent() const
/// '=' constant-expression
///
Parser::DeclTy *Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS) {
+ // Handle: member-declaration ::= '__extension__' member-declaration
+ if (Tok.is(tok::kw___extension__)) {
+ // __extension__ silences extension warnings in the subexpression.
+ ExtensionRAIIObject O(Diags); // Use RAII to do this.
+ ConsumeToken();
+ return ParseCXXClassMemberDeclaration(AS);
+ }
+
SourceLocation DSStart = Tok.getLocation();
// decl-specifier-seq:
// Parse the common declaration-specifiers piece.
OpenPOWER on IntegriCloud