diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-08-24 12:17:54 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-08-24 12:17:54 +0000 |
commit | 8b9575f27ed6796d25f0ce22206f55312b87fc12 (patch) | |
tree | aff5fc5551fcd46bacfd952dab1723a0942fa8d9 | |
parent | c8c277a1b33cdde021c29b06af53c36a005bfb23 (diff) | |
download | bcm5719-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.cpp | 11 | ||||
-rw-r--r-- | clang/test/Parser/top-level-semi-cxx0x.cpp | 9 | ||||
-rw-r--r-- | clang/test/SemaCXX/constructor-initializer.cpp | 1 | ||||
-rw-r--r-- | clang/test/SemaCXX/constructor.cpp | 1 |
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() {} + |