summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-08-24 12:17:54 +0000
committerDouglas Gregor <dgregor@apple.com>2009-08-24 12:17:54 +0000
commit8b9575f27ed6796d25f0ce22206f55312b87fc12 (patch)
treeaff5fc5551fcd46bacfd952dab1723a0942fa8d9
parentc8c277a1b33cdde021c29b06af53c36a005bfb23 (diff)
downloadbcm5719-llvm-8b9575f27ed6796d25f0ce22206f55312b87fc12.tar.gz
bcm5719-llvm-8b9575f27ed6796d25f0ce22206f55312b87fc12.zip
Top-level semicolons are allowed in C++0x. Fixes PR4755.
llvm-svn: 79912
-rw-r--r--clang/lib/Parse/Parser.cpp11
-rw-r--r--clang/test/Parser/top-level-semi-cxx0x.cpp9
-rw-r--r--clang/test/SemaCXX/constructor-initializer.cpp1
-rw-r--r--clang/test/SemaCXX/constructor.cpp1
4 files changed, 18 insertions, 4 deletions
diff --git a/clang/lib/Parse/Parser.cpp b/clang/lib/Parse/Parser.cpp
index 1a082db4346..798af1840a6 100644
--- a/clang/lib/Parse/Parser.cpp
+++ b/clang/lib/Parse/Parser.cpp
@@ -375,7 +375,7 @@ void Parser::ParseTranslationUnit() {
/// external-declaration: [C99 6.9], declaration: [C++ dcl.dcl]
/// function-definition
/// declaration
-/// [EXT] ';'
+/// [C++0x] empty-declaration
/// [GNU] asm-definition
/// [GNU] __extension__ external-declaration
/// [OBJC] objc-class-definition
@@ -388,12 +388,17 @@ void Parser::ParseTranslationUnit() {
/// [GNU] asm-definition:
/// simple-asm-expr ';'
///
+/// [C++0x] empty-declaration:
+/// ';'
+///
Parser::DeclGroupPtrTy Parser::ParseExternalDeclaration() {
DeclPtrTy SingleDecl;
switch (Tok.getKind()) {
case tok::semi:
- Diag(Tok, diag::ext_top_level_semi)
- << CodeModificationHint::CreateRemoval(SourceRange(Tok.getLocation()));
+ if (!getLang().CPlusPlus0x)
+ Diag(Tok, diag::ext_top_level_semi)
+ << CodeModificationHint::CreateRemoval(SourceRange(Tok.getLocation()));
+
ConsumeToken();
// TODO: Invoke action for top-level semicolon.
return DeclGroupPtrTy();
diff --git a/clang/test/Parser/top-level-semi-cxx0x.cpp b/clang/test/Parser/top-level-semi-cxx0x.cpp
new file mode 100644
index 00000000000..4a6c0597d05
--- /dev/null
+++ b/clang/test/Parser/top-level-semi-cxx0x.cpp
@@ -0,0 +1,9 @@
+// RUN: clang-cc -fsyntax-only -pedantic -std=c++0x -verify %s
+
+void foo();
+
+void bar() { };
+
+void wibble();
+
+;
diff --git a/clang/test/SemaCXX/constructor-initializer.cpp b/clang/test/SemaCXX/constructor-initializer.cpp
index 0bcec732646..1a7787ee0ea 100644
--- a/clang/test/SemaCXX/constructor-initializer.cpp
+++ b/clang/test/SemaCXX/constructor-initializer.cpp
@@ -122,4 +122,3 @@ struct Q {
float *pf;
};
-
diff --git a/clang/test/SemaCXX/constructor.cpp b/clang/test/SemaCXX/constructor.cpp
index ec28e7e0455..5ce595cdcec 100644
--- a/clang/test/SemaCXX/constructor.cpp
+++ b/clang/test/SemaCXX/constructor.cpp
@@ -83,3 +83,4 @@ void A::S::f2() {}
A::S::operator int() { return 1; }
A::S::~S() {}
+
OpenPOWER on IntegriCloud