From 04926e67fda210c9709da4f8672ac0b5147ebb90 Mon Sep 17 00:00:00 2001 From: Evgenii Stepanov Date: Thu, 26 Dec 2019 12:27:29 -0800 Subject: [PATCH] Revert "[msan] Check qsort input." This change breaks LLVM bootstrap with ASan and MSan. FAILED: lib/ToolDrivers/llvm-lib/Options.inc OptParser.td:137:1: error: Option is equivalent to def INPUT : Option<[], "", KIND_INPUT>; ^ OptParser.td:137:1: error: Other defined here def INPUT : Option<[], "", KIND_INPUT>; This reverts commit caa48a6b88aeed8ae80e6ddb1eae8c6a7cbe260b. --- .../sanitizer_common/sanitizer_common_interceptors.inc | 18 ------------------ compiler-rt/test/msan/qsort.cpp | 5 ----- 2 files changed, 23 deletions(-) diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc index 68a9db5..2d9636a 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc @@ -9665,15 +9665,6 @@ INTERCEPTOR(void, qsort, void *base, SIZE_T nmemb, SIZE_T size, qsort_compar_f compar) { void *ctx; COMMON_INTERCEPTOR_ENTER(ctx, qsort, base, nmemb, size, compar); - // Run the comparator over all array elements to detect any memory issues. - for (SIZE_T i = 0; i < nmemb; ++i) { - void *p = (void *)((char *)base + i * size); - COMMON_INTERCEPTOR_UNPOISON_PARAM(2); - // Compare each element with itself to trigger an equality check, which - // typically requires the comparator to look as many of the object fields as - // possible. - compar(p, p); - } qsort_compar_f old_compar = qsort_compar; qsort_compar = compar; SIZE_T old_size = qsort_size; @@ -9703,15 +9694,6 @@ INTERCEPTOR(void, qsort_r, void *base, SIZE_T nmemb, SIZE_T size, qsort_r_compar_f compar, void *arg) { void *ctx; COMMON_INTERCEPTOR_ENTER(ctx, qsort_r, base, nmemb, size, compar, arg); - // Run the comparator over all array elements to detect any memory issues. - for (SIZE_T i = 0; i < nmemb; ++i) { - void *p = (void *)((char *)base + i * size); - COMMON_INTERCEPTOR_UNPOISON_PARAM(3); - // Compare each element with itself to trigger an equality check, which - // typically requires the comparator to look as many of the object fields as - // possible. - compar(p, p, arg); - } qsort_r_compar_f old_compar = qsort_r_compar; qsort_r_compar = compar; SIZE_T old_size = qsort_r_size; diff --git a/compiler-rt/test/msan/qsort.cpp b/compiler-rt/test/msan/qsort.cpp index cf75401..eb86970 100644 --- a/compiler-rt/test/msan/qsort.cpp +++ b/compiler-rt/test/msan/qsort.cpp @@ -1,5 +1,4 @@ // RUN: %clangxx_msan -O0 -g %s -o %t && %run %t -// RUN: %clangxx_msan -DPOISON -O0 -g %s -o %t && not %run %t 2>&1 | FileCheck %s #include #include @@ -66,10 +65,6 @@ int main(int argc, char *argv[]) { for (int i = 0; i < kSize1; ++i) p[i] = i * 2 + (i % 3 - 1) * 3; poison_stack_and_param(); -#ifdef POISON - __msan_poison(p + 1, sizeof(long)); - // CHECK: Uninitialized bytes in __msan_check_mem_is_initialized at offset 0 inside [{{.*}}, 8) -#endif qsort(p, kSize1, sizeof(long), compar1); __msan_check_mem_is_initialized(p, sizeof(long) * kSize1); assert(seen2); -- 2.7.4