diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2013-06-20 01:35:13 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2013-06-20 01:35:13 +0000 |
commit | 61a511ff5bb89a5219733c26301c12695da2d975 (patch) | |
tree | 78f6a95e930577c9cd296f286f1c17bf14e383d5 | |
parent | 8e5e97690dee0323d76f90e11f364742c58e7be5 (diff) | |
download | bcm5719-llvm-61a511ff5bb89a5219733c26301c12695da2d975.tar.gz bcm5719-llvm-61a511ff5bb89a5219733c26301c12695da2d975.zip |
Add a few more tests for casts.
llvm-svn: 184392
-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) { } |