From eb82a420c8898ea71e13d82e6646d33f49fc574c Mon Sep 17 00:00:00 2001 From: Eli Friedman <eli.friedman@gmail.com> Date: Thu, 20 Jun 2013 01:35:13 +0000 Subject: [PATCH] Add a few more tests for casts. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@184392 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/SemaCXX/cast-conversion.cpp | 8 ++++++++ test/SemaCXX/member-pointer-ms.cpp | 5 +++-- test/SemaCXX/nullptr.cpp | 3 +++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/test/SemaCXX/cast-conversion.cpp b/test/SemaCXX/cast-conversion.cpp index 270f96831bd..76b09997ef1 100644 --- a/test/SemaCXX/cast-conversion.cpp +++ b/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/test/SemaCXX/member-pointer-ms.cpp b/test/SemaCXX/member-pointer-ms.cpp index 7dca1219058..aee8e2eca77 100644 --- a/test/SemaCXX/member-pointer-ms.cpp +++ b/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/test/SemaCXX/nullptr.cpp b/test/SemaCXX/nullptr.cpp index b49f63b9805..28798a4f8ce 100644 --- a/test/SemaCXX/nullptr.cpp +++ b/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) { } -- GitLab