summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorDmitri Gribenko <gribozavr@gmail.com>2013-02-12 17:27:41 +0000
committerDmitri Gribenko <gribozavr@gmail.com>2013-02-12 17:27:41 +0000
commitd1c91f1763c0349e42f5197eee0d0e2b2c8de5f0 (patch)
tree86e21a1cea2c6239b8c5e3e710e7e4b117e43203 /clang/test
parentc5c9713fcf92c7e0cee76f57fba66e2cf9a66f3a (diff)
downloadbcm5719-llvm-d1c91f1763c0349e42f5197eee0d0e2b2c8de5f0.tar.gz
bcm5719-llvm-d1c91f1763c0349e42f5197eee0d0e2b2c8de5f0.zip
Accept over-qualified constructor in MSVC emulation mode
MSVC accepts this: class A { A::A(); }; Clang accepts regular member functions with extra qualification as an MS extension, but not constructors. This changes the parser to defer rejecting qualified constructors so that the same Sema logic can apply to constructors as regular member functions. This also improves the error message when MS extensions are disabled (in my opinion). Before it was: /Users/jason/Desktop/test.cpp:2:8: error: expected member name or ';' after declaration specifiers A::A(); ~~~~ ^ 1 error generated. After: /Users/jason/Desktop/test.cpp:2:6: error: extra qualification on member 'A' A::A(); ~~~^ 1 error generated. Patch by Jason Haslam. llvm-svn: 174980
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/CXX/special/class.ctor/p1.cpp6
-rw-r--r--clang/test/SemaCXX/MicrosoftExtensions.cpp4
2 files changed, 9 insertions, 1 deletions
diff --git a/clang/test/CXX/special/class.ctor/p1.cpp b/clang/test/CXX/special/class.ctor/p1.cpp
index 4d821841e47..23ceebad3b3 100644
--- a/clang/test/CXX/special/class.ctor/p1.cpp
+++ b/clang/test/CXX/special/class.ctor/p1.cpp
@@ -1,5 +1,5 @@
// RUN: %clang_cc1 -fsyntax-only -verify %s
-// expected-no-diagnostics
+
struct X0 {
struct type { };
@@ -41,3 +41,7 @@ template<typename T> X1<T>::X1() { }
template<typename T> (X1<T>::X1)(double) { }
template<typename T> X1<T> X1<T>::f1(int) { return 0; }
template<typename T> X1<T> (X1<T>::f1)(type) { return 0; }
+
+class A {
+ A::A(); // expected-error{{extra qualification on member 'A'}}
+};
diff --git a/clang/test/SemaCXX/MicrosoftExtensions.cpp b/clang/test/SemaCXX/MicrosoftExtensions.cpp
index 6b43ea205af..449e24b03b6 100644
--- a/clang/test/SemaCXX/MicrosoftExtensions.cpp
+++ b/clang/test/SemaCXX/MicrosoftExtensions.cpp
@@ -204,3 +204,7 @@ struct PR11150 {
void f() { int __except = 0; }
void ::f(); // expected-warning{{extra qualification on member 'f'}}
+
+class C {
+ C::C(); // expected-warning{{extra qualification on member 'C'}}
+};
OpenPOWER on IntegriCloud