diff options
-rw-r--r-- | clang/test/SemaCXX/cast-conversion.cpp | 8 | ||||
-rw-r--r-- | clang/test/SemaCXX/member-pointer-ms.cpp | 5 | ||||
-rw-r--r-- | clang/test/SemaCXX/nullptr.cpp | 3 |
3 files changed, 14 insertions, 2 deletions
diff --git a/clang/test/SemaCXX/cast-conversion.cpp b/clang/test/SemaCXX/cast-conversion.cpp index 270f96831bd..76b09997ef1 100644 --- a/clang/test/SemaCXX/cast-conversion.cpp +++ b/clang/test/SemaCXX/cast-conversion.cpp @@ -65,3 +65,11 @@ void *intToPointer4() { void *intToPointer5(long l) { return (void*)l; } + +struct AmbiguousCast { + operator int(); // expected-note {{candidate function}} + operator unsigned int(); // expected-note {{candidate function}} +}; +long long AmbiguousCastFunc(AmbiguousCast& a) { + return static_cast<long long>(a); // expected-error {{ambiguous conversion for static_cast from 'AmbiguousCast' to 'long long'}} +} diff --git a/clang/test/SemaCXX/member-pointer-ms.cpp b/clang/test/SemaCXX/member-pointer-ms.cpp index 7dca1219058..aee8e2eca77 100644 --- a/clang/test/SemaCXX/member-pointer-ms.cpp +++ b/clang/test/SemaCXX/member-pointer-ms.cpp @@ -5,8 +5,6 @@ // 2012, which supports C++11 and static_assert. It should pass for both 64-bit // and 32-bit x86. // -// expected-no-diagnostics - // Test the size of various member pointer combinations: // - complete and incomplete // - single, multiple, and virtual inheritance (and unspecified for incomplete) @@ -165,3 +163,6 @@ struct MemPtrInTemplate { int T::*data_ptr; void (T::*func_ptr)(); }; + +int Virtual::*CastTest = reinterpret_cast<int Virtual::*>(&AA::x); + // expected-error@-1 {{cannot reinterpret_cast from member pointer type}} diff --git a/clang/test/SemaCXX/nullptr.cpp b/clang/test/SemaCXX/nullptr.cpp index b49f63b9805..28798a4f8ce 100644 --- a/clang/test/SemaCXX/nullptr.cpp +++ b/clang/test/SemaCXX/nullptr.cpp @@ -64,6 +64,9 @@ nullptr_t f(nullptr_t null) (void)reinterpret_cast<uintptr_t>(nullptr); (void)reinterpret_cast<uintptr_t>(*pn); + // You can't reinterpret_cast nullptr to any integer + (void)reinterpret_cast<char>(nullptr); // expected-error {{cast from pointer to smaller type 'char' loses information}} + int *ip = *pn; if (*pn) { } |