// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -x hlsl -ast-dump -o - %s | FileCheck %s typedef float float2x1 __attribute__((matrix_type(2,1))); typedef float float2x3 __attribute__((matrix_type(2,3))); typedef float float2x2 __attribute__((matrix_type(2,2))); typedef float float4x4 __attribute__((matrix_type(4,4))); typedef float float2 __attribute__((ext_vector_type(2))); typedef float float4 __attribute__((ext_vector_type(4))); [numthreads(1,1,1)] void ok() { // CHECK: VarDecl 0x{{[0-9a-fA-F]+}} col:{{[0-9]+}} A 'float2x3':'matrix' cinit // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float2x3':'matrix' functional cast to float2x3 // CHECK-NEXT: InitListExpr 0x{{[0-9a-fA-F]+}} 'float2x3':'matrix' implicit // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 1 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 2 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 3 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 4 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 5 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 6 float2x3 A = float2x3(1,2,3,4,5,6); // CHECK: VarDecl 0x{{[0-9a-fA-F]+}} col:{{[0-9]+}} B 'float2x1':'matrix' cinit // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float2x1':'matrix' functional cast to float2x1 // CHECK-NEXT: InitListExpr 0x{{[0-9a-fA-F]+}} 'float2x1':'matrix' implicit // CHECK-NEXT: FloatingLiteral 0x{{[0-9a-fA-F]+}} 'float' 1.000000e+00 // CHECK-NEXT: FloatingLiteral 0x{{[0-9a-fA-F]+}} 'float' 2.000000e+00 float2x1 B = float2x1(1.0,2.0); // CHECK: VarDecl 0x{{[0-9a-fA-F]+}} col:{{[0-9]+}} C 'float2x1':'matrix' cinit // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float2x1':'matrix' functional cast to float2x1 // CHECK-NEXT: InitListExpr 0x{{[0-9a-fA-F]+}} 'float2x1':'matrix' implicit // CHECK-NEXT: UnaryOperator 0x{{[0-9a-fA-F]+}} 'float' prefix '-' // CHECK-NEXT: FloatingLiteral 0x{{[0-9a-fA-F]+}} 'float' 1.000000e+00 // CHECK-NEXT: UnaryOperator 0x{{[0-9a-fA-F]+}} 'float' prefix '-' // CHECK-NEXT: FloatingLiteral 0x{{[0-9a-fA-F]+}} 'float' 2.000000e+00 float2x1 C = float2x1(-1.0f,-2.0f); // CHECK: VarDecl 0x{{[0-9a-fA-F]+}} col:{{[0-9]+}} D 'float2x3':'matrix' cinit // CHECK-NEXT: ExprWithCleanups 0x{{[0-9a-fA-F]+}} 'float2x3':'matrix' // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float2x3':'matrix' functional cast to float2x3 // CHECK-NEXT: InitListExpr 0x{{[0-9a-fA-F]+}} 'float2x3':'matrix' implicit // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: ArraySubscriptExpr 0x{{[0-9a-fA-F]+}} 'float' xvalue vectorcomponent // CHECK-NEXT: MaterializeTemporaryExpr 0x{{[0-9a-fA-F]+}} 'float2':'vector' xvalue // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float2':'vector' functional cast to float2 // CHECK-NEXT: InitListExpr 0x{{[0-9a-fA-F]+}} 'float2':'vector' implicit // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 1 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 2 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} <> '__size_t':'unsigned long' 0 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: ArraySubscriptExpr 0x{{[0-9a-fA-F]+}} 'float' xvalue vectorcomponent // CHECK-NEXT: MaterializeTemporaryExpr 0x{{[0-9a-fA-F]+}} 'float2':'vector' xvalue // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float2':'vector' functional cast to float2 // CHECK-NEXT: InitListExpr 0x{{[0-9a-fA-F]+}} 'float2':'vector' implicit // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 1 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 2 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} <> '__size_t':'unsigned long' 1 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 3 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 4 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 5 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 6 float2x3 D = float2x3(float2(1,2), 3, 4, 5, 6); // CHECK: VarDecl 0x{{[0-9a-fA-F]+}} col:{{[0-9]+}} E 'float2x3':'matrix' cinit // CHECK-NEXT: ExprWithCleanups 0x{{[0-9a-fA-F]+}} 'float2x3':'matrix' // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float2x3':'matrix' functional cast to float2x3 // CHECK-NEXT: InitListExpr 0x{{[0-9a-fA-F]+}} 'float2x3':'matrix' implicit // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: ArraySubscriptExpr 0x{{[0-9a-fA-F]+}} 'float' xvalue vectorcomponent // CHECK-NEXT: MaterializeTemporaryExpr 0x{{[0-9a-fA-F]+}} 'float2':'vector' xvalue // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float2':'vector' functional cast to float2 // CHECK-NEXT: InitListExpr 0x{{[0-9a-fA-F]+}} 'float2':'vector' implicit // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 1 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 2 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} <> '__size_t':'unsigned long' 0 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: ArraySubscriptExpr 0x{{[0-9a-fA-F]+}} 'float' xvalue vectorcomponent // CHECK-NEXT: MaterializeTemporaryExpr 0x{{[0-9a-fA-F]+}} 'float2':'vector' xvalue // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float2':'vector' functional cast to float2 // CHECK-NEXT: InitListExpr 0x{{[0-9a-fA-F]+}} 'float2':'vector' implicit // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 1 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 2 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} <> '__size_t':'unsigned long' 1 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: ArraySubscriptExpr 0x{{[0-9a-fA-F]+}} 'float' xvalue vectorcomponent // CHECK-NEXT: MaterializeTemporaryExpr 0x{{[0-9a-fA-F]+}} 'float2':'vector' xvalue // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float2':'vector' functional cast to float2 // CHECK-NEXT: InitListExpr 0x{{[0-9a-fA-F]+}} 'float2':'vector' implicit // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 3 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 4 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} <> '__size_t':'unsigned long' 0 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: ArraySubscriptExpr 0x{{[0-9a-fA-F]+}} 'float' xvalue vectorcomponent // CHECK-NEXT: MaterializeTemporaryExpr 0x{{[0-9a-fA-F]+}} 'float2':'vector' xvalue // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float2':'vector' functional cast to float2 // CHECK-NEXT: InitListExpr 0x{{[0-9a-fA-F]+}} 'float2':'vector' implicit // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 3 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 4 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} <> '__size_t':'unsigned long' 1 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 5 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 6 float2x3 E = float2x3(float2(1,2), float2(3,4), 5, 6); // CHECK: VarDecl 0x{{[0-9a-fA-F]+}} col:{{[0-9]+}} F 'float2x3':'matrix' cinit // CHECK-NEXT: ExprWithCleanups 0x{{[0-9a-fA-F]+}} 'float2x3':'matrix' // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float2x3':'matrix' functional cast to float2x3 // CHECK-NEXT: InitListExpr 0x{{[0-9a-fA-F]+}} 'float2x3':'matrix' // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: ArraySubscriptExpr 0x{{[0-9a-fA-F]+}} 'float' xvalue vectorcomponent // CHECK-NEXT: MaterializeTemporaryExpr 0x{{[0-9a-fA-F]+}} 'float4':'vector' xvalue // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float4':'vector' functional cast to float4 // CHECK-NEXT: InitListExpr 0x{{[0-9a-fA-F]+}} 'float4':'vector' // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 1 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 2 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 3 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 4 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} <> '__size_t':'unsigned long' 0 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: ArraySubscriptExpr 0x{{[0-9a-fA-F]+}} 'float' xvalue vectorcomponent // CHECK-NEXT: MaterializeTemporaryExpr 0x{{[0-9a-fA-F]+}} 'float4':'vector' xvalue // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float4':'vector' functional cast to float4 // CHECK-NEXT: InitListExpr 0x{{[0-9a-fA-F]+}} 'float4':'vector' // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 1 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 2 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 3 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 4 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} <> '__size_t':'unsigned long' 1 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: ArraySubscriptExpr 0x{{[0-9a-fA-F]+}} 'float' xvalue vectorcomponent // CHECK-NEXT: MaterializeTemporaryExpr 0x{{[0-9a-fA-F]+}} 'float4':'vector' xvalue // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float4':'vector' functional cast to float4 // CHECK-NEXT: InitListExpr 0x{{[0-9a-fA-F]+}} 'float4':'vector' // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 1 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 2 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 3 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 4 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} <> '__size_t':'unsigned long' 2 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: ArraySubscriptExpr 0x{{[0-9a-fA-F]+}} 'float' xvalue vectorcomponent // CHECK-NEXT: MaterializeTemporaryExpr 0x{{[0-9a-fA-F]+}} 'float4':'vector' xvalue // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float4':'vector' functional cast to float4 // CHECK-NEXT: InitListExpr 0x{{[0-9a-fA-F]+}} 'float4':'vector' // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 1 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 2 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 3 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 4 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} <> '__size_t':'unsigned long' 3 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 5 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 6 float2x3 F = float2x3(float4(1,2,3,4), 5, 6); // CHECK: VarDecl 0x{{[0-9a-fA-F]+}} col:{{[0-9]+}} G 'float2x3':'matrix' cinit // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float2x3':'matrix' functional cast to float2x3 // CHECK-NEXT: InitListExpr 0x{{[0-9a-fA-F]+}} 'float2x3':'matrix' // CHECK-NEXT: MatrixSubscriptExpr 0x{{[0-9a-fA-F]+}} 'float' matrixcomponent // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float2x2':'matrix' functional cast to float2x2 // CHECK-NEXT: InitListExpr 0x{{[0-9a-fA-F]+}} 'float2x2':'matrix' // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 1 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 2 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 3 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 4 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 0 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 0 // CHECK-NEXT: MatrixSubscriptExpr 0x{{[0-9a-fA-F]+}} 'float' matrixcomponent // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float2x2':'matrix' functional cast to float2x2 // CHECK-NEXT: InitListExpr 0x{{[0-9a-fA-F]+}} 'float2x2':'matrix' // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 1 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 2 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 3 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 4 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 0 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 1 // CHECK-NEXT: MatrixSubscriptExpr 0x{{[0-9a-fA-F]+}} 'float' matrixcomponent // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float2x2':'matrix' functional cast to float2x2 // CHECK-NEXT: InitListExpr 0x{{[0-9a-fA-F]+}} 'float2x2':'matrix' // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 1 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 2 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 3 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 4 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 1 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 0 // CHECK-NEXT: MatrixSubscriptExpr 0x{{[0-9a-fA-F]+}} 'float' matrixcomponent // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float2x2':'matrix' functional cast to float2x2 // CHECK-NEXT: InitListExpr 0x{{[0-9a-fA-F]+}} 'float2x2':'matrix' // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 1 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 2 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 3 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 4 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 1 // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 1 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 5 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 6 float2x3 G = float2x3(float2x2(1,2,3,4), 5, 6); // CHECK: VarDecl 0x{{[0-9a-fA-F]+}} col:{{[0-9]+}} H 'float2x2':'matrix' cinit // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float2x2':'matrix' functional cast to float2x2 // CHECK-NEXT: InitListExpr 0x{{[0-9a-fA-F]+}} 'float2x2':'matrix' // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: ArraySubscriptExpr 0x{{[0-9a-fA-F]+}} 'float' lvalue vectorcomponent // CHECK-NEXT: DeclRefExpr 0x{{[0-9a-fA-F]+}} 'float2':'vector' lvalue Var 0x{{[0-9a-fA-F]+}} 'Vec2' 'float2':'vector' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} <> '__size_t':'unsigned long' 0 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: ArraySubscriptExpr 0x{{[0-9a-fA-F]+}} 'float' lvalue vectorcomponent // CHECK-NEXT: DeclRefExpr 0x{{[0-9a-fA-F]+}} 'float2':'vector' lvalue Var 0x{{[0-9a-fA-F]+}} 'Vec2' 'float2':'vector' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} <> '__size_t':'unsigned long' 1 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 3 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} 'int' 4 float2 Vec2 = float2(1.0, 2.0); float2x2 H = float2x2(Vec2,3,4); // CHECK: VarDecl 0x{{[0-9a-fA-F]+}} col:{{[0-9]+}} I 'float2x2':'matrix' cinit // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float2x2':'matrix' functional cast to float2x2 // CHECK-NEXT: InitListExpr 0x{{[0-9a-fA-F]+}} 'float2x2':'matrix' // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'int' // CHECK-NEXT: DeclRefExpr 0x{{[0-9a-fA-F]+}} 'int' lvalue Var 0x{{[0-9a-fA-F]+}} 'i' 'int' // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'int' // CHECK-NEXT: DeclRefExpr 0x{{[0-9a-fA-F]+}} 'int' lvalue Var 0x{{[0-9a-fA-F]+}} 'j' 'int' // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'int' // CHECK-NEXT: DeclRefExpr 0x{{[0-9a-fA-F]+}} 'int' lvalue Var 0x{{[0-9a-fA-F]+}} 'k' 'int' // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'int' // CHECK-NEXT: DeclRefExpr 0x{{[0-9a-fA-F]+}} 'int' lvalue Var 0x{{[0-9a-fA-F]+}} 'l' 'int' int i = 1, j = 2, k = 3, l = 4; float2x2 I = float2x2(i,j,k,l); // CHECK: VarDecl 0x{{[0-9a-fA-F]+}} col:{{[0-9]+}} J 'float2x2':'matrix' cinit // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float2x2':'matrix' functional cast to float2x2 // CHECK-NEXT: InitListExpr 0x{{[0-9a-fA-F]+}} 'float2x2':'matrix' // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: ArraySubscriptExpr 0x{{[0-9a-fA-F]+}} 'float' lvalue vectorcomponent // CHECK-NEXT: MemberExpr 0x{{[0-9a-fA-F]+}} 'float2':'vector' lvalue .f 0x{{[0-9a-fA-F]+}} // CHECK-NEXT: DeclRefExpr 0x{{[0-9a-fA-F]+}} 'struct S' lvalue Var 0x{{[0-9a-fA-F]+}} 's' 'struct S' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} <> '__size_t':'unsigned long' 0 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: ArraySubscriptExpr 0x{{[0-9a-fA-F]+}} 'float' lvalue vectorcomponent // CHECK-NEXT: MemberExpr 0x{{[0-9a-fA-F]+}} 'float2':'vector' lvalue .f 0x{{[0-9a-fA-F]+}} // CHECK-NEXT: DeclRefExpr 0x{{[0-9a-fA-F]+}} 'struct S' lvalue Var 0x{{[0-9a-fA-F]+}} 's' 'struct S' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} <> '__size_t':'unsigned long' 1 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: MemberExpr 0x{{[0-9a-fA-F]+}} 'float' lvalue .a 0x{{[0-9a-fA-F]+}} // CHECK-NEXT: DeclRefExpr 0x{{[0-9a-fA-F]+}} 'struct S' lvalue Var 0x{{[0-9a-fA-F]+}} 's' 'struct S' // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: MemberExpr 0x{{[0-9a-fA-F]+}} 'float' lvalue .a 0x{{[0-9a-fA-F]+}} // CHECK-NEXT: DeclRefExpr 0x{{[0-9a-fA-F]+}} 'struct S' lvalue Var 0x{{[0-9a-fA-F]+}} 's' 'struct S' struct S { float2 f; float a;} s; float2x2 J = float2x2(s.f, s.a, s.a); // CHECK: VarDecl 0x{{[0-9a-fA-F]+}} col:{{[0-9]+}} L 'second_level_of_typedefs':'matrix' cinit // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float2x2':'matrix' functional cast to float2x2 // CHECK-NEXT: InitListExpr 0x{{[0-9a-fA-F]+}} 'float2x2':'matrix' // CHECK-NEXT: FloatingLiteral 0x{{[0-9a-fA-F]+}} 'float' 1.000000e+00 // CHECK-NEXT: FloatingLiteral 0x{{[0-9a-fA-F]+}} 'float' 2.000000e+00 // CHECK-NEXT: FloatingLiteral 0x{{[0-9a-fA-F]+}} 'float' 3.000000e+00 // CHECK-NEXT: FloatingLiteral 0x{{[0-9a-fA-F]+}} 'float' 4.000000e+00 typedef float2x2 second_level_of_typedefs; second_level_of_typedefs L = float2x2(1.0f, 2.0f, 3.0f, 4.0f); // CHECK: VarDecl 0x{{[0-9a-fA-F]+}} col:{{[0-9]+}} M 'float2x2':'matrix' cinit // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'second_level_of_typedefs':'matrix' functional cast to second_level_of_typedefs // CHECK-NEXT: InitListExpr 0x{{[0-9a-fA-F]+}} 'second_level_of_typedefs':'matrix' // CHECK-NEXT: FloatingLiteral 0x{{[0-9a-fA-F]+}} 'float' 1.000000e+00 // CHECK-NEXT: FloatingLiteral 0x{{[0-9a-fA-F]+}} 'float' 2.000000e+00 // CHECK-NEXT: FloatingLiteral 0x{{[0-9a-fA-F]+}} 'float' 3.000000e+00 // CHECK-NEXT: FloatingLiteral 0x{{[0-9a-fA-F]+}} 'float' 4.000000e+00 float2x2 M = second_level_of_typedefs(1.0f, 2.0f, 3.0f, 4.0f); // CHECK: VarDecl 0x{{[0-9a-fA-F]+}} col:{{[0-9]+}} N 'float4x4':'matrix' cinit // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float4x4':'matrix' functional cast to float4x4 // CHECK-NEXT: DeclRefExpr 0x{{[0-9a-fA-F]+}} 'sF' lvalue Var 0x{{[0-9a-fA-F]+}} 'f' 'sF' struct sF { float f[16]; }; sF f; float4x4 N = float4x4(f); // CHECK: VarDecl 0x{{[0-9a-fA-F]+}} col:{{[0-9]+}} GettingStrange 'float2x1':'matrix' cinit // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float2x1':'matrix' functional cast to float2x1 // CHECK-NEXT: InitListExpr 0x{{[0-9a-fA-F]+}} 'float2x1':'matrix' // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: MemberExpr 0x{{[0-9a-fA-F]+}} 'float' lvalue .f 0x{{[0-9a-fA-F]+}} // CHECK-NEXT: DeclRefExpr 0x{{[0-9a-fA-F]+}} 'S2' lvalue Var 0x{{[0-9a-fA-F]+}} 's2' 'S2' // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: MemberExpr 0x{{[0-9a-fA-F]+}} 'float' lvalue .f 0x{{[0-9a-fA-F]+}} // CHECK-NEXT: DeclRefExpr 0x{{[0-9a-fA-F]+}} 'S2' lvalue Var 0x{{[0-9a-fA-F]+}} 's2' 'S2' struct S2 { float f; }; S2 s2; float2x1 GettingStrange = float2x1(s2, s2); // CHECK: VarDecl 0x{{[0-9a-fA-F]+}} col:{{[0-9]+}} GettingStrange2 'float2x2':'matrix' cinit // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float2x2':'matrix' functional cast to float2x2 // CHECK-NEXT: InitListExpr 0x{{[0-9a-fA-F]+}} 'float2x2':'matrix' // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: ArraySubscriptExpr 0x{{[0-9a-fA-F]+}} 'float' lvalue vectorcomponent // CHECK-NEXT: MemberExpr 0x{{[0-9a-fA-F]+}} 'float2':'vector' lvalue .f 0x{{[0-9a-fA-F]+}} // CHECK-NEXT: DeclRefExpr 0x{{[0-9a-fA-F]+}} 'S3' lvalue Var 0x{{[0-9a-fA-F]+}} 's3' 'S3' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} <> '__size_t':'unsigned long' 0 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: ArraySubscriptExpr 0x{{[0-9a-fA-F]+}} 'float' lvalue vectorcomponent // CHECK-NEXT: MemberExpr 0x{{[0-9a-fA-F]+}} 'float2':'vector' lvalue .f 0x{{[0-9a-fA-F]+}} // CHECK-NEXT: DeclRefExpr 0x{{[0-9a-fA-F]+}} 'S3' lvalue Var 0x{{[0-9a-fA-F]+}} 's3' 'S3' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} <> '__size_t':'unsigned long' 1 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: ArraySubscriptExpr 0x{{[0-9a-fA-F]+}} 'float' lvalue vectorcomponent // CHECK-NEXT: MemberExpr 0x{{[0-9a-fA-F]+}} 'float2':'vector' lvalue .f 0x{{[0-9a-fA-F]+}} // CHECK-NEXT: DeclRefExpr 0x{{[0-9a-fA-F]+}} 'S3' lvalue Var 0x{{[0-9a-fA-F]+}} 's3' 'S3' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} <> '__size_t':'unsigned long' 0 // CHECK-NEXT: ImplicitCastExpr 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: ArraySubscriptExpr 0x{{[0-9a-fA-F]+}} 'float' lvalue vectorcomponent // CHECK-NEXT: MemberExpr 0x{{[0-9a-fA-F]+}} 'float2':'vector' lvalue .f 0x{{[0-9a-fA-F]+}} // CHECK-NEXT: DeclRefExpr 0x{{[0-9a-fA-F]+}} 'S3' lvalue Var 0x{{[0-9a-fA-F]+}} 's3' 'S3' // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} <> '__size_t':'unsigned long' 1 struct S3 { float2 f;}; S3 s3; float2x2 GettingStrange2 = float2x2(s3, s3); // CHECK: VarDecl 0x{{[0-9a-fA-F]+}} col:{{[0-9]+}} GettingStrange3 'float2x2':'matrix' cinit // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float2x2':'matrix' functional cast to float2x2 // CHECK-NEXT: DeclRefExpr 0x{{[0-9a-fA-F]+}} 'S4' lvalue Var 0x{{[0-9a-fA-F]+}} 's4' 'S4' struct S4 { float4 f;}; S4 s4; float2x2 GettingStrange3 = float2x2(s4); } // CHECK: FunctionDecl 0x{{[0-9a-fA-F]+}} line:{{[0-9]+:[0-9]+}} used TplFn 'void ()' implicit_instantiation // CHECK-NEXT: TemplateArgument type 'int' // CHECK-NEXT: BuiltinType 0x{{[0-9a-fA-F]+}} 'int' // CHECK-NEXT: CompoundStmt // CHECK-NEXT: DeclStmt // CHECK-NEXT: VarDecl 0x{{[0-9a-fA-F]+}} col:{{[0-9]+}} X 'float2x1':'matrix' cinit // CHECK-NEXT: CXXFunctionalCastExpr 0x{{[0-9a-fA-F]+}} 'float2x1':'matrix' functional cast to float2x1 // CHECK-NEXT: InitListExpr 0x{{[0-9a-fA-F]+}} 'float2x1':'matrix' implicit // CHECK-NEXT: FloatingLiteral 0x{{[0-9a-fA-F]+}} 'float' 1.000000e+00 // CHECK-NEXT: FloatingLiteral 0x{{[0-9a-fA-F]+}} 'float' 2.000000e+00 template void TplFn() { float2x1 X = float2x1(1.0,2.0); } void Fn() { TplFn(); }