diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2010-06-28 00:30:51 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2010-06-28 00:30:51 +0000 |
commit | b6f991787b66ecb0d14fa1016cf4e5b693881787 (patch) | |
tree | 653c92a6b282b05c93d1a49b3319606cbcd5628a /clang/test/SemaCXX/new-delete.cpp | |
parent | 81170d23ded2fbcc96279426a26b96fa1d6f1841 (diff) | |
download | bcm5719-llvm-b6f991787b66ecb0d14fa1016cf4e5b693881787.tar.gz bcm5719-llvm-b6f991787b66ecb0d14fa1016cf4e5b693881787.zip |
Suppress diagnosing access violations while looking up deallocation functions
much as we already do for allocation function lookup. Explicitly check access
for the function we actually select in one case that was previously missing,
but being caught behind the blanket diagnostics for all overload candidates.
This fixs PR7436.
llvm-svn: 106986
Diffstat (limited to 'clang/test/SemaCXX/new-delete.cpp')
-rw-r--r-- | clang/test/SemaCXX/new-delete.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/new-delete.cpp b/clang/test/SemaCXX/new-delete.cpp index 3f1da0292b4..cd1da4b5933 100644 --- a/clang/test/SemaCXX/new-delete.cpp +++ b/clang/test/SemaCXX/new-delete.cpp @@ -263,3 +263,27 @@ template void h<unsigned>(unsigned); template void h<unsigned[10]>(unsigned); // expected-note {{in instantiation of function template specialization 'Test1::h<unsigned int [10]>' requested here}} } + +// Don't diagnose access for overload candidates that aren't selected. +namespace PR7436 { +struct S1 { + void* operator new(size_t); + void operator delete(void* p); + +private: + void* operator new(size_t, void*); // expected-note {{declared private here}} + void operator delete(void*, void*); +}; +class S2 { + void* operator new(size_t); // expected-note {{declared private here}} + void operator delete(void* p); // expected-note {{declared private here}} +}; + +void test(S1* s1, S2* s2) { + delete s1; + delete s2; // expected-error {{is a private member}} + (void)new S1(); + (void)new (0L) S1(); // expected-error {{is a private member}} + (void)new S2(); // expected-error {{is a private member}} +} +} |