diff options
Diffstat (limited to 'validation')
| -rw-r--r-- | validation/backend/pointer-sub.c | 2 | ||||
| -rw-r--r-- | validation/cast-kinds-check.c | 2 | ||||
| -rw-r--r-- | validation/cast-weirds.c | 49 | ||||
| -rw-r--r-- | validation/linear/cast-kinds.c | 10 | ||||
| -rw-r--r-- | validation/optim/kill-casts.c | 1 |
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\\. */ |
