brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.4 KiB · de7f4da Raw
374 lines · cpp
1// RUN: %clang_cc1 %s -fopenacc -ast-dump | FileCheck %s2 3// Test this with PCH.4// RUN: %clang_cc1 %s -fopenacc -emit-pch -o %t %s5// RUN: %clang_cc1 %s -fopenacc -include-pch %t -ast-dump-all | FileCheck %s6 7#ifndef PCH_HELPER8#define PCH_HELPER9 10int some_int();11long some_long();12 13int Global;14short GlobalArray[5];15 16 17void NormalFunc() {18  // CHECK-LABEL: NormalFunc19  // CHECK-NEXT: CompoundStmt20 21#pragma acc update self(Global) if_present if (some_int() < some_long())22  // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update23  // CHECK-NEXT: self clause24  // CHECK-NEXT: DeclRefExpr{{.*}}'Global' 'int'25  // CHECK-NEXT: if_present clause26  // CHECK-NEXT: if clause27  // CHECK-NEXT: BinaryOperator{{.*}}'bool' '<'28  // CHECK-NEXT: ImplicitCastExpr{{.*}}'long'29  // CHECK-NEXT: CallExpr{{.*}}'int'30  // CHECK-NEXT: ImplicitCastExpr31  // CHECK-NEXT: DeclRefExpr{{.*}}'some_int' 'int ()'32  // CHECK-NEXT: CallExpr{{.*}} 'long'33  // CHECK-NEXT: ImplicitCastExpr34  // CHECK-NEXT: DeclRefExpr{{.*}}'some_long' 'long ()'35 36#pragma acc update self(Global) wait async device_type(nvidia) dtype(radeon)37  // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update38  // CHECK-NEXT: self clause39  // CHECK-NEXT: DeclRefExpr{{.*}}'Global' 'int'40  // CHECK-NEXT: wait clause41  // CHECK-NEXT: <<<NULL>>>42  // CHECK-NEXT: async clause43  // CHECK-NEXT: device_type(nvidia)44  // CHECK-NEXT: dtype(radeon)45#pragma acc update self(Global) wait(some_int(), some_long()) async(some_int())46  // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update47  // CHECK-NEXT: self clause48  // CHECK-NEXT: DeclRefExpr{{.*}}'Global' 'int'49  // CHECK-NEXT: wait clause50  // CHECK-NEXT: <<<NULL>>>51  // CHECK-NEXT: CallExpr{{.*}}'int'52  // CHECK-NEXT: ImplicitCastExpr53  // CHECK-NEXT: DeclRefExpr{{.*}}'some_int' 'int ()'54  // CHECK-NEXT: CallExpr{{.*}}'long'55  // CHECK-NEXT: ImplicitCastExpr56  // CHECK-NEXT: DeclRefExpr{{.*}}'some_long' 'long ()'57  // CHECK-NEXT: async clause58  // CHECK-NEXT: CallExpr{{.*}}'int'59  // CHECK-NEXT: ImplicitCastExpr60  // CHECK-NEXT: DeclRefExpr{{.*}}'some_int' 'int ()'61#pragma acc update self(Global) wait(queues:some_int(), some_long())62  // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update63  // CHECK-NEXT: self clause64  // CHECK-NEXT: DeclRefExpr{{.*}}'Global' 'int'65  // CHECK-NEXT: wait clause66  // CHECK-NEXT: <<<NULL>>>67  // CHECK-NEXT: CallExpr{{.*}}'int'68  // CHECK-NEXT: ImplicitCastExpr69  // CHECK-NEXT: DeclRefExpr{{.*}}'some_int' 'int ()'70  // CHECK-NEXT: CallExpr{{.*}}'long'71  // CHECK-NEXT: ImplicitCastExpr72  // CHECK-NEXT: DeclRefExpr{{.*}}'some_long' 'long ()'73#pragma acc update self(Global) wait(devnum: some_int() :some_int(), some_long())74  // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update75  // CHECK-NEXT: self clause76  // CHECK-NEXT: DeclRefExpr{{.*}}'Global' 'int'77  // CHECK-NEXT: wait clause78  // CHECK-NEXT: CallExpr{{.*}}'int'79  // CHECK-NEXT: ImplicitCastExpr80  // CHECK-NEXT: DeclRefExpr{{.*}}'some_int' 'int ()'81  // CHECK-NEXT: CallExpr{{.*}}'int'82  // CHECK-NEXT: ImplicitCastExpr83  // CHECK-NEXT: DeclRefExpr{{.*}}'some_int' 'int ()'84  // CHECK-NEXT: CallExpr{{.*}}'long'85  // CHECK-NEXT: ImplicitCastExpr86  // CHECK-NEXT: DeclRefExpr{{.*}}'some_long' 'long ()'87 88#pragma acc update self(Global, GlobalArray, GlobalArray[0], GlobalArray[0:1])89  // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update90  // CHECK-NEXT: self clause91  // CHECK-NEXT: DeclRefExpr{{.*}}'Global' 'int'92  // CHECK-NEXT: DeclRefExpr{{.*}}'GlobalArray' 'short[5]'93  // CHECK-NEXT: ArraySubscriptExpr{{.*}} 'short' lvalue94  // CHECK-NEXT: ImplicitCastExpr95  // CHECK-NEXT: DeclRefExpr{{.*}}'GlobalArray' 'short[5]'96  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 097  // CHECK-NEXT: ArraySectionExpr98  // CHECK-NEXT: ImplicitCastExpr99  // CHECK-NEXT: DeclRefExpr{{.*}}'GlobalArray' 'short[5]'100  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0101  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1102 103#pragma acc update host(Global, GlobalArray, GlobalArray[0], GlobalArray[0:1]) device(Global, GlobalArray, GlobalArray[0], GlobalArray[0:1])104  // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update105  // CHECK-NEXT: host clause106  // CHECK-NEXT: DeclRefExpr{{.*}}'Global' 'int'107  // CHECK-NEXT: DeclRefExpr{{.*}}'GlobalArray' 'short[5]'108  // CHECK-NEXT: ArraySubscriptExpr{{.*}} 'short' lvalue109  // CHECK-NEXT: ImplicitCastExpr110  // CHECK-NEXT: DeclRefExpr{{.*}}'GlobalArray' 'short[5]'111  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0112  // CHECK-NEXT: ArraySectionExpr113  // CHECK-NEXT: ImplicitCastExpr114  // CHECK-NEXT: DeclRefExpr{{.*}}'GlobalArray' 'short[5]'115  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0116  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1117  // CHECK-NEXT: device clause118  // CHECK-NEXT: DeclRefExpr{{.*}}'Global' 'int'119  // CHECK-NEXT: DeclRefExpr{{.*}}'GlobalArray' 'short[5]'120  // CHECK-NEXT: ArraySubscriptExpr{{.*}} 'short' lvalue121  // CHECK-NEXT: ImplicitCastExpr122  // CHECK-NEXT: DeclRefExpr{{.*}}'GlobalArray' 'short[5]'123  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0124  // CHECK-NEXT: ArraySectionExpr125  // CHECK-NEXT: ImplicitCastExpr126  // CHECK-NEXT: DeclRefExpr{{.*}}'GlobalArray' 'short[5]'127  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0128  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1129}130 131template<typename T>132void TemplFunc(T t) {133  // CHECK-LABEL: FunctionTemplateDecl {{.*}}TemplFunc134  // CHECK-NEXT: TemplateTypeParmDecl135  // CHECK-NEXT: FunctionDecl{{.*}}TemplFunc136  // CHECK-NEXT: ParmVarDecl{{.*}} t 'T'137  // CHECK-NEXT: CompoundStmt138 139#pragma acc update self(t) if_present if (T::value < t)140  // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update141  // CHECK-NEXT: self clause142  // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'143  // CHECK-NEXT: if_present clause144  // CHECK-NEXT: if clause145  // CHECK-NEXT: BinaryOperator{{.*}}'<dependent type>' '<'146  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>'147  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'148  // CHECK-NEXT: DeclRefExpr{{.*}}'t' 'T'149 150#pragma acc update self(t) wait async device_type(default) dtype(host)151  // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update152  // CHECK-NEXT: self clause153  // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'154  // CHECK-NEXT: wait clause155  // CHECK-NEXT: <<<NULL>>>156  // CHECK-NEXT: async clause157  // CHECK-NEXT: device_type(default)158  // CHECK-NEXT: dtype(host)159#pragma acc update self(t) wait(T::value, t) async(T::value)160  // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update161  // CHECK-NEXT: self clause162  // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'163  // CHECK-NEXT: wait clause164  // CHECK-NEXT: <<<NULL>>>165  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}}'<dependent type>'166  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'167  // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'168  // CHECK-NEXT: async clause169  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}}'<dependent type>'170  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'171#pragma acc update self(t) wait(queues:T::value, t) async(t)172  // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update173  // CHECK-NEXT: self clause174  // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'175  // CHECK-NEXT: wait clause176  // CHECK-NEXT: <<<NULL>>>177  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}}'<dependent type>'178  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'179  // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'180  // CHECK-NEXT: async clause181  // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'182#pragma acc update self(t) wait(devnum: T::value:t, T::value)183  // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update184  // CHECK-NEXT: self clause185  // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'186  // CHECK-NEXT: wait clause187  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}}'<dependent type>'188  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'189  // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'190  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}}'<dependent type>'191  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'192 193  decltype(T::value) Local = 0, LocalArray[5] = {};194  // CHECK-NEXT: DeclStmt 195  // CHECK-NEXT: VarDecl196  // CHECK-NEXT: IntegerLiteral197  // CHECK-NEXT: VarDecl198  // CHECK-NEXT: InitListExpr199 200#pragma acc update self(Local, LocalArray, LocalArray[0], LocalArray[0:1])201  // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update202  // CHECK-NEXT: self clause203  // CHECK-NEXT: DeclRefExpr{{.*}} 'Local' 'decltype(T::value)'204  // CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(T::value)[5]'205  // CHECK-NEXT: ArraySubscriptExpr206  // CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(T::value)[5]'207  // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0208  // CHECK-NEXT: ArraySectionExpr209  // CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(T::value)[5]'210  // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0211  // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1212 213#pragma acc update host(Local, LocalArray, LocalArray[0], LocalArray[0:1]) device(Local, LocalArray, LocalArray[0], LocalArray[0:1])214  // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update215  // CHECK-NEXT: host clause216  // CHECK-NEXT: DeclRefExpr{{.*}} 'Local' 'decltype(T::value)'217  // CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(T::value)[5]'218  // CHECK-NEXT: ArraySubscriptExpr219  // CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(T::value)[5]'220  // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0221  // CHECK-NEXT: ArraySectionExpr222  // CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(T::value)[5]'223  // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0224  // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1225  // CHECK-NEXT: device clause226  // CHECK-NEXT: DeclRefExpr{{.*}} 'Local' 'decltype(T::value)'227  // CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(T::value)[5]'228  // CHECK-NEXT: ArraySubscriptExpr229  // CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(T::value)[5]'230  // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0231  // CHECK-NEXT: ArraySectionExpr232  // CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(T::value)[5]'233  // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0234  // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1235 236  // Instantiation:237  // CHECK-NEXT: FunctionDecl{{.*}} TemplFunc 'void (SomeStruct)' implicit_instantiation238  // CHECK-NEXT: TemplateArgument type 'SomeStruct'239  // CHECK-NEXT: RecordType{{.*}} 'SomeStruct'240  // CHECK-NEXT: CXXRecord{{.*}} 'SomeStruct'241  // CHECK-NEXT: ParmVarDecl{{.*}} t 'SomeStruct'242  // CHECK-NEXT: CompoundStmt243 244  // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update245  // CHECK-NEXT: self clause246  // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'SomeStruct'247  // CHECK-NEXT: if_present clause248  // CHECK-NEXT: if clause249  // CHECK-NEXT: BinaryOperator{{.*}}'bool' '<'250  // CHECK-NEXT: ImplicitCastExpr {{.*}}'unsigned int'251  // CHECK-NEXT: DeclRefExpr{{.*}}'value' 'const unsigned int'252  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'SomeStruct'253  // CHECK-NEXT: ImplicitCastExpr {{.*}}'unsigned int'254  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'unsigned int'255  // CHECK-NEXT: MemberExpr{{.*}}.operator unsigned int256  // CHECK-NEXT: DeclRefExpr{{.*}}'t' 'SomeStruct'257 258  // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update259  // CHECK-NEXT: self clause260  // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'SomeStruct'261  // CHECK-NEXT: wait clause262  // CHECK-NEXT: <<<NULL>>>263  // CHECK-NEXT: async clause264  // CHECK-NEXT: device_type(default)265  // CHECK-NEXT: dtype(host)266 267  // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update268  // CHECK-NEXT: self clause269  // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'SomeStruct'270  // CHECK-NEXT: wait clause271  // CHECK-NEXT: <<<NULL>>>272  // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'273  // CHECK-NEXT: DeclRefExpr{{.*}}'value' 'const unsigned int'274  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'SomeStruct'275  // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'276  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'unsigned int'277  // CHECK-NEXT: MemberExpr{{.*}}.operator unsigned int278  // CHECK-NEXT: DeclRefExpr{{.*}}'t' 'SomeStruct'279  // CHECK-NEXT: async clause280  // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'281  // CHECK-NEXT: DeclRefExpr{{.*}}'value' 'const unsigned int'282  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'SomeStruct'283 284  // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update285  // CHECK-NEXT: self clause286  // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'SomeStruct'287  // CHECK-NEXT: wait clause288  // CHECK-NEXT: <<<NULL>>>289  // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'290  // CHECK-NEXT: DeclRefExpr{{.*}}'value' 'const unsigned int'291  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'SomeStruct'292  // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'293  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'unsigned int'294  // CHECK-NEXT: MemberExpr{{.*}}.operator unsigned int295  // CHECK-NEXT: DeclRefExpr{{.*}}'t' 'SomeStruct'296  // CHECK-NEXT: async clause297  // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'298  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'unsigned int'299  // CHECK-NEXT: MemberExpr{{.*}}.operator unsigned int300  // CHECK-NEXT: DeclRefExpr{{.*}}'t' 'SomeStruct'301 302  // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update303  // CHECK-NEXT: self clause304  // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'SomeStruct'305  // CHECK-NEXT: wait clause306  // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'307  // CHECK-NEXT: DeclRefExpr{{.*}}'value' 'const unsigned int'308  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'SomeStruct'309  // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'310  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'unsigned int'311  // CHECK-NEXT: MemberExpr{{.*}}.operator unsigned int312  // CHECK-NEXT: DeclRefExpr{{.*}}'t' 'SomeStruct'313  // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'314  // CHECK-NEXT: DeclRefExpr{{.*}}'value' 'const unsigned int'315  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'SomeStruct'316 317  // CHECK-NEXT: DeclStmt 318  // CHECK-NEXT: VarDecl319  // CHECK-NEXT: ImplicitCastExpr320  // CHECK-NEXT: IntegerLiteral321  // CHECK-NEXT: VarDecl322  // CHECK-NEXT: InitListExpr323  // CHECK-NEXT: array_filler324 325  // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update326  // CHECK-NEXT: self clause327  // CHECK-NEXT: DeclRefExpr{{.*}} 'Local' 'decltype(SomeStruct::value)':'const unsigned int'328  // CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(SomeStruct::value)[5]'329  // CHECK-NEXT: ArraySubscriptExpr330  // CHECK-NEXT: ImplicitCastExpr331  // CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(SomeStruct::value)[5]'332  // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0333  // CHECK-NEXT: ArraySectionExpr334  // CHECK-NEXT: ImplicitCastExpr335  // CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(SomeStruct::value)[5]'336  // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0337  // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1338 339  // CHECK-NEXT: OpenACCUpdateConstruct{{.*}}update340  // CHECK-NEXT: host clause341  // CHECK-NEXT: DeclRefExpr{{.*}} 'Local' 'decltype(SomeStruct::value)':'const unsigned int'342  // CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(SomeStruct::value)[5]'343  // CHECK-NEXT: ArraySubscriptExpr344  // CHECK-NEXT: ImplicitCastExpr345  // CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(SomeStruct::value)[5]'346  // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0347  // CHECK-NEXT: ArraySectionExpr348  // CHECK-NEXT: ImplicitCastExpr349  // CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(SomeStruct::value)[5]'350  // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0351  // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1352  // CHECK-NEXT: device clause353  // CHECK-NEXT: DeclRefExpr{{.*}} 'Local' 'decltype(SomeStruct::value)':'const unsigned int'354  // CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(SomeStruct::value)[5]'355  // CHECK-NEXT: ArraySubscriptExpr356  // CHECK-NEXT: ImplicitCastExpr357  // CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(SomeStruct::value)[5]'358  // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0359  // CHECK-NEXT: ArraySectionExpr360  // CHECK-NEXT: ImplicitCastExpr361  // CHECK-NEXT: DeclRefExpr{{.*}} 'LocalArray' 'decltype(SomeStruct::value)[5]'362  // CHECK-NEXT: IntegerLiteral{{.*}}'int' 0363  // CHECK-NEXT: IntegerLiteral{{.*}}'int' 1364}365 366struct SomeStruct{367  static constexpr unsigned value = 5;368  operator unsigned();369};370void use() {371  TemplFunc(SomeStruct{});372}373#endif374