@@ -15,24 +15,49 @@ void test(void) {
1515 pthread_mutex_init (& mtx , NULL );
1616 clang_analyzer_printState ();
1717 // CHECK: { "checker": "alpha.core.PthreadLockBase", "messages": [
18- // CHECK-NEXT: "Mutex states:",
19- // CHECK-NEXT: "mtx: unlocked",
18+ // CHECK-NEXT: "Mutex event:",
19+ // CHECK-NEXT: "Kind: : Init",
20+ // CHECK-NEXT: "Semantics: NotApplicable",
21+ // CHECK-NEXT: "Library: Pthread",
22+ // CHECK-NEXT: "Mutex region: mtx",
23+ // CHECK-NEXT: "Mutex states:",
24+ // CHECK-NEXT: "mtx: unlocked",
2025 // CHECK-NEXT: ""
2126 // CHECK-NEXT: ]}
2227
2328 pthread_mutex_lock (& mtx );
2429 clang_analyzer_printState ();
2530 // CHECK: { "checker": "alpha.core.PthreadLockBase", "messages": [
31+ // CHECK-NEXT: "Mutex event:",
32+ // CHECK-NEXT: "Kind: : Acquire",
33+ // CHECK-NEXT: "Semantics: PthreadSemantics",
34+ // CHECK-NEXT: "Library: Pthread",
35+ // CHECK-NEXT: "Mutex region: mtx",
36+ // CHECK-NEXT: "Kind: : Init",
37+ // CHECK-NEXT: "Semantics: NotApplicable",
38+ // CHECK-NEXT: "Library: Pthread",
39+ // CHECK-NEXT: "Mutex region: mtx",
2640 // CHECK-NEXT: "Mutex states:",
2741 // CHECK-NEXT: "mtx: locked",
28- // CHECK-NEXT: "Mutex lock order:",
29- // CHECK-NEXT: "mtx",
3042 // CHECK-NEXT: ""
3143 // CHECK-NEXT: ]}
3244
3345 pthread_mutex_unlock (& mtx );
3446 clang_analyzer_printState ();
3547 // CHECK: { "checker": "alpha.core.PthreadLockBase", "messages": [
48+ // CHECK-NEXT: "Mutex event:",
49+ // CHECK-NEXT: "Kind: : Release",
50+ // CHECK-NEXT: "Semantics: NotApplicable",
51+ // CHECK-NEXT: "Library: Pthread",
52+ // CHECK-NEXT: "Mutex region: mtx",
53+ // CHECK-NEXT: "Kind: : Acquire",
54+ // CHECK-NEXT: "Semantics: PthreadSemantics",
55+ // CHECK-NEXT: "Library: Pthread",
56+ // CHECK-NEXT: "Mutex region: mtx",
57+ // CHECK-NEXT: "Kind: : Init",
58+ // CHECK-NEXT: "Semantics: NotApplicable",
59+ // CHECK-NEXT: "Library: Pthread",
60+ // CHECK-NEXT: "Mutex region: mtx",
3661 // CHECK-NEXT: "Mutex states:",
3762 // CHECK-NEXT: "mtx: unlocked",
3863 // CHECK-NEXT: ""
@@ -41,6 +66,23 @@ void test(void) {
4166 int ret = pthread_mutex_destroy (& mtx );
4267 clang_analyzer_printState ();
4368 // CHECK: { "checker": "alpha.core.PthreadLockBase", "messages": [
69+ // CHECK-NEXT: "Mutex event:",
70+ // CHECK-NEXT: "Kind: : Destroy",
71+ // CHECK-NEXT: "Semantics: PthreadSemantics",
72+ // CHECK-NEXT: "Library: Pthread",
73+ // CHECK-NEXT: "Mutex region: mtx",
74+ // CHECK-NEXT: "Kind: : Release",
75+ // CHECK-NEXT: "Semantics: NotApplicable",
76+ // CHECK-NEXT: "Library: Pthread",
77+ // CHECK-NEXT: "Mutex region: mtx",
78+ // CHECK-NEXT: "Kind: : Acquire",
79+ // CHECK-NEXT: "Semantics: PthreadSemantics",
80+ // CHECK-NEXT: "Library: Pthread",
81+ // CHECK-NEXT: "Mutex region: mtx",
82+ // CHECK-NEXT: "Kind: : Init",
83+ // CHECK-NEXT: "Semantics: NotApplicable",
84+ // CHECK-NEXT: "Library: Pthread",
85+ // CHECK-NEXT: "Mutex region: mtx",
4486 // CHECK-NEXT: "Mutex states:",
4587 // CHECK-NEXT: "mtx: unlocked, possibly destroyed",
4688 // CHECK-NEXT: "Mutexes in unresolved possibly destroyed state:",
@@ -51,9 +93,10 @@ void test(void) {
5193 if (ret )
5294 return ;
5395
96+ // Assert that the 'possibly destroyed' state is now resolved to 'destroyed'.
5497 clang_analyzer_printState ();
5598 // CHECK: { "checker": "alpha.core.PthreadLockBase", "messages": [
56- // CHECK-NEXT: "Mutex states:",
99+ // CHECK: "Mutex states:",
57100 // CHECK-NEXT: "mtx: destroyed",
58101 // CHECK-NEXT: ""
59102 // CHECK-NEXT: ]}
0 commit comments