summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaCXX/cast-conversion.cpp
diff options
context:
space:
mode:
authorDavid Blaikie <dblaikie@gmail.com>2012-10-16 18:53:14 +0000
committerDavid Blaikie <dblaikie@gmail.com>2012-10-16 18:53:14 +0000
commit282ad876bd89a7d7ce698ab4128dc8f0a18105cd (patch)
tree5dad6bf2a61d47ad89b5586d5f6b67bb3e02efcd /clang/test/SemaCXX/cast-conversion.cpp
parent794baf6fb7ac22fb4e4954f33f16886a5ab2a540 (diff)
downloadbcm5719-llvm-282ad876bd89a7d7ce698ab4128dc8f0a18105cd.tar.gz
bcm5719-llvm-282ad876bd89a7d7ce698ab4128dc8f0a18105cd.zip
Implement GCC's -Wint-to-pointer-cast.
This implementation doesn't warn on anything that GCC doesn't warn on with the exception of templates specializations (GCC doesn't warn, Clang does). The specific skipped cases (boolean, constant expressions, enums) are open for debate/adjustment if anyone wants to demonstrate that GCC is being overly conservative here. The only really obvious false positive I found was in the Clang regression suite's MPI test - apparently MPI uses specific flag values in pointer constants. (eg: #define FOO (void*)~0) llvm-svn: 166039
Diffstat (limited to 'clang/test/SemaCXX/cast-conversion.cpp')
-rw-r--r--clang/test/SemaCXX/cast-conversion.cpp22
1 files changed, 21 insertions, 1 deletions
diff --git a/clang/test/SemaCXX/cast-conversion.cpp b/clang/test/SemaCXX/cast-conversion.cpp
index dd2bc98e02c..270f96831bd 100644
--- a/clang/test/SemaCXX/cast-conversion.cpp
+++ b/clang/test/SemaCXX/cast-conversion.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++11
+// RUN: %clang_cc1 -fsyntax-only -triple x86_64-unknown-unknown -verify %s -std=c++11
struct R {
R(int);
@@ -45,3 +45,23 @@ protected:
static_cast<float*>(f0<0>()); // expected-error{{ambiguous}}
}
};
+
+void *intToPointer1(short s) {
+ return (void*)s; // expected-warning{{cast to 'void *' from smaller integer type 'short'}}
+}
+
+void *intToPointer2(short s) {
+ return reinterpret_cast<void*>(s);
+}
+
+void *intToPointer3(bool b) {
+ return (void*)b;
+}
+
+void *intToPointer4() {
+ return (void*)(3 + 7);
+}
+
+void *intToPointer5(long l) {
+ return (void*)l;
+}
OpenPOWER on IntegriCloud