// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -x hlsl -ast-dump -o - %s | FileCheck %s // CHECK: NamespaceDecl 0x{{[0-9a-fA-F]+}} <> implicit hlsl // CHECK-NEXT: TypeAliasTemplateDecl 0x{{[0-9a-fA-F]+}} <> implicit vector // CHECK-NEXT: TemplateTypeParmDecl 0x{{[0-9a-fA-F]+}} <> class depth 0 index 0 element // CHECK-NEXT: TemplateArgument type 'float' // CHECK-NEXT: BuiltinType 0x{{[0-9a-fA-F]+}} 'float' // CHECK-NEXT: NonTypeTemplateParmDecl 0x{{[0-9a-fA-F]+}} <> 'int' depth 0 index 1 element_count // CHECK-NEXT: TemplateArgument expr // CHECK-NEXT: IntegerLiteral 0x{{[0-9a-fA-F]+}} <> 'int' 4 // CHECK-NEXT: TypeAliasDecl 0x{{[0-9a-fA-F]+}} <> implicit vector 'element __attribute__((ext_vector_type(element_count)))' // CHECK-NEXT: DependentSizedExtVectorType 0x{{[0-9a-fA-F]+}} 'element __attribute__((ext_vector_type(element_count)))' dependent // CHECK-NEXT: TemplateTypeParmType 0x{{[0-9a-fA-F]+}} 'element' dependent depth 0 index 0 // CHECK-NEXT: TemplateTypeParm 0x{{[0-9a-fA-F]+}} 'element' // CHECK-NEXT: DeclRefExpr 0x{{[0-9a-fA-F]+}} <> 'int' lvalue // NonTypeTemplateParm 0x{{[0-9a-fA-F]+}} 'element_count' 'int' // Make sure we got a using directive at the end. // CHECK: UsingDirectiveDecl 0x{{[0-9a-fA-F]+}} <> Namespace 0x{{[0-9a-fA-F]+}} 'hlsl' [numthreads(1,1,1)] int entry() { // Verify that the alias is generated inside the hlsl namespace. hlsl::vector Vec2 = {1.0, 2.0}; // CHECK: DeclStmt 0x{{[0-9a-fA-F]+}} // CHECK-NEXT: VarDecl 0x{{[0-9a-fA-F]+}} col:26 Vec2 'hlsl::vector':'float __attribute__((ext_vector_type(2)))' cinit // Verify that you don't need to specify the namespace. vector Vec2a = {1, 2}; // CHECK: DeclStmt 0x{{[0-9a-fA-F]+}} // CHECK-NEXT: VarDecl 0x{{[0-9a-fA-F]+}} col:18 Vec2a 'vector':'int __attribute__((ext_vector_type(2)))' cinit // Build a bigger vector. vector Vec4 = {1.0, 2.0, 3.0, 4.0}; // CHECK: DeclStmt 0x{{[0-9a-fA-F]+}} // CHECK-NEXT: VarDecl 0x{{[0-9a-fA-F]+}} col:21 used Vec4 'vector':'double __attribute__((ext_vector_type(4)))' cinit // Verify that swizzles still work. vector Vec3 = Vec4.xyz; // CHECK: DeclStmt 0x{{[0-9a-fA-F]+}} // CHECK-NEXT: VarDecl 0x{{[0-9a-fA-F]+}} col:21 Vec3 'vector':'double __attribute__((ext_vector_type(3)))' cinit // Verify that the implicit arguments generate the correct type. vector<> ImpVec4 = {1.0, 2.0, 3.0, 4.0}; // CHECK: DeclStmt 0x{{[0-9a-fA-F]+}} // CHECK-NEXT: VarDecl 0x{{[0-9a-fA-F]+}} col:12 ImpVec4 'vector<>':'float __attribute__((ext_vector_type(4)))' cinit return 1; }