aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/validation
diff options
Diffstat (limited to 'validation')
-rw-r--r--validation/backend/pointer-sub.c2
-rw-r--r--validation/cast-kinds-check.c2
-rw-r--r--validation/cast-weirds.c49
-rw-r--r--validation/linear/cast-kinds.c10
-rw-r--r--validation/optim/kill-casts.c1
5 files changed, 58 insertions, 6 deletions
diff --git a/validation/backend/pointer-sub.c b/validation/backend/pointer-sub.c
index 3cb8f5a9..5c99f4fa 100644
--- a/validation/backend/pointer-sub.c
+++ b/validation/backend/pointer-sub.c
@@ -13,5 +13,5 @@ long subvx3(void *p, int a) { return (p - ((void*)0)) ^ 3; }
/*
* check-name: pointer-sub
- * check-command: sparsec -Wno-decl -c $file -o tmp.o
+ * check-command: sparsec -Wno-int-to-pointer-cast -Wno-decl -c $file -o tmp.o
*/
diff --git a/validation/cast-kinds-check.c b/validation/cast-kinds-check.c
index 1f10e0ec..736ab391 100644
--- a/validation/cast-kinds-check.c
+++ b/validation/cast-kinds-check.c
@@ -20,5 +20,7 @@ linear/cast-kinds.c:29:51: warning: cast wasn't removed
linear/cast-kinds.c:34:52: warning: cast wasn't removed
linear/cast-kinds.c:35:54: warning: cast wasn't removed
linear/cast-kinds.c:36:52: warning: cast wasn't removed
+linear/cast-kinds.c:37:42: warning: non size-preserving integer to pointer cast
+linear/cast-kinds.c:38:44: warning: non size-preserving integer to pointer cast
* check-error-end
*/
diff --git a/validation/cast-weirds.c b/validation/cast-weirds.c
new file mode 100644
index 00000000..136137b4
--- /dev/null
+++ b/validation/cast-weirds.c
@@ -0,0 +1,49 @@
+typedef unsigned int uint;
+typedef unsigned long ulong;
+
+static int * int_2_iptr(int a) { return (int *)a; }
+static int * uint_2_iptr(uint a) { return (int *)a; }
+
+static void * int_2_vptr(int a) { return (void *)a; }
+static void * uint_2_vptr(uint a) { return (void *)a; }
+
+/*
+ * check-name: cast-weirds
+ * check-command: test-linearize -m64 $file
+ *
+ * check-error-start
+cast-weirds.c:4:42: warning: non size-preserving integer to pointer cast
+cast-weirds.c:5:44: warning: non size-preserving integer to pointer cast
+ * check-error-end
+ *
+ * check-output-start
+int_2_iptr:
+.L0:
+ <entry-point>
+ utptr.64 %r2 <- (32) %arg1
+ ret.64 %r2
+
+
+uint_2_iptr:
+.L2:
+ <entry-point>
+ utptr.64 %r5 <- (32) %arg1
+ ret.64 %r5
+
+
+int_2_vptr:
+.L4:
+ <entry-point>
+ scast.64 %r8 <- (32) %arg1
+ ret.64 %r8
+
+
+uint_2_vptr:
+.L6:
+ <entry-point>
+ cast.64 %r11 <- (32) %arg1
+ ret.64 %r11
+
+
+ * check-output-end
+ */
diff --git a/validation/linear/cast-kinds.c b/validation/linear/cast-kinds.c
index d07a9419..4449d0af 100644
--- a/validation/linear/cast-kinds.c
+++ b/validation/linear/cast-kinds.c
@@ -55,7 +55,7 @@ static double double_2_double(double a) { return a; }
/*
* check-name: cast-kinds
- * check-command: test-linearize -m64 $file
+ * check-command: test-linearize -Wno-int-to-pointer-cast -m64 $file
*
* check-output-start
uint_2_int:
@@ -288,28 +288,28 @@ iptr_2_vptr:
int_2_iptr:
.L66:
<entry-point>
- ptrcast.64 %r101 <- (32) %arg1
+ utptr.64 %r101 <- (32) %arg1
ret.64 %r101
uint_2_iptr:
.L68:
<entry-point>
- ptrcast.64 %r104 <- (32) %arg1
+ utptr.64 %r104 <- (32) %arg1
ret.64 %r104
long_2_iptr:
.L70:
<entry-point>
- ptrcast.64 %r107 <- (64) %arg1
+ utptr.64 %r107 <- (64) %arg1
ret.64 %r107
ulong_2_iptr:
.L72:
<entry-point>
- ptrcast.64 %r110 <- (64) %arg1
+ utptr.64 %r110 <- (64) %arg1
ret.64 %r110
diff --git a/validation/optim/kill-casts.c b/validation/optim/kill-casts.c
index b79335ab..c375f5fb 100644
--- a/validation/optim/kill-casts.c
+++ b/validation/optim/kill-casts.c
@@ -20,4 +20,5 @@ void foo(struct s *x)
* check-output-ignore
* check-output-excludes: cast\\.
* check-output-excludes: fcvt[us]\\.
+ * check-output-excludes: utptr\\.
*/