diff options
| author | Roman Divacky <rdivacky@FreeBSD.org> | 2009-11-18 14:59:57 +0000 |
|---|---|---|
| committer | Roman Divacky <rdivacky@FreeBSD.org> | 2009-11-18 14:59:57 +0000 |
| commit | b3d5a323a5ca92ea73443499cee2f15db1ff0fb3 (patch) | |
| tree | 60a1694bec5a44d15456acc880cb2f91619f66aa /test/SemaCXX/new-delete.cpp | |
| parent | 8f57cb0305232cb53fff00ef151ca716766f3437 (diff) | |
Notes
Diffstat (limited to 'test/SemaCXX/new-delete.cpp')
| -rw-r--r-- | test/SemaCXX/new-delete.cpp | 57 |
1 files changed, 55 insertions, 2 deletions
diff --git a/test/SemaCXX/new-delete.cpp b/test/SemaCXX/new-delete.cpp index 6f3e9effe538..ededfc0900de 100644 --- a/test/SemaCXX/new-delete.cpp +++ b/test/SemaCXX/new-delete.cpp @@ -119,13 +119,13 @@ void test_delete_conv(X0 x0, X1 x1, X2 x2) { // PR4782 class X3 { public: - static void operator delete(void * mem, unsigned long size); + static void operator delete(void * mem, size_t size); }; class X4 { public: static void release(X3 *x); - static void operator delete(void * mem, unsigned long size); + static void operator delete(void * mem, size_t size); }; @@ -137,3 +137,56 @@ class X5 { public: void Destroy() const { delete this; } }; + +class Base { +public: + static int operator new(signed char) throw(); // expected-error {{'operator new' takes type size_t}} \ + // expected-error {{operator new' must return type 'void *'}} + static int operator new[] (signed char) throw(); // expected-error {{'operator new[]' takes type size_t}} \ + // expected-error {{operator new[]' must return type 'void *'}} +}; + +class Tier {}; +class Comp : public Tier {}; + +class Thai : public Base { +public: + Thai(const Tier *adoptDictionary); +}; + +void loadEngineFor() { + const Comp *dict; + new Thai(dict); +} + +template <class T> struct TBase { + void* operator new(T size, int); // expected-error {{'operator new' takes type size_t}} +}; + +TBase<int> t1; // expected-note {{in instantiation of template class 'struct TBase<int>' requested here}} + +class X6 { +public: + static void operator delete(void*, int); // expected-note {{member found by ambiguous name lookup}} +}; + +class X7 { +public: + static void operator delete(void*, int); // expected-note {{member found by ambiguous name lookup}} +}; + +class X8 : public X6, public X7 { +}; + +void f(X8 *x8) { + delete x8; // expected-error {{member 'operator delete' found in multiple base classes of different types}} +} + +class X9 { + static void operator delete(void*, int); // expected-note {{'operator delete' declared here}} + static void operator delete(void*, float); // expected-note {{'operator delete' declared here}} +}; + +void f(X9 *x9) { + delete x9; // expected-error {{no suitable member 'operator delete' in 'X9'}} +} |
