From 4a327e1c5c827bc073c2e69372cf566fd6db81c3 Mon Sep 17 00:00:00 2001 From: Francis Ricci Date: Fri, 8 Sep 2017 19:43:53 +0000 Subject: [PATCH] Prevent DCE on __lsan_is_turned_off and re-enable test case Summary: -dead_strip in ld64 strips weak interface symbols, which I believe is most likely the cause of this test failure. Re-enable after marking the interface function as used. Reviewers: alekseyshl, kubamracek, kcc Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D37635 llvm-svn: 312824 --- compiler-rt/include/sanitizer/lsan_interface.h | 2 ++ compiler-rt/test/lsan/TestCases/link_turned_off.cc | 4 +--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/compiler-rt/include/sanitizer/lsan_interface.h b/compiler-rt/include/sanitizer/lsan_interface.h index 8fb8e756da26..1f2e58909b4d 100644 --- a/compiler-rt/include/sanitizer/lsan_interface.h +++ b/compiler-rt/include/sanitizer/lsan_interface.h @@ -64,6 +64,8 @@ extern "C" { // for the program it is linked into (if the return value is non-zero). This // function must be defined as returning a constant value; any behavior beyond // that is unsupported. + // To avoid dead stripping, you may need to define this function with + // __attribute__((used)) int __lsan_is_turned_off(); // This function may be optionally provided by the user and should return diff --git a/compiler-rt/test/lsan/TestCases/link_turned_off.cc b/compiler-rt/test/lsan/TestCases/link_turned_off.cc index fd11272ceae3..245fd017b6ec 100644 --- a/compiler-rt/test/lsan/TestCases/link_turned_off.cc +++ b/compiler-rt/test/lsan/TestCases/link_turned_off.cc @@ -3,15 +3,13 @@ // RUN: %clangxx_lsan %s -o %t // RUN: %env_lsan_opts=$LSAN_BASE %run %t // RUN: %env_lsan_opts=$LSAN_BASE not %run %t foo 2>&1 | FileCheck %s -// -// UNSUPPORTED: darwin #include int argc_copy; extern "C" { -int __lsan_is_turned_off() { +int __attribute__((used)) __lsan_is_turned_off() { return (argc_copy == 1); } }