brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.9 KiB · 708b3fa Raw
136 lines · cpp
1// RUN: %clang_cc1 -std=c++11 -fenable-matrix -fsyntax-only -verify %s2 3template <typename X>4 5using matrix_4_4 = X __attribute__((matrix_type(4, 4)));6 7template <typename Y>8 9using matrix_5_5 = Y __attribute__((matrix_type(5, 5)));10 11typedef struct test_struct {12} test_struct;13 14typedef int vec __attribute__((vector_size(4)));15 16void f1() {17  matrix_4_4<char> m1;18  matrix_4_4<int> m2;19  matrix_4_4<short> m3;20  matrix_5_5<int> m4;21  int i;22  vec v;23  test_struct *s;24 25  m2 = (matrix_4_4<int>)m1;26  m2 = m1; // expected-error {{assigning to 'matrix_4_4<int>' from incompatible type 'matrix_4_4<char>'}}27  m3 = (matrix_4_4<short>)m2;28  (matrix_5_5<int>)m3; // expected-error {{conversion between matrix types 'matrix_5_5<int>' (aka 'int __attribute__\29((matrix_type(5, 5)))') and 'short __attribute__((matrix_type(4, 4)))' of different size is not allowed}}30 31  (int)m3;            // expected-error {{C-style cast from 'matrix_4_4<short>' (aka 'short __attribute__((matrix_type(4, 4)))') to 'int' is not allowed}}32  (matrix_4_4<int>)i; // expected-error {{C-style cast from 'int' to 'matrix_4_4<int>' (aka 'int __attribute__((matrix_type(4, 4)))') is not allowed}}33 34  (vec) m2;            // expected-error {{C-style cast from 'matrix_4_4<int>' (aka 'int __attribute__((matrix_type(4, 4)))') to 'vec' (vector of 1 'int' value) is not allowed}}35  (matrix_4_4<char>)v; // expected-error {{C-style cast from 'vec' (vector of 1 'int' value) to 'matrix_4_4<char>' (aka 'char __attribute__((matrix_type(4, 4)))') is not allowed}}36 37  (test_struct *)m1;    // expected-error {{cannot cast from type 'matrix_4_4<char>' (aka 'char __attribute__((matrix_type(4, 4)))') to pointer type 'test_struct *'}}38  (matrix_5_5<float>)s; // expected-error {{C-style cast from 'test_struct *' (aka 'struct test_struct *') to 'matrix_5_5<float>' (aka 'float __attribute__((matrix_type(5, 5)))') is not allowed}}39}40 41void f2() {42  matrix_4_4<char> m1;43  matrix_4_4<int> m2;44  matrix_4_4<short> m3;45  matrix_5_5<int> m4;46  int i;47  vec v;48  test_struct *s;49 50  m2 = static_cast<matrix_4_4<int>>(m1);51  m3 = static_cast<matrix_4_4<short>>(m2);52  static_cast<matrix_5_5<int>>(m3); // expected-error {{conversion between matrix types 'matrix_5_5<int>' (aka 'int __attribute__\53((matrix_type(5, 5)))') and 'short __attribute__((matrix_type(4, 4)))' of different size is not allowed}}54 55  static_cast<int>(m3);            // expected-error {{static_cast from 'matrix_4_4<short>' (aka 'short __attribute__((matrix_type(4, 4)))') to 'int' is not allowed}}56  static_cast<matrix_4_4<int>>(i); // expected-error {{static_cast from 'int' to 'matrix_4_4<int>' (aka 'int __attribute__((matrix_type(4, 4)))') is not allowed}}57 58  static_cast<vec>(m2);             // expected-error {{static_cast from 'matrix_4_4<int>' (aka 'int __attribute__((matrix_type(4, 4)))') to 'vec' (vector of 1 'int' value) is not allowed}}59  static_cast<matrix_4_4<char>>(v); // expected-error {{static_cast from 'vec' (vector of 1 'int' value) to 'matrix_4_4<char>' (aka 'char __attribute__((matrix_type(4, 4)))') is not allowed}}60 61  static_cast<test_struct *>(m1);    // expected-error {{cannot cast from type 'matrix_4_4<char>' (aka 'char __attribute__((matrix_type(4, 4)))') to pointer type 'test_struct *'}}62  static_cast<matrix_5_5<float>>(s); // expected-error {{static_cast from 'test_struct *' (aka 'struct test_struct *') to 'matrix_5_5<float>' (aka 'float __attribute__((matrix_type(5, 5)))') is not allowed}}63}64 65void f3() {66  matrix_4_4<float> m1;67  matrix_4_4<double> m2;68  matrix_5_5<double> m3;69  matrix_5_5<signed int> m4;70  matrix_4_4<unsigned int> m5;71  matrix_5_5<unsigned int> m6;72  float f;73 74  m2 = (matrix_4_4<double>)m1;75  (matrix_5_5<double>)m1; // expected-error {{conversion between matrix types 'matrix_5_5<double>' (aka 'double __\76attribute__((matrix_type(5, 5)))') and 'float __attribute__((matrix_type(4, 4)))' of different\77 size is not allowed}}78  m4 = (matrix_5_5<signed int>)m3;79  m5 = (matrix_5_5<unsigned int>)m4; // expected-error {{assigning to 'matrix_4_4<unsigned int>' (aka 'unsigned int \80__attribute__((matrix_type(4, 4)))') from incompatible type 'matrix_5_5<unsigned int>' (aka 'unsigned int __attribute__\81((matrix_type(5, 5)))')}}82  m6 = (matrix_5_5<unsigned int>)m4;83  m4 = (matrix_5_5<signed int>)m6;84}85 86void f4() {87  matrix_4_4<float> m1;88  matrix_4_4<double> m2;89  matrix_5_5<double> m3;90  matrix_5_5<signed int> m4;91  matrix_4_4<unsigned int> m5;92  matrix_5_5<unsigned int> m6;93  float f;94 95  m2 = static_cast<matrix_4_4<double>>(m1);96  static_cast<matrix_5_5<double>>(m1); // expected-error {{conversion between matrix types 'matrix_5_5<double>' (aka 'double __\97attribute__((matrix_type(5, 5)))') and 'float __attribute__((matrix_type(4, 4)))' of different size is not allowed}}98 99  m4 = static_cast<matrix_5_5<signed int>>(m3);100  m5 = static_cast<matrix_5_5<unsigned int>>(m4); // expected-error {{assigning to 'matrix_4_4<unsigned int>' (aka 'unsigned int \101__attribute__((matrix_type(4, 4)))') from incompatible type 'matrix_5_5<unsigned int>' (aka 'unsigned int __attribute__\102((matrix_type(5, 5)))')}}103  m6 = static_cast<matrix_5_5<unsigned int>>(m4);104  m4 = static_cast<matrix_5_5<signed int>>(m6);105}106 107class Foo {108  // expected-note@-1 {{candidate constructor (the implicit copy constructor) not viable: no known conversion from 'matrix_4_4<float>' (aka 'float __attribute__((matrix_type(4, 4)))') to 'const Foo' for 1st argument}}109  // expected-note@-2 {{candidate constructor (the implicit move constructor) not viable: no known conversion from 'matrix_4_4<float>' (aka 'float __attribute__((matrix_type(4, 4)))') to 'Foo' for 1st argument}}110 111  int x;112 113public:114  Foo();115  // expected-note@-1 {{candidate constructor not viable: requires 0 arguments, but 1 was provided}}116  Foo(matrix_5_5<int> x);117  // expected-note@-1 {{candidate constructor not viable: no known conversion from 'matrix_4_4<float>' (aka 'float __attribute__((matrix_type(4, 4)))') to 'matrix_5_5<int>' (aka 'int __attribute__((matrix_type(5, 5)))') for 1st argument}}118};119 120struct Bar {121  // expected-note@-1 {{candidate constructor (the implicit copy constructor) not viable: no known conversion from 'matrix_4_4<unsigned int>' (aka 'unsigned int __attribute__((matrix_type(4, 4)))') to 'const Bar' for 1st argument}}122  // expected-note@-2 {{candidate constructor (the implicit move constructor) not viable: no known conversion from 'matrix_4_4<unsigned int>' (aka 'unsigned int __attribute__((matrix_type(4, 4)))') to 'Bar' for 1st argument}}123  // expected-note@-3 {{candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 1 was provided}}124  float x;125};126 127void f5_constructors() {128  matrix_4_4<float> m1;129  matrix_4_4<unsigned int> m5;130 131  Foo F = Foo(m1);132  // expected-error@-1 {{no matching conversion for functional-style cast from 'matrix_4_4<float>' (aka 'float __attribute__((matrix_type(4, 4)))') to 'Foo'}}133  Bar B = Bar(m5);134  // expected-error@-1 {{no matching conversion for functional-style cast from 'matrix_4_4<unsigned int>' (aka 'unsigned int __attribute__((matrix_type(4, 4)))') to 'Bar'}}135}136