| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,38 @@ | ||
| // RUN: %clang_cc1 -triple x86_64-unk-unk -o - -emit-llvm -debug-info-kind=standalone -gtemplate-alias %s -gsimple-template-names=simple \ | ||
| // RUN: | FileCheck %s | ||
|
|
||
| //// Check that -gtemplate-alias causes DW_TAG_template_alias emission for | ||
| //// template aliases with default parameter values. See template-alias.cpp for | ||
| //// more template alias tests. | ||
| //// FIXME: We currently do not emit defaulted arguments. | ||
|
|
||
| template<typename T> | ||
| struct X { | ||
| char m; | ||
| }; | ||
|
|
||
| template<typename T> | ||
| struct Y { | ||
| char n; | ||
| }; | ||
|
|
||
| template <typename NonDefault, template <typename C> class T = Y, int I = 5, typename... Ts> | ||
| using A = X<NonDefault>; | ||
|
|
||
| //// We should be able to emit type alias metadata which describes all the | ||
| //// values, including the defaulted parameters and empty parameter pack. | ||
| A<int> a; | ||
|
|
||
| // CHECK: !DIDerivedType(tag: DW_TAG_template_alias, name: "A", file: ![[#]], line: [[#]], baseType: ![[baseType:[0-9]+]], extraData: ![[extraData:[0-9]+]]) | ||
| // CHECK: ![[baseType]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "X", | ||
| // CHECK: ![[int:[0-9]+]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) | ||
| // CHECK: ![[extraData]] = !{![[NonDefault:[0-9]+]]} | ||
| // CHECK: ![[NonDefault]] = !DITemplateTypeParameter(name: "NonDefault", type: ![[int]]) | ||
|
|
||
| //// FIXME: Ideally, we would describe the deafulted args, like this: | ||
| // : ![[extraData]] = !{![[NonDefault:[0-9]+]], ![[T:[0-9]+]], ![[I:[0-9]+]], ![[Ts:[0-9]+]]} | ||
| // : ![[NonDefault]] = !DITemplateTypeParameter(name: "NonDefault", type: ![[int]]) | ||
| // : ![[T]] = !DITemplateValueParameter(tag: DW_TAG_GNU_template_template_param, name: "T", defaulted: true, value: !"Y") | ||
| // : ![[I]] = !DITemplateValueParameter(name: "I", type: ![[int]], defaulted: true, value: i32 5) | ||
| // : ![[Ts]] = !DITemplateValueParameter(tag: DW_TAG_GNU_template_parameter_pack, name: "Ts", value: ![[types:[0-9]+]]) | ||
| // : ![[types]] = !{} |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,47 @@ | ||
| // RUN: %clang_cc1 -triple x86_64-unk-unk -o - -emit-llvm -debug-info-kind=standalone -gtemplate-alias %s -gsimple-template-names=simple \ | ||
| // RUN: | FileCheck %s --check-prefixes=ALIAS-SIMPLE,ALIAS-ALL | ||
|
|
||
| // RUN: %clang_cc1 -triple x86_64-unk-unk -o - -emit-llvm -debug-info-kind=standalone -gtemplate-alias %s -gsimple-template-names=mangled \ | ||
| // RUN: | FileCheck %s --check-prefixes=ALIAS-MANGLED,ALIAS-ALL | ||
|
|
||
| // RUN: %clang_cc1 -triple x86_64-unk-unk -o - -emit-llvm -debug-info-kind=standalone -gtemplate-alias %s \ | ||
| // RUN: | FileCheck %s --check-prefixes=ALIAS-FULL,ALIAS-ALL | ||
|
|
||
| // RUN: %clang_cc1 -triple x86_64-unk-unk -o - -emit-llvm -debug-info-kind=standalone %s \ | ||
| // RUN: | FileCheck %s --check-prefixes=TYPEDEF | ||
|
|
||
|
|
||
| //// Check that -gtemplate-alias causes DW_TAG_template_alias emission for | ||
| //// template aliases, and that respects gsimple-template-names. | ||
| //// | ||
| //// Test type and value template parameters. | ||
|
|
||
| template<typename Y, int Z> | ||
| struct X { | ||
| Y m1 = Z; | ||
| }; | ||
|
|
||
| template<typename B, int C> | ||
| using A = X<B, C>; | ||
|
|
||
| A<int, 5> a; | ||
|
|
||
|
|
||
| // ALIAS-SIMPLE: !DIDerivedType(tag: DW_TAG_template_alias, name: "A", file: ![[#]], line: [[#]], baseType: ![[baseType:[0-9]+]], extraData: ![[extraData:[0-9]+]]) | ||
| // ALIAS-SIMPLE: ![[baseType]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "X", | ||
|
|
||
| // FIXME: Mangled name is wrong (not a regression). | ||
| // ALIAS-MANGLED: !DIDerivedType(tag: DW_TAG_template_alias, name: "A<int, 5>", file: ![[#]], line: [[#]], baseType: ![[baseType:[0-9]+]], extraData: ![[extraData:[0-9]+]]) | ||
| // ALIAS-MANGLED: ![[baseType]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "_STN|X|<int, 5>", | ||
|
|
||
| // ALIAS-FULL: !DIDerivedType(tag: DW_TAG_template_alias, name: "A<int, 5>", file: ![[#]], line: [[#]], baseType: ![[baseType:[0-9]+]], extraData: ![[extraData:[0-9]+]]) | ||
| // ALIAS-FULL: ![[baseType]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "X<int, 5>", | ||
|
|
||
| // ALIAS-ALL: ![[int:[0-9]+]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) | ||
| // ALIAS-ALL: ![[extraData]] = !{![[B:[0-9]+]], ![[C:[0-9]+]]} | ||
| // ALIAS-ALL: ![[B]] = !DITemplateTypeParameter(name: "B", type: ![[int]]) | ||
| // ALIAS-ALL: ![[C]] = !DITemplateValueParameter(name: "C", type: ![[int]], value: i32 5) | ||
|
|
||
| // TYPEDEF: !DIDerivedType(tag: DW_TAG_typedef, name: "A<int, 5>", file: ![[#]], line: [[#]], baseType: ![[baseType:[0-9]+]]) | ||
| // TYPEDEF: ![[baseType]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "X<int, 5>", | ||
| // TYPEDEF: ![[int:[0-9]+]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,25 @@ | ||
| // RUN: %clang_cc1 -triple x86_64-unk-unk -o - -emit-llvm -debug-info-kind=standalone -gtemplate-alias %s -gsimple-template-names=simple \ | ||
| // RUN: | FileCheck %s | ||
|
|
||
| //// Check that -gtemplate-alias causes DW_TAG_template_alias emission for | ||
| //// variadic template aliases. See template-alias.cpp for more template alias | ||
| //// tests. | ||
|
|
||
| template<typename Y, int Z> | ||
| struct X { | ||
| Y m1 = Z; | ||
| }; | ||
|
|
||
| template<int I, typename... Ts> | ||
| using A = X<Ts..., I>; | ||
|
|
||
| A<5, int> a; | ||
|
|
||
| // CHECK: !DIDerivedType(tag: DW_TAG_template_alias, name: "A", file: ![[#]], line: [[#]], baseType: ![[baseType:[0-9]+]], extraData: ![[extraData:[0-9]+]]) | ||
| // CHECK: ![[baseType]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "X", | ||
| // CHECK: ![[int:[0-9]+]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) | ||
| // CHECK: ![[extraData]] = !{![[I:[0-9]+]], ![[Ts:[0-9]+]]} | ||
| // CHECK: ![[I]] = !DITemplateValueParameter(name: "I", type: ![[int]], value: i32 5) | ||
| // CHECK: ![[Ts]] = !DITemplateValueParameter(tag: DW_TAG_GNU_template_parameter_pack, name: "Ts", value: ![[types:[0-9]+]]) | ||
| // CHECK: ![[types]] = !{![[int_template_param:[0-9]+]]} | ||
| // CHECK: ![[int_template_param]] = !DITemplateTypeParameter(type: ![[int]]) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,304 @@ | ||
| // RUN: %clang_cc1 %s -fopenacc -ast-dump | FileCheck %s | ||
|
|
||
| // Test this with PCH. | ||
| // RUN: %clang_cc1 %s -fopenacc -emit-pch -o %t %s | ||
| // RUN: %clang_cc1 %s -fopenacc -include-pch %t -ast-dump-all | FileCheck %s | ||
|
|
||
| #ifndef PCH_HELPER | ||
| #define PCH_HELPER | ||
|
|
||
| int some_int(); | ||
| short some_short(); | ||
| long some_long(); | ||
| enum E{}; | ||
| E some_enum(); | ||
|
|
||
| struct CorrectConvert { | ||
| operator int(); | ||
| } Convert; | ||
|
|
||
|
|
||
| void NormalUses() { | ||
| // CHECK: FunctionDecl{{.*}}NormalUses | ||
| // CHECK-NEXT: CompoundStmt | ||
|
|
||
| #pragma acc parallel num_workers(some_int()) | ||
| while(true){} | ||
| // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel | ||
| // CHECK-NEXT: num_workers clause | ||
| // CHECK-NEXT: CallExpr{{.*}}'int' | ||
| // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay> | ||
| // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()' | ||
| // CHECK-NEXT: WhileStmt | ||
| // CHECK-NEXT: CXXBoolLiteralExpr | ||
| // CHECK-NEXT: CompoundStmt | ||
|
|
||
| #pragma acc kernels num_workers(some_short()) | ||
| while(true){} | ||
| // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels | ||
| // CHECK-NEXT: num_workers clause | ||
| // CHECK-NEXT: CallExpr{{.*}}'short' | ||
| // CHECK-NEXT: ImplicitCastExpr{{.*}}'short (*)()' <FunctionToPointerDecay> | ||
| // CHECK-NEXT: DeclRefExpr{{.*}}'short ()' lvalue Function{{.*}} 'some_short' 'short ()' | ||
| // CHECK-NEXT: WhileStmt | ||
| // CHECK-NEXT: CXXBoolLiteralExpr | ||
| // CHECK-NEXT: CompoundStmt | ||
|
|
||
| #pragma acc parallel num_workers(some_long()) | ||
| while(true){} | ||
| // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel | ||
| // CHECK-NEXT: num_workers clause | ||
| // CHECK-NEXT: CallExpr{{.*}}'long' | ||
| // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay> | ||
| // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()' | ||
| // CHECK-NEXT: WhileStmt | ||
| // CHECK-NEXT: CXXBoolLiteralExpr | ||
| // CHECK-NEXT: CompoundStmt | ||
|
|
||
| #pragma acc parallel num_workers(some_enum()) | ||
| while(true){} | ||
| // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel | ||
| // CHECK-NEXT: num_workers clause | ||
| // CHECK-NEXT: CallExpr{{.*}}'E' | ||
| // CHECK-NEXT: ImplicitCastExpr{{.*}}'E (*)()' <FunctionToPointerDecay> | ||
| // CHECK-NEXT: DeclRefExpr{{.*}}'E ()' lvalue Function{{.*}} 'some_enum' 'E ()' | ||
| // CHECK-NEXT: WhileStmt | ||
| // CHECK-NEXT: CXXBoolLiteralExpr | ||
| // CHECK-NEXT: CompoundStmt | ||
|
|
||
| #pragma acc kernels num_workers(Convert) | ||
| while(true){} | ||
| // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels | ||
| // CHECK-NEXT: num_workers clause | ||
| // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <UserDefinedConversion> | ||
| // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int' | ||
| // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator int | ||
| // CHECK-NEXT: DeclRefExpr{{.*}} 'struct CorrectConvert':'CorrectConvert' lvalue Var | ||
| // CHECK-NEXT: WhileStmt | ||
| // CHECK-NEXT: CXXBoolLiteralExpr | ||
| // CHECK-NEXT: CompoundStmt | ||
|
|
||
| #pragma acc kernels vector_length(some_short()) | ||
| while(true){} | ||
| // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels | ||
| // CHECK-NEXT: vector_length clause | ||
| // CHECK-NEXT: CallExpr{{.*}}'short' | ||
| // CHECK-NEXT: ImplicitCastExpr{{.*}}'short (*)()' <FunctionToPointerDecay> | ||
| // CHECK-NEXT: DeclRefExpr{{.*}}'short ()' lvalue Function{{.*}} 'some_short' 'short ()' | ||
| // CHECK-NEXT: WhileStmt | ||
| // CHECK-NEXT: CXXBoolLiteralExpr | ||
| // CHECK-NEXT: CompoundStmt | ||
| } | ||
|
|
||
| template<typename T, typename U> | ||
| void TemplUses(T t, U u) { | ||
| // CHECK-NEXT: FunctionTemplateDecl | ||
| // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 0 T | ||
| // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 1 U | ||
| // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void (T, U)' | ||
| // CHECK-NEXT: ParmVarDecl{{.*}} referenced t 'T' | ||
| // CHECK-NEXT: ParmVarDecl{{.*}} referenced u 'U' | ||
| // CHECK-NEXT: CompoundStmt | ||
|
|
||
| #pragma acc parallel num_workers(t) | ||
| while(true){} | ||
| // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel | ||
| // CHECK-NEXT: num_workers clause | ||
| // CHECK-NEXT: DeclRefExpr{{.*}} 'T' lvalue ParmVar{{.*}} 't' 'T' | ||
| // CHECK-NEXT: WhileStmt | ||
| // CHECK-NEXT: CXXBoolLiteralExpr | ||
| // CHECK-NEXT: CompoundStmt | ||
|
|
||
| #pragma acc kernels num_workers(u) | ||
| while(true){} | ||
| // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels | ||
| // CHECK-NEXT: num_workers clause | ||
| // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U' | ||
| // CHECK-NEXT: WhileStmt | ||
| // CHECK-NEXT: CXXBoolLiteralExpr | ||
| // CHECK-NEXT: CompoundStmt | ||
|
|
||
| #pragma acc parallel num_workers(U::value) | ||
| while(true){} | ||
| // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel | ||
| // CHECK-NEXT: num_workers clause | ||
| // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue | ||
| // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U' | ||
| // CHECK-NEXT: WhileStmt | ||
| // CHECK-NEXT: CXXBoolLiteralExpr | ||
| // CHECK-NEXT: CompoundStmt | ||
|
|
||
| #pragma acc kernels num_workers(T{}) | ||
| while(true){} | ||
| // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels | ||
| // CHECK-NEXT: num_workers clause | ||
| // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}} 'T' 'T' list | ||
| // CHECK-NEXT: InitListExpr{{.*}} 'void' | ||
| // CHECK-NEXT: WhileStmt | ||
| // CHECK-NEXT: CXXBoolLiteralExpr | ||
| // CHECK-NEXT: CompoundStmt | ||
|
|
||
| #pragma acc parallel num_workers(U{}) | ||
| while(true){} | ||
| // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel | ||
| // CHECK-NEXT: num_workers clause | ||
| // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}} 'U' 'U' list | ||
| // CHECK-NEXT: InitListExpr{{.*}} 'void' | ||
| // CHECK-NEXT: WhileStmt | ||
| // CHECK-NEXT: CXXBoolLiteralExpr | ||
| // CHECK-NEXT: CompoundStmt | ||
|
|
||
| #pragma acc kernels num_workers(typename U::IntTy{}) | ||
| while(true){} | ||
| // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels | ||
| // CHECK-NEXT: num_workers clause | ||
| // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}} 'typename U::IntTy' 'typename U::IntTy' list | ||
| // CHECK-NEXT: InitListExpr{{.*}} 'void' | ||
| // CHECK-NEXT: WhileStmt | ||
| // CHECK-NEXT: CXXBoolLiteralExpr | ||
| // CHECK-NEXT: CompoundStmt | ||
|
|
||
| #pragma acc parallel num_workers(typename U::ShortTy{}) | ||
| while(true){} | ||
| // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel | ||
| // CHECK-NEXT: num_workers clause | ||
| // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}} 'typename U::ShortTy' 'typename U::ShortTy' list | ||
| // CHECK-NEXT: InitListExpr{{.*}} 'void' | ||
| // CHECK-NEXT: WhileStmt | ||
| // CHECK-NEXT: CXXBoolLiteralExpr | ||
| // CHECK-NEXT: CompoundStmt | ||
|
|
||
| #pragma acc kernels vector_length(u) | ||
| while(true){} | ||
| // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels | ||
| // CHECK-NEXT: vector_length clause | ||
| // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U' | ||
| // CHECK-NEXT: WhileStmt | ||
| // CHECK-NEXT: CXXBoolLiteralExpr | ||
| // CHECK-NEXT: CompoundStmt | ||
|
|
||
| #pragma acc parallel vector_length(U::value) | ||
| while(true){} | ||
| // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel | ||
| // CHECK-NEXT: vector_length clause | ||
| // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue | ||
| // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U' | ||
| // CHECK-NEXT: WhileStmt | ||
| // CHECK-NEXT: CXXBoolLiteralExpr | ||
| // CHECK-NEXT: CompoundStmt | ||
|
|
||
| // Check the instantiated versions of the above. | ||
| // CHECK-NEXT: FunctionDecl{{.*}} used TemplUses 'void (CorrectConvert, HasInt)' implicit_instantiation | ||
| // CHECK-NEXT: TemplateArgument type 'CorrectConvert' | ||
| // CHECK-NEXT: RecordType{{.*}} 'CorrectConvert' | ||
| // CHECK-NEXT: CXXRecord{{.*}} 'CorrectConvert' | ||
| // CHECK-NEXT: TemplateArgument type 'HasInt' | ||
| // CHECK-NEXT: RecordType{{.*}} 'HasInt' | ||
| // CHECK-NEXT: CXXRecord{{.*}} 'HasInt' | ||
| // CHECK-NEXT: ParmVarDecl{{.*}} used t 'CorrectConvert' | ||
| // CHECK-NEXT: ParmVarDecl{{.*}} used u 'HasInt' | ||
| // CHECK-NEXT: CompoundStmt | ||
|
|
||
| // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel | ||
| // CHECK-NEXT: num_workers clause | ||
| // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <UserDefinedConversion> | ||
| // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int' | ||
| // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator int | ||
| // CHECK-NEXT: DeclRefExpr{{.*}} 'CorrectConvert' lvalue ParmVar | ||
| // CHECK-NEXT: WhileStmt | ||
| // CHECK-NEXT: CXXBoolLiteralExpr | ||
| // CHECK-NEXT: CompoundStmt | ||
|
|
||
| // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels | ||
| // CHECK-NEXT: num_workers clause | ||
| // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion> | ||
| // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char' | ||
| // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char | ||
| // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar | ||
| // CHECK-NEXT: WhileStmt | ||
| // CHECK-NEXT: CXXBoolLiteralExpr | ||
| // CHECK-NEXT: CompoundStmt | ||
|
|
||
| // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel | ||
| // CHECK-NEXT: num_workers clause | ||
| // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> | ||
| // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int' | ||
| // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt' | ||
| // CHECK-NEXT: WhileStmt | ||
| // CHECK-NEXT: CXXBoolLiteralExpr | ||
| // CHECK-NEXT: CompoundStmt | ||
|
|
||
| // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels | ||
| // CHECK-NEXT: num_workers clause | ||
| // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <UserDefinedConversion> | ||
| // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int' | ||
| // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator int | ||
| // CHECK-NEXT: MaterializeTemporaryExpr{{.*}} 'CorrectConvert' lvalue | ||
| // CHECK-NEXT: CXXFunctionalCastExpr{{.*}} 'CorrectConvert' functional cast to struct CorrectConvert <NoOp> | ||
| // CHECK-NEXT: InitListExpr{{.*}}'CorrectConvert' | ||
| // CHECK-NEXT: WhileStmt | ||
| // CHECK-NEXT: ExprWithCleanups | ||
| // CHECK-NEXT: CXXBoolLiteralExpr | ||
| // CHECK-NEXT: CompoundStmt | ||
|
|
||
| // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel | ||
| // CHECK-NEXT: num_workers clause | ||
| // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion> | ||
| // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char' | ||
| // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char | ||
| // CHECK-NEXT: MaterializeTemporaryExpr{{.*}} 'HasInt' lvalue | ||
| // CHECK-NEXT: CXXFunctionalCastExpr{{.*}} 'HasInt' functional cast to struct HasInt <NoOp> | ||
| // CHECK-NEXT: InitListExpr{{.*}}'HasInt' | ||
| // CHECK-NEXT: WhileStmt | ||
| // CHECK-NEXT: ExprWithCleanups | ||
| // CHECK-NEXT: CXXBoolLiteralExpr | ||
| // CHECK-NEXT: CompoundStmt | ||
|
|
||
| // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels | ||
| // CHECK-NEXT: num_workers clause | ||
| // CHECK-NEXT: CXXFunctionalCastExpr{{.*}} 'typename HasInt::IntTy':'int' functional cast to typename struct HasInt::IntTy <NoOp> | ||
| // CHECK-NEXT: InitListExpr{{.*}}'typename HasInt::IntTy':'int' | ||
| // CHECK-NEXT: WhileStmt | ||
| // CHECK-NEXT: CXXBoolLiteralExpr | ||
| // CHECK-NEXT: CompoundStmt | ||
|
|
||
| // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel | ||
| // CHECK-NEXT: num_workers clause | ||
| // CHECK-NEXT: CXXFunctionalCastExpr{{.*}} 'typename HasInt::ShortTy':'short' functional cast to typename struct HasInt::ShortTy <NoOp> | ||
| // CHECK-NEXT: InitListExpr{{.*}}'typename HasInt::ShortTy':'short' | ||
| // CHECK-NEXT: WhileStmt | ||
| // CHECK-NEXT: CXXBoolLiteralExpr | ||
| // CHECK-NEXT: CompoundStmt | ||
|
|
||
| // CHECK-NEXT: OpenACCComputeConstruct{{.*}}kernels | ||
| // CHECK-NEXT: vector_length clause | ||
| // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion> | ||
| // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char' | ||
| // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char | ||
| // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar | ||
| // CHECK-NEXT: WhileStmt | ||
| // CHECK-NEXT: CXXBoolLiteralExpr | ||
| // CHECK-NEXT: CompoundStmt | ||
|
|
||
| // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel | ||
| // CHECK-NEXT: vector_length clause | ||
| // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue> | ||
| // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int' | ||
| // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt' | ||
| // CHECK-NEXT: WhileStmt | ||
| // CHECK-NEXT: CXXBoolLiteralExpr | ||
| // CHECK-NEXT: CompoundStmt | ||
| } | ||
|
|
||
| struct HasInt { | ||
| using IntTy = int; | ||
| using ShortTy = short; | ||
| static constexpr int value = 1; | ||
|
|
||
| operator char(); | ||
| }; | ||
|
|
||
| void Inst() { | ||
| TemplUses<CorrectConvert, HasInt>({}, {}); | ||
| } | ||
| #endif // PCH_HELPER |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,33 @@ | ||
| // RUN: %clang_cc1 %s -fopenacc -verify | ||
|
|
||
| short getS(); | ||
|
|
||
| void Test() { | ||
| #pragma acc parallel num_workers(1) | ||
| while(1); | ||
| #pragma acc kernels num_workers(1) | ||
| while(1); | ||
|
|
||
| // expected-error@+1{{OpenACC 'num_workers' clause is not valid on 'serial' directive}} | ||
| #pragma acc serial num_workers(1) | ||
| while(1); | ||
|
|
||
| struct NotConvertible{} NC; | ||
| // expected-error@+1{{OpenACC clause 'num_workers' requires expression of integer type ('struct NotConvertible' invalid)}} | ||
| #pragma acc parallel num_workers(NC) | ||
| while(1); | ||
|
|
||
| #pragma acc kernels num_workers(getS()) | ||
| while(1); | ||
|
|
||
| struct Incomplete *SomeIncomplete; | ||
|
|
||
| // expected-error@+1{{OpenACC clause 'num_workers' requires expression of integer type ('struct Incomplete' invalid)}} | ||
| #pragma acc kernels num_workers(*SomeIncomplete) | ||
| while(1); | ||
|
|
||
| enum E{A} SomeE; | ||
|
|
||
| #pragma acc kernels num_workers(SomeE) | ||
| while(1); | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,133 @@ | ||
| // RUN: %clang_cc1 %s -fopenacc -verify | ||
|
|
||
| struct NotConvertible{} NC; | ||
| struct Incomplete *SomeIncomplete; // #INCOMPLETE | ||
| enum E{} SomeE; | ||
| enum class E2{} SomeE2; | ||
|
|
||
| struct CorrectConvert { | ||
| operator int(); | ||
| } Convert; | ||
|
|
||
| struct ExplicitConvertOnly { | ||
| explicit operator int() const; // #EXPL_CONV | ||
| } Explicit; | ||
|
|
||
| struct AmbiguousConvert{ | ||
| operator int(); // #AMBIG_INT | ||
| operator short(); // #AMBIG_SHORT | ||
| operator float(); | ||
| } Ambiguous; | ||
|
|
||
| void Test() { | ||
| #pragma acc parallel num_workers(1) | ||
| while(1); | ||
| #pragma acc kernels num_workers(1) | ||
| while(1); | ||
|
|
||
| // expected-error@+1{{OpenACC clause 'num_workers' requires expression of integer type ('struct NotConvertible' invalid}} | ||
| #pragma acc parallel num_workers(NC) | ||
| while(1); | ||
|
|
||
| // expected-error@+2{{OpenACC integer expression has incomplete class type 'struct Incomplete'}} | ||
| // expected-note@#INCOMPLETE{{forward declaration of 'Incomplete'}} | ||
| #pragma acc kernels num_workers(*SomeIncomplete) | ||
| while(1); | ||
|
|
||
| #pragma acc parallel num_workers(SomeE) | ||
| while(1); | ||
|
|
||
| // expected-error@+1{{OpenACC clause 'num_workers' requires expression of integer type ('enum E2' invalid}} | ||
| #pragma acc kernels num_workers(SomeE2) | ||
| while(1); | ||
|
|
||
| #pragma acc parallel num_workers(Convert) | ||
| while(1); | ||
|
|
||
| // expected-error@+2{{OpenACC integer expression type 'struct ExplicitConvertOnly' requires explicit conversion to 'int'}} | ||
| // expected-note@#EXPL_CONV{{conversion to integral type 'int'}} | ||
| #pragma acc kernels num_workers(Explicit) | ||
| while(1); | ||
|
|
||
| // expected-error@+3{{multiple conversions from expression type 'struct AmbiguousConvert' to an integral type}} | ||
| // expected-note@#AMBIG_INT{{conversion to integral type 'int'}} | ||
| // expected-note@#AMBIG_SHORT{{conversion to integral type 'short'}} | ||
| #pragma acc parallel num_workers(Ambiguous) | ||
| while(1); | ||
| } | ||
|
|
||
| struct HasInt { | ||
| using IntTy = int; | ||
| using ShortTy = short; | ||
| static constexpr int value = 1; | ||
| static constexpr AmbiguousConvert ACValue; | ||
| static constexpr ExplicitConvertOnly EXValue; | ||
|
|
||
| operator char(); | ||
| }; | ||
|
|
||
| template<typename T> | ||
| void TestInst() { | ||
|
|
||
| // expected-error@+1{{no member named 'Invalid' in 'HasInt'}} | ||
| #pragma acc parallel num_workers(HasInt::Invalid) | ||
| while (1); | ||
|
|
||
| // expected-error@+2{{no member named 'Invalid' in 'HasInt'}} | ||
| // expected-note@#INST{{in instantiation of function template specialization 'TestInst<HasInt>' requested here}} | ||
| #pragma acc kernels num_workers(T::Invalid) | ||
| while (1); | ||
|
|
||
| // expected-error@+3{{multiple conversions from expression type 'const AmbiguousConvert' to an integral type}} | ||
| // expected-note@#AMBIG_INT{{conversion to integral type 'int'}} | ||
| // expected-note@#AMBIG_SHORT{{conversion to integral type 'short'}} | ||
| #pragma acc parallel num_workers(HasInt::ACValue) | ||
| while (1); | ||
|
|
||
| // expected-error@+3{{multiple conversions from expression type 'const AmbiguousConvert' to an integral type}} | ||
| // expected-note@#AMBIG_INT{{conversion to integral type 'int'}} | ||
| // expected-note@#AMBIG_SHORT{{conversion to integral type 'short'}} | ||
| #pragma acc kernels num_workers(T::ACValue) | ||
| while (1); | ||
|
|
||
| // expected-error@+2{{OpenACC integer expression type 'const ExplicitConvertOnly' requires explicit conversion to 'int'}} | ||
| // expected-note@#EXPL_CONV{{conversion to integral type 'int'}} | ||
| #pragma acc parallel num_workers(HasInt::EXValue) | ||
| while (1); | ||
|
|
||
| // expected-error@+2{{OpenACC integer expression type 'const ExplicitConvertOnly' requires explicit conversion to 'int'}} | ||
| // expected-note@#EXPL_CONV{{conversion to integral type 'int'}} | ||
| #pragma acc kernels num_workers(T::EXValue) | ||
| while (1); | ||
|
|
||
| #pragma acc parallel num_workers(HasInt::value) | ||
| while (1); | ||
|
|
||
| #pragma acc kernels num_workers(T::value) | ||
| while (1); | ||
|
|
||
| #pragma acc parallel num_workers(HasInt::IntTy{}) | ||
| while (1); | ||
|
|
||
| #pragma acc kernels num_workers(typename T::ShortTy{}) | ||
| while (1); | ||
|
|
||
| #pragma acc parallel num_workers(HasInt::IntTy{}) | ||
| while (1); | ||
|
|
||
| #pragma acc kernels num_workers(typename T::ShortTy{}) | ||
| while (1); | ||
|
|
||
| HasInt HI{}; | ||
| T MyT{}; | ||
|
|
||
| #pragma acc parallel num_workers(HI) | ||
| while (1); | ||
|
|
||
| #pragma acc kernels num_workers(MyT) | ||
| while (1); | ||
| } | ||
|
|
||
| void Inst() { | ||
| TestInst<HasInt>(); // #INST | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,33 @@ | ||
| // RUN: %clang_cc1 %s -fopenacc -verify | ||
|
|
||
| short getS(); | ||
|
|
||
| void Test() { | ||
| #pragma acc parallel vector_length(1) | ||
| while(1); | ||
| #pragma acc kernels vector_length(1) | ||
| while(1); | ||
|
|
||
| // expected-error@+1{{OpenACC 'vector_length' clause is not valid on 'serial' directive}} | ||
| #pragma acc serial vector_length(1) | ||
| while(1); | ||
|
|
||
| struct NotConvertible{} NC; | ||
| // expected-error@+1{{OpenACC clause 'vector_length' requires expression of integer type ('struct NotConvertible' invalid)}} | ||
| #pragma acc parallel vector_length(NC) | ||
| while(1); | ||
|
|
||
| #pragma acc kernels vector_length(getS()) | ||
| while(1); | ||
|
|
||
| struct Incomplete *SomeIncomplete; | ||
|
|
||
| // expected-error@+1{{OpenACC clause 'vector_length' requires expression of integer type ('struct Incomplete' invalid)}} | ||
| #pragma acc kernels vector_length(*SomeIncomplete) | ||
| while(1); | ||
|
|
||
| enum E{A} SomeE; | ||
|
|
||
| #pragma acc kernels vector_length(SomeE) | ||
| while(1); | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,133 @@ | ||
| // RUN: %clang_cc1 %s -fopenacc -verify | ||
|
|
||
| struct NotConvertible{} NC; | ||
| struct Incomplete *SomeIncomplete; // #INCOMPLETE | ||
| enum E{} SomeE; | ||
| enum class E2{} SomeE2; | ||
|
|
||
| struct CorrectConvert { | ||
| operator int(); | ||
| } Convert; | ||
|
|
||
| struct ExplicitConvertOnly { | ||
| explicit operator int() const; // #EXPL_CONV | ||
| } Explicit; | ||
|
|
||
| struct AmbiguousConvert{ | ||
| operator int(); // #AMBIG_INT | ||
| operator short(); // #AMBIG_SHORT | ||
| operator float(); | ||
| } Ambiguous; | ||
|
|
||
| void Test() { | ||
| #pragma acc parallel vector_length(1) | ||
| while(1); | ||
| #pragma acc kernels vector_length(1) | ||
| while(1); | ||
|
|
||
| // expected-error@+1{{OpenACC clause 'vector_length' requires expression of integer type ('struct NotConvertible' invalid}} | ||
| #pragma acc parallel vector_length(NC) | ||
| while(1); | ||
|
|
||
| // expected-error@+2{{OpenACC integer expression has incomplete class type 'struct Incomplete'}} | ||
| // expected-note@#INCOMPLETE{{forward declaration of 'Incomplete'}} | ||
| #pragma acc kernels vector_length(*SomeIncomplete) | ||
| while(1); | ||
|
|
||
| #pragma acc parallel vector_length(SomeE) | ||
| while(1); | ||
|
|
||
| // expected-error@+1{{OpenACC clause 'vector_length' requires expression of integer type ('enum E2' invalid}} | ||
| #pragma acc kernels vector_length(SomeE2) | ||
| while(1); | ||
|
|
||
| #pragma acc parallel vector_length(Convert) | ||
| while(1); | ||
|
|
||
| // expected-error@+2{{OpenACC integer expression type 'struct ExplicitConvertOnly' requires explicit conversion to 'int'}} | ||
| // expected-note@#EXPL_CONV{{conversion to integral type 'int'}} | ||
| #pragma acc kernels vector_length(Explicit) | ||
| while(1); | ||
|
|
||
| // expected-error@+3{{multiple conversions from expression type 'struct AmbiguousConvert' to an integral type}} | ||
| // expected-note@#AMBIG_INT{{conversion to integral type 'int'}} | ||
| // expected-note@#AMBIG_SHORT{{conversion to integral type 'short'}} | ||
| #pragma acc parallel vector_length(Ambiguous) | ||
| while(1); | ||
| } | ||
|
|
||
| struct HasInt { | ||
| using IntTy = int; | ||
| using ShortTy = short; | ||
| static constexpr int value = 1; | ||
| static constexpr AmbiguousConvert ACValue; | ||
| static constexpr ExplicitConvertOnly EXValue; | ||
|
|
||
| operator char(); | ||
| }; | ||
|
|
||
| template<typename T> | ||
| void TestInst() { | ||
|
|
||
| // expected-error@+1{{no member named 'Invalid' in 'HasInt'}} | ||
| #pragma acc parallel vector_length(HasInt::Invalid) | ||
| while (1); | ||
|
|
||
| // expected-error@+2{{no member named 'Invalid' in 'HasInt'}} | ||
| // expected-note@#INST{{in instantiation of function template specialization 'TestInst<HasInt>' requested here}} | ||
| #pragma acc kernels vector_length(T::Invalid) | ||
| while (1); | ||
|
|
||
| // expected-error@+3{{multiple conversions from expression type 'const AmbiguousConvert' to an integral type}} | ||
| // expected-note@#AMBIG_INT{{conversion to integral type 'int'}} | ||
| // expected-note@#AMBIG_SHORT{{conversion to integral type 'short'}} | ||
| #pragma acc parallel vector_length(HasInt::ACValue) | ||
| while (1); | ||
|
|
||
| // expected-error@+3{{multiple conversions from expression type 'const AmbiguousConvert' to an integral type}} | ||
| // expected-note@#AMBIG_INT{{conversion to integral type 'int'}} | ||
| // expected-note@#AMBIG_SHORT{{conversion to integral type 'short'}} | ||
| #pragma acc kernels vector_length(T::ACValue) | ||
| while (1); | ||
|
|
||
| // expected-error@+2{{OpenACC integer expression type 'const ExplicitConvertOnly' requires explicit conversion to 'int'}} | ||
| // expected-note@#EXPL_CONV{{conversion to integral type 'int'}} | ||
| #pragma acc parallel vector_length(HasInt::EXValue) | ||
| while (1); | ||
|
|
||
| // expected-error@+2{{OpenACC integer expression type 'const ExplicitConvertOnly' requires explicit conversion to 'int'}} | ||
| // expected-note@#EXPL_CONV{{conversion to integral type 'int'}} | ||
| #pragma acc kernels vector_length(T::EXValue) | ||
| while (1); | ||
|
|
||
| #pragma acc parallel vector_length(HasInt::value) | ||
| while (1); | ||
|
|
||
| #pragma acc kernels vector_length(T::value) | ||
| while (1); | ||
|
|
||
| #pragma acc parallel vector_length(HasInt::IntTy{}) | ||
| while (1); | ||
|
|
||
| #pragma acc kernels vector_length(typename T::ShortTy{}) | ||
| while (1); | ||
|
|
||
| #pragma acc parallel vector_length(HasInt::IntTy{}) | ||
| while (1); | ||
|
|
||
| #pragma acc kernels vector_length(typename T::ShortTy{}) | ||
| while (1); | ||
|
|
||
| HasInt HI{}; | ||
| T MyT{}; | ||
|
|
||
| #pragma acc parallel vector_length(HI) | ||
| while (1); | ||
|
|
||
| #pragma acc kernels vector_length(MyT) | ||
| while (1); | ||
| } | ||
|
|
||
| void Inst() { | ||
| TestInst<HasInt>(); // #INST | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -71,6 +71,7 @@ stages there is no ABI stability in any form. | |
| c23 | ||
| ctype | ||
| signal | ||
| threads | ||
|
|
||
| .. toctree:: | ||
| :hidden: | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,88 @@ | ||
| .. include:: check.rst | ||
|
|
||
| threads.h Functions | ||
| =================== | ||
|
|
||
| .. list-table:: | ||
| :widths: auto | ||
| :align: center | ||
| :header-rows: 1 | ||
|
|
||
| * - Function | ||
| - Implemented | ||
| - Standard | ||
| * - call_once | ||
| - |check| | ||
| - 7.28.2.1 | ||
| * - cnd_broadcast | ||
| - |check| | ||
| - 7.28.3.1 | ||
| * - cnd_destroy | ||
| - |check| | ||
| - 7.28.3.2 | ||
| * - cnd_init | ||
| - |check| | ||
| - 7.28.3.3 | ||
| * - cnd_signal | ||
| - |check| | ||
| - 7.28.3.4 | ||
| * - cnd_timedwait | ||
| - | ||
| - 7.28.3.5 | ||
| * - cnd_wait | ||
| - |check| | ||
| - 7.28.3.6 | ||
| * - mtx_destroy | ||
| - |check| | ||
| - 7.28.4.1 | ||
| * - mtx_init | ||
| - |check| | ||
| - 7.28.4.2 | ||
| * - mtx_lock | ||
| - |check| | ||
| - 7.28.4.3 | ||
| * - mtx_timedlock | ||
| - | ||
| - 7.28.4.4 | ||
| * - mtx_trylock | ||
| - | ||
| - 7.28.4.5 | ||
| * - mtx_unlock | ||
| - |check| | ||
| - 7.28.4.6 | ||
| * - thrd_create | ||
| - |check| | ||
| - 7.28.5.1 | ||
| * - thrd_current | ||
| - |check| | ||
| - 7.28.5.2 | ||
| * - thrd_detach | ||
| - |check| | ||
| - 7.28.5.3 | ||
| * - thrd_equal | ||
| - |check| | ||
| - 7.28.5.4 | ||
| * - thrd_exit | ||
| - |check| | ||
| - 7.28.5.5 | ||
| * - thrd_join | ||
| - |check| | ||
| - 7.28.5.6 | ||
| * - thrd_sleep | ||
| - | ||
| - 7.28.5.7 | ||
| * - thrd_yield | ||
| - | ||
| - 7.28.5.8 | ||
| * - tss_create | ||
| - |check| | ||
| - 7.28.6.1 | ||
| * - tss_delete | ||
| - |check| | ||
| - 7.28.6.2 | ||
| * - tss_get | ||
| - |check| | ||
| - 7.28.6.3 | ||
| * - tss_set | ||
| - |check| | ||
| - 7.28.6.4 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,29 +1,47 @@ | ||
| { | ||
| "macros": { | ||
| "SIG_DFL": { | ||
| "defined": "7.14.3" | ||
| }, | ||
| "SIG_ERR": { | ||
| "defined": "7.14.3" | ||
| }, | ||
| "SIG_IGN": { | ||
| "defined": "7.14.3" | ||
| }, | ||
| "SIGABRT": { | ||
| "defined": "7.14.3" | ||
| }, | ||
| "SIGFPE": { | ||
| "defined": "7.14.3" | ||
| }, | ||
| "SIGILL": { | ||
| "defined": "7.14.3" | ||
| }, | ||
| "SIGINT": { | ||
| "defined": "7.14.3" | ||
| }, | ||
| "SIGSEGV": { | ||
| "defined": "7.14.3" | ||
| }, | ||
| "SIGTERM": { | ||
| "defined": "7.14.3" | ||
| } | ||
| }, | ||
| "functions": { | ||
| "signal": { | ||
| "defined": "7.14.1.1" | ||
| }, | ||
| "raise": { | ||
| "defined": "7.14.2.1" | ||
| }, | ||
| "kill": null, | ||
| "sigaction": null, | ||
| "sigaddset": null, | ||
| "sigaltstack": null, | ||
| "sigdelset": null, | ||
| "sigemptyset": null, | ||
| "sigfillset": null, | ||
| "sigprocmask": null | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,87 @@ | ||
| { | ||
| "macros": { | ||
| "ONCE_FLAG_INIT": { | ||
| "defined": "7.28.1.3" | ||
| }, | ||
| "TSS_DTOR_ITERATIONS": { | ||
| "defined": "7.28.1.3" | ||
| } | ||
| }, | ||
| "functions": { | ||
| "call_once": { | ||
| "defined": "7.28.2.1" | ||
| }, | ||
| "cnd_broadcast": { | ||
| "defined": "7.28.3.1" | ||
| }, | ||
| "cnd_destroy": { | ||
| "defined": "7.28.3.2" | ||
| }, | ||
| "cnd_init": { | ||
| "defined": "7.28.3.3" | ||
| }, | ||
| "cnd_signal": { | ||
| "defined": "7.28.3.4" | ||
| }, | ||
| "cnd_timedwait": { | ||
| "defined": "7.28.3.5" | ||
| }, | ||
| "cnd_wait": { | ||
| "defined": "7.28.3.6" | ||
| }, | ||
| "mtx_destroy": { | ||
| "defined": "7.28.4.1" | ||
| }, | ||
| "mtx_init": { | ||
| "defined": "7.28.4.2" | ||
| }, | ||
| "mtx_lock": { | ||
| "defined": "7.28.4.3" | ||
| }, | ||
| "mtx_timedlock": { | ||
| "defined": "7.28.4.4" | ||
| }, | ||
| "mtx_trylock": { | ||
| "defined": "7.28.4.5" | ||
| }, | ||
| "mtx_unlock": { | ||
| "defined": "7.28.4.6" | ||
| }, | ||
| "thrd_create": { | ||
| "defined": "7.28.5.1" | ||
| }, | ||
| "thrd_current": { | ||
| "defined": "7.28.5.2" | ||
| }, | ||
| "thrd_detach": { | ||
| "defined": "7.28.5.3" | ||
| }, | ||
| "thrd_equal": { | ||
| "defined": "7.28.5.4" | ||
| }, | ||
| "thrd_exit": { | ||
| "defined": "7.28.5.5" | ||
| }, | ||
| "thrd_join": { | ||
| "defined": "7.28.5.6" | ||
| }, | ||
| "thrd_sleep": { | ||
| "defined": "7.28.5.7" | ||
| }, | ||
| "thrd_yield": { | ||
| "defined": "7.28.5.8" | ||
| }, | ||
| "tss_create": { | ||
| "defined": "7.28.6.1" | ||
| }, | ||
| "tss_delete": { | ||
| "defined": "7.28.6.2" | ||
| }, | ||
| "tss_get": { | ||
| "defined": "7.28.6.3" | ||
| }, | ||
| "tss_set": { | ||
| "defined": "7.28.6.4" | ||
| } | ||
| } | ||
| } |