// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -finclude-default-header -fnative-half-type %s -ast-dump | FileCheck %s // truncation // CHECK-LABEL: call1 // CHECK: CStyleCastExpr {{.*}} 'int[1]' // CHECK-NEXT: ImplicitCastExpr {{.*}} 'int[2]' part_of_explicit_cast // CHECK-NEXT: DeclRefExpr {{.*}} 'int[2]' lvalue Var {{.*}} 'A' 'int[2]' export void call1() { int A[2] = {0,1}; int B[1] = {4}; B = (int[1])A; } // flat cast of equal size // CHECK-LABEL: call2 // CHECK: CStyleCastExpr {{.*}} 'float[1]' // CHECK-NEXT: ImplicitCastExpr {{.*}} 'int[1]' part_of_explicit_cast // CHECK-NEXT: DeclRefExpr {{.*}} 'int[1]' lvalue Var {{.*}} 'A' 'int[1]' export void call2() { int A[1] = {0}; float B[1] = {1.0}; B = (float[1])A; } struct S { int A; float F; }; // cast from a struct // CHECK-LABEL: call3 // CHECK: CStyleCastExpr {{.*}} 'int[2]' // CHECK-NEXT: DeclRefExpr {{.*}} 'S' lvalue Var {{.*}} 'SS' 'S' export void call3() { S SS = {1,1.0}; int A[2] = (int[2])SS; } // cast from a vector // CHECK-LABEL: call4 // CHECK: CStyleCastExpr {{.*}} 'float[3]' // CHECK-NEXT: ImplicitCastExpr {{.*}} 'int3':'vector' part_of_explicit_cast // CHECK-NEXT: DeclRefExpr {{.*}} 'int3':'vector' lvalue Var {{.*}} 'A' 'int3' export void call4() { int3 A = {1,2,3}; float B[3] = (float[3])A; }