[cfe-commits] r61180 - in /cfe/trunk: lib/Parse/ParseDeclCXX.cpp test/Parser/cxx-class.cpp
Chris Lattner
sabre at nondot.org
Wed Dec 17 17:12:02 PST 2008
Author: lattner
Date: Wed Dec 17 19:12:00 2008
New Revision: 61180
URL: http://llvm.org/viewvc/llvm-project?rev=61180&view=rev
Log:
implement PR3177 - "__extension__ union" not supported in C++ mode
Modified:
cfe/trunk/lib/Parse/ParseDeclCXX.cpp
cfe/trunk/test/Parser/cxx-class.cpp
Modified: cfe/trunk/lib/Parse/ParseDeclCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDeclCXX.cpp?rev=61180&r1=61179&r2=61180&view=diff
==============================================================================
--- cfe/trunk/lib/Parse/ParseDeclCXX.cpp (original)
+++ cfe/trunk/lib/Parse/ParseDeclCXX.cpp Wed Dec 17 19:12:00 2008
@@ -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 @@
/// 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 @@
/// '=' 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.
Modified: cfe/trunk/test/Parser/cxx-class.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/cxx-class.cpp?rev=61180&r1=61179&r2=61180&view=diff
==============================================================================
--- cfe/trunk/test/Parser/cxx-class.cpp (original)
+++ cfe/trunk/test/Parser/cxx-class.cpp Wed Dec 17 19:12:00 2008
@@ -27,3 +27,12 @@
{
struct local {};
}
+
+// PR3177
+typedef union {
+ __extension__ union {
+ int a;
+ float b;
+ } y;
+} bug3177;
+
More information about the cfe-commits
mailing list