summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrancis Ricci <francisjricci@gmail.com>2017-09-08 19:43:53 +0000
committerFrancis Ricci <francisjricci@gmail.com>2017-09-08 19:43:53 +0000
commit94345c67bd1cf0378cc8d6ae1764cc5b4578ca07 (patch)
treebb17e3a466cb0c5dcf811c20c35f930a4232edcb
parent3057bb94ded15a39001c6b7d4755f70a3f7ab1a8 (diff)
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 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@312824 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/sanitizer/lsan_interface.h2
-rw-r--r--test/lsan/TestCases/link_turned_off.cc4
2 files changed, 3 insertions, 3 deletions
diff --git a/include/sanitizer/lsan_interface.h b/include/sanitizer/lsan_interface.h
index 8fb8e756d..1f2e58909 100644
--- a/include/sanitizer/lsan_interface.h
+++ b/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/test/lsan/TestCases/link_turned_off.cc b/test/lsan/TestCases/link_turned_off.cc
index fd11272ce..245fd017b 100644
--- a/test/lsan/TestCases/link_turned_off.cc
+++ b/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 <sanitizer/lsan_interface.h>
int argc_copy;
extern "C" {
-int __lsan_is_turned_off() {
+int __attribute__((used)) __lsan_is_turned_off() {
return (argc_copy == 1);
}
}