[clang] Handle __declspec() attributes in using
[llvm-project.git] / clang / test / SemaObjC / matrix-type-builtins.m
blob21b8bf864271dc22509eb026f730dd375409b0a8
1 // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -verify -fenable-matrix %s
3 typedef double double4x4 __attribute__((matrix_type(4, 4)));
4 typedef unsigned u4x4 __attribute__((matrix_type(4, 4)));
6 __attribute__((objc_root_class))
7 @interface MatrixValue
8 @property double4x4 value;
9 @end
11 void 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)))'}}
16 typedef double double3x3 __attribute__((matrix_type(3, 3)));
18 double 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)))'}}
23 double 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}}
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}}