[clang] Handle __declspec() attributes in using
[llvm-project.git] / clang / test / Sema / builtins-reduction-math.c
blob9d5eed75eb8141c13bc5dbe2e20e96e130e47409
1 // RUN: %clang_cc1 %s -pedantic -verify -triple=x86_64-apple-darwin9
3 typedef float float4 __attribute__((ext_vector_type(4)));
4 typedef int int3 __attribute__((ext_vector_type(3)));
5 typedef unsigned unsigned4 __attribute__((ext_vector_type(4)));
7 struct Foo {
8 char *p;
9 };
11 void test_builtin_reduce_max(int i, float4 v, int3 iv) {
12 struct Foo s = __builtin_reduce_max(iv);
13 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'int'}}
15 i = __builtin_reduce_max(v, v);
16 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}}
18 i = __builtin_reduce_max();
19 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}}
21 i = __builtin_reduce_max(i);
22 // expected-error@-1 {{1st argument must be a vector type (was 'int')}}
25 void test_builtin_reduce_min(int i, float4 v, int3 iv) {
26 struct Foo s = __builtin_reduce_min(iv);
27 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'int'}}
29 i = __builtin_reduce_min(v, v);
30 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}}
32 i = __builtin_reduce_min();
33 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}}
35 i = __builtin_reduce_min(i);
36 // expected-error@-1 {{1st argument must be a vector type (was 'int')}}
39 void test_builtin_reduce_add(int i, float4 v, int3 iv) {
40 struct Foo s = __builtin_reduce_add(iv);
41 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'int'}}
43 i = __builtin_reduce_add();
44 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}}
46 i = __builtin_reduce_add(iv, iv);
47 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}}
49 i = __builtin_reduce_add(i);
50 // expected-error@-1 {{1st argument must be a vector of integers (was 'int')}}
52 i = __builtin_reduce_add(v);
53 // expected-error@-1 {{1st argument must be a vector of integers (was 'float4' (vector of 4 'float' values))}}
56 void test_builtin_reduce_mul(int i, float4 v, int3 iv) {
57 struct Foo s = __builtin_reduce_mul(iv);
58 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'int'}}
60 i = __builtin_reduce_mul();
61 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}}
63 i = __builtin_reduce_mul(iv, iv);
64 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}}
66 i = __builtin_reduce_mul(i);
67 // expected-error@-1 {{1st argument must be a vector of integers (was 'int')}}
69 i = __builtin_reduce_mul(v);
70 // expected-error@-1 {{1st argument must be a vector of integers (was 'float4' (vector of 4 'float' values))}}
73 void test_builtin_reduce_xor(int i, float4 v, int3 iv) {
74 struct Foo s = __builtin_reduce_xor(iv);
75 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'int'}}
77 i = __builtin_reduce_xor();
78 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}}
80 i = __builtin_reduce_xor(iv, iv);
81 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}}
83 i = __builtin_reduce_xor(i);
84 // expected-error@-1 {{1st argument must be a vector of integers (was 'int')}}
86 i = __builtin_reduce_xor(v);
87 // expected-error@-1 {{1st argument must be a vector of integers (was 'float4' (vector of 4 'float' values))}}
90 void test_builtin_reduce_or(int i, float4 v, int3 iv) {
91 struct Foo s = __builtin_reduce_or(iv);
92 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'int'}}
94 i = __builtin_reduce_or();
95 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}}
97 i = __builtin_reduce_or(iv, iv);
98 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}}
100 i = __builtin_reduce_or(i);
101 // expected-error@-1 {{1st argument must be a vector of integers (was 'int')}}
103 i = __builtin_reduce_or(v);
104 // expected-error@-1 {{1st argument must be a vector of integers (was 'float4' (vector of 4 'float' values))}}
107 void test_builtin_reduce_and(int i, float4 v, int3 iv) {
108 struct Foo s = __builtin_reduce_and(iv);
109 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'int'}}
111 i = __builtin_reduce_and();
112 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}}
114 i = __builtin_reduce_and(iv, iv);
115 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}}
117 i = __builtin_reduce_and(i);
118 // expected-error@-1 {{1st argument must be a vector of integers (was 'int')}}
120 i = __builtin_reduce_and(v);
121 // expected-error@-1 {{1st argument must be a vector of integers (was 'float4' (vector of 4 'float' values))}}