diff options
author | Hans Wennborg <hans@hanshq.net> | 2013-06-06 09:16:36 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2013-06-06 09:16:36 +0000 |
commit | 15439bcf79decf81f94bfaf2e4b39167bf954b18 (patch) | |
tree | 4af47a5933186eaf32c505ef5599039c8507666b /clang/test | |
parent | 6dcecb6b33ee04a93ef4f94e8597f9b8679d1c5d (diff) | |
download | bcm5719-llvm-15439bcf79decf81f94bfaf2e4b39167bf954b18.tar.gz bcm5719-llvm-15439bcf79decf81f94bfaf2e4b39167bf954b18.zip |
Disallow reinterpret_cast from pointer to bool on Windows
This became allowed by accident in r131201, but triggers an assert.
That patch added an exception to allow conversion from pointers to
narrow integral types for MSVC compatibility. However, a pointer can
already be converted to bool in a civilized manner; allowing conversion
via reinterpret_cast is a bad idea.
Fixes PR16222.
llvm-svn: 183394
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/Sema/MicrosoftExtensions.c | 3 | ||||
-rw-r--r-- | clang/test/SemaCXX/MicrosoftExtensions.cpp | 8 |
2 files changed, 10 insertions, 1 deletions
diff --git a/clang/test/Sema/MicrosoftExtensions.c b/clang/test/Sema/MicrosoftExtensions.c index a66d9a9eb0f..5215e72b1ba 100644 --- a/clang/test/Sema/MicrosoftExtensions.c +++ b/clang/test/Sema/MicrosoftExtensions.c @@ -76,6 +76,9 @@ void pointer_to_integral_type_conv(char* ptr) { short sh = (short)ptr; ch = (char)ptr; sh = (short)ptr; + + // This is valid ISO C. + _Bool b = (_Bool)ptr; } diff --git a/clang/test/SemaCXX/MicrosoftExtensions.cpp b/clang/test/SemaCXX/MicrosoftExtensions.cpp index 93a6d302ef3..c0e7a5ad4c7 100644 --- a/clang/test/SemaCXX/MicrosoftExtensions.cpp +++ b/clang/test/SemaCXX/MicrosoftExtensions.cpp @@ -167,8 +167,14 @@ void pointer_to_integral_type_conv(char* ptr) { short sh = (short)ptr; ch = (char)ptr; sh = (short)ptr; -} + // These are valid C++. + bool b = (bool)ptr; + b = static_cast<bool>(ptr); + + // This is bad. + b = reinterpret_cast<bool>(ptr); // expected-error {{cast from pointer to smaller type 'bool' loses information}} +} namespace friend_as_a_forward_decl { |