[compiler-rt] [rtsan] Fix RTTI issue, make a better c test (PR #108720)

via llvm-commits llvm-commits at lists.llvm.org
Sat Sep 14 15:15:02 PDT 2024


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-compiler-rt-sanitizer

Author: Chris Apple (cjappl)

<details>
<summary>Changes</summary>

Later in a development branch, our c tests were failing, this was due to the lack of RTTI.

This follows very similar patterns found in the other sanitizers:
https://github.com/llvm/llvm-project/blob/a205a854e06d36c1d0def3e3bc3743defdb6abc1/compiler-rt/lib/asan/CMakeLists.txt#L113
https://github.com/llvm/llvm-project/blob/a205a854e06d36c1d0def3e3bc3743defdb6abc1/compiler-rt/lib/tsan/CMakeLists.txt#L10
https://github.com/llvm/llvm-project/blob/a205a854e06d36c1d0def3e3bc3743defdb6abc1/compiler-rt/lib/ubsan/CMakeLists.txt#L45

Adding a more fully fledged c test that ensures we will catch these issues in the future.

---
Full diff: https://github.com/llvm/llvm-project/pull/108720.diff


3 Files Affected:

- (modified) compiler-rt/lib/rtsan/CMakeLists.txt (+2) 
- (modified) compiler-rt/test/rtsan/basic.cpp (-1) 
- (added) compiler-rt/test/rtsan/sanity_check_pure_c.c (+28) 


``````````diff
diff --git a/compiler-rt/lib/rtsan/CMakeLists.txt b/compiler-rt/lib/rtsan/CMakeLists.txt
index 3f146a757a97eb..07a21b49eb45aa 100644
--- a/compiler-rt/lib/rtsan/CMakeLists.txt
+++ b/compiler-rt/lib/rtsan/CMakeLists.txt
@@ -29,6 +29,8 @@ set(RTSAN_LINK_LIBS
   ${COMPILER_RT_UNWINDER_LINK_LIBS}
   ${COMPILER_RT_CXX_LINK_LIBS})
 
+append_rtti_flag(OFF RTSAN_CFLAGS)
+
 if(APPLE)
   add_compiler_rt_object_libraries(RTRtsan
     OS ${SANITIZER_COMMON_SUPPORTED_OS}
diff --git a/compiler-rt/test/rtsan/basic.cpp b/compiler-rt/test/rtsan/basic.cpp
index 607db90213a30d..4edf32336720f8 100644
--- a/compiler-rt/test/rtsan/basic.cpp
+++ b/compiler-rt/test/rtsan/basic.cpp
@@ -1,5 +1,4 @@
 // RUN: %clangxx -fsanitize=realtime %s -o %t
-// RUN: %clang -fsanitize=realtime %s -o %t
 // RUN: not %run %t 2>&1 | FileCheck %s
 // UNSUPPORTED: ios
 
diff --git a/compiler-rt/test/rtsan/sanity_check_pure_c.c b/compiler-rt/test/rtsan/sanity_check_pure_c.c
new file mode 100644
index 00000000000000..bdca6039d9324d
--- /dev/null
+++ b/compiler-rt/test/rtsan/sanity_check_pure_c.c
@@ -0,0 +1,28 @@
+// RUN: %clang -fsanitize=realtime %s -o %t
+// RUN: not %run %t 2>&1 | FileCheck %s
+// RUN: %clang %s -o %t
+// RUN: %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-NO-SANITIZE
+#ifdef __cplusplus
+#  error "This test must be built in C mode"
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+
+// Check that we can build and run C code.
+
+void nonblocking_function(void) __attribute__((nonblocking));
+
+void nonblocking_function(void) __attribute__((nonblocking)) {
+  void *ptr = malloc(2);
+  printf("ptr: %p\n", ptr); // ensure we don't optimize out the malloc
+}
+
+int main() {
+  nonblocking_function();
+  printf("Done\n");
+  return 0;
+}
+
+// CHECK: ==ERROR: RealtimeSanitizer
+// CHECK-NO-SANITIZE: Done

``````````

</details>


https://github.com/llvm/llvm-project/pull/108720


More information about the llvm-commits mailing list