forked from esbmc/esbmc
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[regression] added test case for pthread and abort
Signed-off-by: Lucas Cordeiro <[email protected]>
- Loading branch information
1 parent
63d4def
commit 3a159aa
Showing
2 changed files
with
108 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
// This file is part of the SV-Benchmarks collection of verification tasks: | ||
// https://gitlab.com/sosy-lab/benchmarking/sv-benchmarks | ||
// | ||
// SPDX-FileCopyrightText: 2021 F. Schuessele <[email protected]> | ||
// SPDX-FileCopyrightText: 2021 D. Klumpp <[email protected]> | ||
// | ||
// SPDX-License-Identifier: LicenseRef-BSD-3-Clause-Attribution-Vandikas | ||
|
||
typedef unsigned long int pthread_t; | ||
|
||
union pthread_attr_t | ||
{ | ||
char __size[36]; | ||
long int __align; | ||
}; | ||
typedef union pthread_attr_t pthread_attr_t; | ||
|
||
extern void __assert_fail(const char *__assertion, const char *__file, | ||
unsigned int __line, const char *__function) | ||
__attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__)); | ||
void reach_error() { __assert_fail("0", "unroll-2.wvr.c", 21, __extension__ __PRETTY_FUNCTION__); } | ||
extern int pthread_create (pthread_t *__restrict __newthread, | ||
const pthread_attr_t *__restrict __attr, | ||
void *(*__start_routine) (void *), | ||
void *__restrict __arg) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 3))); | ||
extern int pthread_join (pthread_t __th, void **__thread_return); | ||
|
||
typedef unsigned int size_t; | ||
extern void *malloc (size_t __size) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) ; | ||
|
||
extern int __VERIFIER_nondet_int(void); | ||
extern unsigned int __VERIFIER_nondet_uint(void); | ||
extern void __VERIFIER_atomic_begin(void); | ||
extern void __VERIFIER_atomic_end(void); | ||
|
||
extern void abort(void); | ||
void assume_abort_if_not(int cond) { | ||
if(!cond) {abort();} | ||
} | ||
|
||
int *f; | ||
int x1, x2, size; | ||
unsigned int n; | ||
|
||
int *create_fresh_int_array(int size); | ||
|
||
void* thread1() { | ||
unsigned int i = 0; | ||
while (i < 2 * n) { | ||
assume_abort_if_not(x1 >= 0 && x1 < size); | ||
x1 = f[x1]; | ||
i++; | ||
} | ||
return 0; | ||
} | ||
|
||
void* thread2() { | ||
unsigned int i = 0; | ||
while (i < 2 * n) { | ||
assume_abort_if_not(x2 >= 0 && x2 < size); | ||
x2 = f[x2]; | ||
i++; | ||
assume_abort_if_not(x2 >= 0 && x2 < size); | ||
x2 = f[x2]; | ||
i++; | ||
} | ||
return 0; | ||
} | ||
|
||
int main() { | ||
pthread_t t1, t2; | ||
|
||
// initialize global variables | ||
n = __VERIFIER_nondet_uint(); | ||
size = __VERIFIER_nondet_int(); | ||
assume_abort_if_not(size > 0); | ||
f = create_fresh_int_array(size); | ||
|
||
assume_abort_if_not(n < 4294967296 / 2); | ||
|
||
// main method | ||
pthread_create(&t1, 0, thread1, 0); | ||
pthread_create(&t2, 0, thread2, 0); | ||
pthread_join(t1, 0); | ||
pthread_join(t2, 0); | ||
|
||
assume_abort_if_not(x1 != x2); | ||
reach_error(); | ||
|
||
return 0; | ||
} | ||
|
||
int *create_fresh_int_array(int size) { | ||
assume_abort_if_not(size >= 0); | ||
assume_abort_if_not(size <= (((size_t) 4294967295) / sizeof(int))); | ||
|
||
int* arr = (int*)malloc(sizeof(int) * (size_t)size); | ||
for (int i = 0; i < size; i++) { | ||
arr[i] = __VERIFIER_nondet_int(); | ||
} | ||
return arr; | ||
} | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
CORE | ||
main.c | ||
--force-malloc-success --unwind 10 --no-unwinding-assertions --context-bound 2 --memory-leak-check --no-abnormal-memory-leak | ||
^VERIFICATION SUCCESSFUL$ |