diff options
Diffstat (limited to 'test/dfsan/fncall.c')
| -rw-r--r-- | test/dfsan/fncall.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/test/dfsan/fncall.c b/test/dfsan/fncall.c new file mode 100644 index 000000000000..e780f3145e87 --- /dev/null +++ b/test/dfsan/fncall.c @@ -0,0 +1,26 @@ +// RUN: %clang_dfsan -m64 %s -o %t && %run %t +// RUN: %clang_dfsan -mllvm -dfsan-args-abi -m64 %s -o %t && %run %t + +// Tests that labels are propagated through function calls. + +#include <sanitizer/dfsan_interface.h> +#include <assert.h> + +int f(int x) { + int j = 2; + dfsan_label j_label = dfsan_create_label("j", 0); + dfsan_set_label(j_label, &j, sizeof(j)); + return x + j; +} + +int main(void) { + int i = 1; + dfsan_label i_label = dfsan_create_label("i", 0); + dfsan_set_label(i_label, &i, sizeof(i)); + + dfsan_label ij_label = dfsan_get_label(f(i)); + assert(dfsan_has_label(ij_label, i_label)); + assert(dfsan_has_label_with_desc(ij_label, "j")); + + return 0; +} |
