151 lines · c
1// RUN: %clang_cc1 %s -pedantic -verify -triple=x86_64-apple-darwin92 3typedef float float4 __attribute__((ext_vector_type(4)));4typedef int int3 __attribute__((ext_vector_type(3)));5typedef unsigned unsigned4 __attribute__((ext_vector_type(4)));6 7struct Foo {8 char *p;9};10 11void 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'}}14 15 i = __builtin_reduce_max(v, v);16 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}}17 18 i = __builtin_reduce_max();19 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}}20 21 i = __builtin_reduce_max(i);22 // expected-error@-1 {{1st argument must be a vector type (was 'int')}}23}24 25void 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'}}28 29 i = __builtin_reduce_min(v, v);30 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}}31 32 i = __builtin_reduce_min();33 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}}34 35 i = __builtin_reduce_min(i);36 // expected-error@-1 {{1st argument must be a vector type (was 'int')}}37}38 39void 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'}}42 43 i = __builtin_reduce_add();44 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}}45 46 i = __builtin_reduce_add(iv, iv);47 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}}48 49 i = __builtin_reduce_add(i);50 // expected-error@-1 {{1st argument must be a vector of integer types (was 'int')}}51 52 i = __builtin_reduce_add(v);53 // expected-error@-1 {{1st argument must be a vector of integer types (was 'float4' (vector of 4 'float' values))}}54}55 56void 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'}}59 60 i = __builtin_reduce_mul();61 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}}62 63 i = __builtin_reduce_mul(iv, iv);64 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}}65 66 i = __builtin_reduce_mul(i);67 // expected-error@-1 {{1st argument must be a vector of integer types (was 'int')}}68 69 i = __builtin_reduce_mul(v);70 // expected-error@-1 {{1st argument must be a vector of integer types (was 'float4' (vector of 4 'float' values))}}71}72 73void 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'}}76 77 i = __builtin_reduce_xor();78 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}}79 80 i = __builtin_reduce_xor(iv, iv);81 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}}82 83 i = __builtin_reduce_xor(i);84 // expected-error@-1 {{1st argument must be a vector of integer types (was 'int')}}85 86 i = __builtin_reduce_xor(v);87 // expected-error@-1 {{1st argument must be a vector of integer types (was 'float4' (vector of 4 'float' values))}}88}89 90void 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'}}93 94 i = __builtin_reduce_or();95 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}}96 97 i = __builtin_reduce_or(iv, iv);98 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}}99 100 i = __builtin_reduce_or(i);101 // expected-error@-1 {{1st argument must be a vector of integer types (was 'int')}}102 103 i = __builtin_reduce_or(v);104 // expected-error@-1 {{1st argument must be a vector of integer types (was 'float4' (vector of 4 'float' values))}}105}106 107void 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'}}110 111 i = __builtin_reduce_and();112 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}}113 114 i = __builtin_reduce_and(iv, iv);115 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}}116 117 i = __builtin_reduce_and(i);118 // expected-error@-1 {{1st argument must be a vector of integer types (was 'int')}}119 120 i = __builtin_reduce_and(v);121 // expected-error@-1 {{1st argument must be a vector of integer types (was 'float4' (vector of 4 'float' values))}}122}123 124void test_builtin_reduce_maximum(int i, float4 v, int3 iv) {125 struct Foo s = __builtin_reduce_maximum(v);126 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'float'}}127 128 i = __builtin_reduce_maximum(v, v);129 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}}130 131 i = __builtin_reduce_maximum();132 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}}133 134 i = __builtin_reduce_maximum(i);135 // expected-error@-1 {{1st argument must be a vector of floating-point types (was 'int')}}136}137 138void test_builtin_reduce_minimum(int i, float4 v, int3 iv) {139 struct Foo s = __builtin_reduce_minimum(v);140 // expected-error@-1 {{initializing 'struct Foo' with an expression of incompatible type 'float'}}141 142 i = __builtin_reduce_minimum(v, v);143 // expected-error@-1 {{too many arguments to function call, expected 1, have 2}}144 145 i = __builtin_reduce_minimum();146 // expected-error@-1 {{too few arguments to function call, expected 1, have 0}}147 148 i = __builtin_reduce_minimum(i);149 // expected-error@-1 {{1st argument must be a vector of floating-point types (was 'int')}}150}151