]>
Commit | Line | Data |
---|---|---|
92a42be0 | 1 | // RUN: %clangxx_msan -g -O0 -DTYPE=int -DFN=xdr_int %s -o %t && \ |
1a4d82fc | 2 | // RUN: %run %t 2>&1 |
92a42be0 | 3 | // RUN: %clangxx_msan -g -O0 -DTYPE=int -DFN=xdr_int -DUNINIT=1 %s -o %t && \ |
1a4d82fc | 4 | // RUN: not %run %t 2>&1 | FileCheck %s |
92a42be0 | 5 | // RUN: %clangxx_msan -g -O0 -DTYPE=double -DFN=xdr_double %s -o %t && \ |
1a4d82fc | 6 | // RUN: %run %t 2>&1 |
92a42be0 | 7 | // RUN: %clangxx_msan -g -O0 -DTYPE=double -DFN=xdr_double -DUNINIT=1 %s -o %t && \ |
1a4d82fc | 8 | // RUN: not %run %t 2>&1 | FileCheck %s |
92a42be0 | 9 | // RUN: %clangxx_msan -g -O0 -DTYPE=u_quad_t -DFN=xdr_u_longlong_t %s -o %t && \ |
1a4d82fc | 10 | // RUN: %run %t 2>&1 |
92a42be0 | 11 | // RUN: %clangxx_msan -g -O0 -DTYPE=u_quad_t -DFN=xdr_u_longlong_t -DUNINIT=1 %s -o %t && \ |
1a4d82fc JJ |
12 | // RUN: not %run %t 2>&1 | FileCheck %s |
13 | ||
14 | #include <assert.h> | |
15 | #include <rpc/xdr.h> | |
16 | ||
17 | #include <sanitizer/msan_interface.h> | |
18 | ||
19 | int main(int argc, char *argv[]) { | |
20 | XDR xdrs; | |
21 | char buf[100]; | |
22 | xdrmem_create(&xdrs, buf, sizeof(buf), XDR_ENCODE); | |
23 | TYPE x; | |
24 | #ifndef UNINIT | |
25 | x = 42; | |
26 | #endif | |
27 | bool_t res = FN(&xdrs, &x); | |
28 | // CHECK: MemorySanitizer: use-of-uninitialized-value | |
29 | // CHECK: {{in main.*sunrpc.cc:}}[[@LINE-2]] | |
30 | assert(res == TRUE); | |
31 | xdr_destroy(&xdrs); | |
32 | ||
33 | xdrmem_create(&xdrs, buf, sizeof(buf), XDR_DECODE); | |
34 | TYPE y; | |
35 | res = FN(&xdrs, &y); | |
36 | assert(res == TRUE); | |
37 | assert(__msan_test_shadow(&y, sizeof(y)) == -1); | |
38 | xdr_destroy(&xdrs); | |
39 | return 0; | |
40 | } |