1// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -verify -fenable-matrix %s 2 3typedef double double4x4 __attribute__((matrix_type(4, 4))); 4typedef unsigned u4x4 __attribute__((matrix_type(4, 4))); 5 6__attribute__((objc_root_class)) 7@interface MatrixValue 8@property double4x4 value; 9@end 10 11void test_element_type_mismatch(u4x4 m, MatrixValue *mv) { 12 m = __builtin_matrix_transpose(mv.value); 13 // expected-error@-1 {{assigning to 'u4x4' (aka 'unsigned int __attribute__((matrix_type(4, 4)))') from incompatible type 'double __attribute__((matrix_type(4, 4)))'}} 14} 15 16typedef double double3x3 __attribute__((matrix_type(3, 3))); 17 18double test_dimension_mismatch(double3x3 m, MatrixValue *mv) { 19 m = __builtin_matrix_transpose(mv.value); 20 // expected-error@-1 {{assigning to 'double3x3' (aka 'double __attribute__((matrix_type(3, 3)))') from incompatible type 'double __attribute__((matrix_type(4, 4)))'}} 21} 22 23double test_store(MatrixValue *mv, float *Ptr) { 24 __builtin_matrix_column_major_store(mv.value, Ptr, 1); 25 // expected-error@-1 {{the pointee of the 2nd argument must match the element type of the 1st argument ('float' != 'double')}} 26 // expected-error@-2 {{stride must be greater or equal to the number of rows}} 27 28 __builtin_matrix_column_major_store(mv.value, mv.value, mv.value); 29 // expected-error@-1 {{2nd argument must be a pointer to a valid matrix element type}} 30 // expected-error@-2 {{casting 'double4x4' (aka 'double __attribute__((matrix_type(4, 4)))') to incompatible type 'unsigned long}} 31} 32