diff options
Diffstat (limited to 'compiler-rt/test/msan/tsearch.cpp')
| -rw-r--r-- | compiler-rt/test/msan/tsearch.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/compiler-rt/test/msan/tsearch.cpp b/compiler-rt/test/msan/tsearch.cpp new file mode 100644 index 00000000000..50a2efb31fa --- /dev/null +++ b/compiler-rt/test/msan/tsearch.cpp @@ -0,0 +1,39 @@ +// RUN: %clangxx_msan -O0 -g %s -o %t && %run %t + +// tdestroy is a GNU extension +// UNSUPPORTED: netbsd, freebsd + +#include <assert.h> +#include <search.h> +#include <stdlib.h> + +int compare(const void *pa, const void *pb) { + int a = *(const int *)pa; + int b = *(const int *)pb; + if (a < b) + return -1; + else if (a > b) + return 1; + else + return 0; +} + +void myfreenode(void *p) { + delete (int *)p; +} + +int main(void) { + void *root = NULL; + for (int i = 0; i < 5; ++i) { + int *p = new int(i); + void *q = tsearch(p, &root, compare); + if (q == NULL) + exit(1); + if (*(int **)q != p) + delete p; + } + + tdestroy(root, myfreenode); + + return 0; +} |

