forked from OSchip/llvm-project
[analyzer] Fix pthread lock tests so that the API comes from a system header.
...and verify that a global mutex in user code can be used without warnings. Patch by Aleksei Sidorin! llvm-svn: 217515
This commit is contained in:
parent
a873414f87
commit
59801406ca
|
@ -0,0 +1,28 @@
|
|||
// Like the compiler, the static analyzer treats some functions differently if
|
||||
// they come from a system header -- for example, pthread_mutex* functions
|
||||
// should not invalidate regions of their arguments.
|
||||
#pragma clang system_header
|
||||
|
||||
typedef struct {
|
||||
void *foo;
|
||||
} pthread_mutex_t;
|
||||
|
||||
typedef struct {
|
||||
void *foo;
|
||||
} pthread_mutexattr_t;
|
||||
|
||||
typedef struct {
|
||||
void *foo;
|
||||
} lck_grp_t;
|
||||
|
||||
typedef pthread_mutex_t lck_mtx_t;
|
||||
|
||||
extern int pthread_mutex_lock(pthread_mutex_t *);
|
||||
extern int pthread_mutex_unlock(pthread_mutex_t *);
|
||||
extern int pthread_mutex_trylock(pthread_mutex_t *);
|
||||
extern int pthread_mutex_destroy(pthread_mutex_t *);
|
||||
extern int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr);
|
||||
extern int lck_mtx_lock(lck_mtx_t *);
|
||||
extern int lck_mtx_unlock(lck_mtx_t *);
|
||||
extern int lck_mtx_try_lock(lck_mtx_t *);
|
||||
extern void lck_mtx_destroy(lck_mtx_t *lck, lck_grp_t *grp);
|
|
@ -2,31 +2,10 @@
|
|||
|
||||
// Tests performing normal locking patterns and wrong locking orders
|
||||
|
||||
typedef struct {
|
||||
void *foo;
|
||||
} pthread_mutex_t;
|
||||
|
||||
typedef struct {
|
||||
void *foo;
|
||||
} pthread_mutexattr_t;
|
||||
|
||||
typedef struct {
|
||||
void *foo;
|
||||
} lck_grp_t;
|
||||
|
||||
typedef pthread_mutex_t lck_mtx_t;
|
||||
|
||||
extern int pthread_mutex_lock(pthread_mutex_t *);
|
||||
extern int pthread_mutex_unlock(pthread_mutex_t *);
|
||||
extern int pthread_mutex_trylock(pthread_mutex_t *);
|
||||
extern int pthread_mutex_destroy(pthread_mutex_t *);
|
||||
extern int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr);
|
||||
extern int lck_mtx_lock(lck_mtx_t *);
|
||||
extern int lck_mtx_unlock(lck_mtx_t *);
|
||||
extern int lck_mtx_try_lock(lck_mtx_t *);
|
||||
extern void lck_mtx_destroy(lck_mtx_t *lck, lck_grp_t *grp);
|
||||
#include "Inputs/system-header-simulator-for-pthread-lock.h"
|
||||
|
||||
pthread_mutex_t mtx1, mtx2;
|
||||
pthread_mutex_t *pmtx;
|
||||
lck_mtx_t lck1, lck2;
|
||||
lck_grp_t grp1;
|
||||
|
||||
|
@ -183,6 +162,21 @@ ok20(void)
|
|||
pthread_mutex_init(&mtx1, NULL); // no-warning
|
||||
}
|
||||
|
||||
void
|
||||
ok21(void) {
|
||||
pthread_mutex_lock(pmtx); // no-warning
|
||||
pthread_mutex_unlock(pmtx); // no-warning
|
||||
}
|
||||
|
||||
void
|
||||
ok22(void) {
|
||||
pthread_mutex_lock(pmtx); // no-warning
|
||||
pthread_mutex_unlock(pmtx); // no-warning
|
||||
pthread_mutex_lock(pmtx); // no-warning
|
||||
pthread_mutex_unlock(pmtx); // no-warning
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
bad1(void)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue