66 lines · plain
1// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.6-library %s -ast-dump | FileCheck %s2 3// CHECK: FunctionDecl {{.*}} fn 'void (float)'4// CHECK-NEXT: ParmVarDecl {{.*}} f 'float'5// CHECK-NOT: HLSLParamModifierAttr6void fn(float f);7 8// CHECK: FunctionDecl {{.*}}6 fn2 'void (float)'9// CHECK-NEXT: ParmVarDecl {{.*}} f 'float'10// CHECK-NEXT: HLSLParamModifierAttr {{.*}} in11// CHECK-NOT: HLSLParamModifierAttr12void fn2(in float f);13 14// CHECK: FunctionDecl {{.*}} fn3 'void (out float)'15// CHECK-NEXT: ParmVarDecl {{.*}} f 'float &__restrict'16// CHECK-NEXT: HLSLParamModifierAttr {{.*}} out17// CHECK-NOT: HLSLParamModifierAttr18void fn3(out float f);19 20// CHECK: FunctionDecl {{.*}} fn4 'void (inout float)'21// CHECK-NEXT: ParmVarDecl {{.*}} f 'float &__restrict'22// CHECK-NEXT: HLSLParamModifierAttr {{.*}} inout23// CHECK-NOT: HLSLParamModifierAttr24void fn4(inout float f);25 26// CHECK: FunctionDecl {{.*}} fn5 'void (inout float)'27// CHECK-NEXT: ParmVarDecl {{.*}} f 'float &__restrict'28// CHECK-NEXT: HLSLParamModifierAttr {{.*}} inout MergedSpelling29// CHECK-NOT: HLSLParamModifierAttr30void fn5(out in float f);31 32// CHECK: FunctionDecl {{.*}} fn6 'void (inout float)'33// CHECK-NEXT: ParmVarDecl {{.*}} f 'float &__restrict'34// CHECK-NEXT: HLSLParamModifierAttr {{.*}} inout MergedSpelling35// CHECK-NOT: HLSLParamModifierAttr36void fn6(in out float f);37 38// CHECK-NEXT: FunctionTemplateDecl [[Template:0x[0-9a-fA-F]+]] {{.*}} fn739// CHECK-NEXT: TemplateTypeParmDecl {{.*}} referenced typename depth 0 index 0 T40// CHECK-NEXT: FunctionDecl {{.*}} fn7 'void (inout T)'41// CHECK-NEXT: ParmVarDecl {{.*}} f 'T'42// CHECK-NEXT: HLSLParamModifierAttr {{.*}} inout43// CHECK-NEXT: FunctionDecl [[Instantiation:0x[0-9a-fA-F]+]] {{.*}} used fn7 'void (inout float)' implicit_instantiation44// CHECK-NEXT: TemplateArgument type 'float'45// CHECK-NEXT: BuiltinType {{.*}} 'float'46// CHECK-NEXT: ParmVarDecl {{.*}} f 'float &__restrict'47// CHECK-NEXT: HLSLParamModifierAttr {{.*}} inout48 49template <typename T>50void fn7(inout T f);51 52// CHECK: FunctionDecl {{.*}} fn8 'void ()'53// CHECK-NEXT: CompoundStmt54// CHECK-NEXT: DeclStmt55// CHECK-NEXT: VarDecl {{.*}} used f 'float'56// CHECK-NEXT: CallExpr {{.*}} 'void'57// CHECK-NEXT: ImplicitCastExpr {{.*}} 'void (*)(inout float)' <FunctionToPointerDecay>58// CHECK-NEXT: DeclRefExpr {{.*}} 'void (inout float)' lvalue59// CHECK-SAME: Function [[Instantiation]] 'fn7' 'void (inout float)'60// CHECK-SAME: (FunctionTemplate [[Template]] 'fn7')61// CHECK-NEXT: HLSLOutArgExpr {{.*}}'float' lvalue62void fn8() {63 float f;64 fn7<float>(f);65}66