diff options
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/SemaCXX/address-of.cpp | 8 | ||||
-rw-r--r-- | clang/test/SemaCXX/undefined-internal.cpp | 19 |
2 files changed, 27 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/address-of.cpp b/clang/test/SemaCXX/address-of.cpp index 69fcaff8f1e..677dc8966ba 100644 --- a/clang/test/SemaCXX/address-of.cpp +++ b/clang/test/SemaCXX/address-of.cpp @@ -44,3 +44,11 @@ void PR11066::test() { int (PR11066::*ptr)(int) = & &PR11066::foo; // expected-error{{address expression must be an lvalue or a function designator}} } +namespace test3 { + // emit no error + template<typename T> struct S { + virtual void f() = 0; + }; + template<typename T> void S<T>::f() { T::error; } + void (S<int>::*p)() = &S<int>::f; +} diff --git a/clang/test/SemaCXX/undefined-internal.cpp b/clang/test/SemaCXX/undefined-internal.cpp index 62c6ff96ca9..227e6b4a85e 100644 --- a/clang/test/SemaCXX/undefined-internal.cpp +++ b/clang/test/SemaCXX/undefined-internal.cpp @@ -212,3 +212,22 @@ namespace test9 { x.X::used(); // expected-note {{used here}} } } + +namespace test10 { + namespace { + struct X { + virtual void notused() = 0; + virtual void used() = 0; // expected-warning {{function 'test10::<anonymous namespace>::X::used' has internal linkage but is not defined}} + + void test() { + notused(); + (void)&X::notused; + (this->*&X::notused)(); + X::used(); // expected-note {{used here}} + } + }; + struct Y : X { + using X::notused; + }; + } +} |