summaryrefslogtreecommitdiff
path: root/test/Sema
diff options
context:
space:
mode:
authorEd Schouten <ed@FreeBSD.org>2009-07-04 13:58:54 +0000
committerEd Schouten <ed@FreeBSD.org>2009-07-04 13:58:54 +0000
commit5362a71c02e7d448a8ce98cf00c47e353fba5d04 (patch)
tree8ddfe382e1c6d590dc240e76f7cd45cea5c78e24 /test/Sema
parent4ebdf5c4f587daef4e0be499802eac3a7a49bf2f (diff)
Notes
Diffstat (limited to 'test/Sema')
-rw-r--r--test/Sema/compare.c14
-rw-r--r--test/Sema/ext_vector_casts.c22
-rw-r--r--test/Sema/format-attr-pr4470.c11
3 files changed, 47 insertions, 0 deletions
diff --git a/test/Sema/compare.c b/test/Sema/compare.c
index 4b44bf5b96a07..51f77317385ca 100644
--- a/test/Sema/compare.c
+++ b/test/Sema/compare.c
@@ -15,3 +15,17 @@ int arrays(char (*a)[5], char(*b)[10], char(*c)[5]) {
int d = (a == c);
return a == b; // expected-warning {{comparison of distinct pointer types}}
}
+
+int pointers(int *a)
+{
+ return a > 0; // expected-warning {{ordered comparison between pointer and integer}}
+ return a > (void *)0; // expected-warning {{comparison of distinct pointer types}}
+}
+
+int function_pointers(int (*a)(int), int (*b)(int))
+{
+ return a > b; // expected-warning {{ordered comparison of function pointers}}
+ return function_pointers > function_pointers; // expected-warning {{ordered comparison of function pointers}}
+ return a == (void *) 0;
+ return a == (void *) 1; // expected-warning {{comparison of distinct pointer types}}
+}
diff --git a/test/Sema/ext_vector_casts.c b/test/Sema/ext_vector_casts.c
index 8aa762ebcf2ae..dbcd1c9b3ac05 100644
--- a/test/Sema/ext_vector_casts.c
+++ b/test/Sema/ext_vector_casts.c
@@ -2,6 +2,7 @@
typedef __attribute__(( ext_vector_type(2) )) float float2;
typedef __attribute__(( ext_vector_type(4) )) int int4;
+typedef __attribute__(( ext_vector_type(8) )) short short8;
typedef __attribute__(( ext_vector_type(4) )) float float4;
typedef float t3 __attribute__ ((vector_size (16)));
@@ -9,8 +10,12 @@ static void test() {
float2 vec2;
float4 vec4, vec4_2;
int4 ivec4;
+ short8 ish8;
t3 vec4_3;
+ int *ptr;
+ int i;
+ vec4 = 5.0f;
vec4 = (float4)5.0f;
vec4 = (float4)5;
vec4 = (float4)vec4_3;
@@ -19,5 +24,22 @@ static void test() {
ivec4 = (int4)5;
ivec4 = (int4)vec4_3;
+ i = (int)ivec4; // expected-error {{invalid conversion between vector type 'int4' and integer type 'int' of different size}}
+ i = ivec4; // expected-error {{incompatible type assigning 'int4', expected 'int'}}
+
+ ivec4 = (int4)ptr; // expected-error {{invalid conversion between vector type 'int4' and scalar type 'int *'}}
+
vec4 = (float4)vec2; // expected-error {{invalid conversion between ext-vector type 'float4' and 'float2'}}
+
+ ish8 += 5; // expected-error {{can't convert between vector values of different size ('short8' and 'int')}}
+ ish8 += (short)5;
+ ivec4 *= 5;
+ vec4 /= 5.2f;
+ vec4 %= 4; // expected-error {{invalid operands to binary expression ('float4' and 'int')}}
+ ivec4 %= 4;
+ ivec4 += vec4; // expected-error {{can't convert between vector values of different size ('float4' and 'int4')}}
+ ivec4 += (int4)vec4;
+ ivec4 -= ivec4;
+ ivec4 |= ivec4;
+ ivec4 += ptr; // expected-error {{can't convert between vector values of different size ('int4' and 'int *')}}
}
diff --git a/test/Sema/format-attr-pr4470.c b/test/Sema/format-attr-pr4470.c
new file mode 100644
index 0000000000000..cba3adf1d6de4
--- /dev/null
+++ b/test/Sema/format-attr-pr4470.c
@@ -0,0 +1,11 @@
+// RUN: clang-cc -fsyntax-only -verify -Wformat=2 %s
+
+#include <stdio.h>
+
+const char *foo(const char *format) __attribute__((format_arg(1)));
+
+void __attribute__((format(printf, 1, 0)))
+foo2(const char *fmt, va_list va)
+{
+ vprintf(foo(fmt), va);
+}