<div dir="ltr">Please try a clean build.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Nov 19, 2019 at 2:04 PM Joel E. Denny <<a href="mailto:jdenny.ornl@gmail.com">jdenny.ornl@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Hi,</div><div><br></div><div>This commit broke check-all for me:</div><div><br></div><div>[5/13] Generating Msan-x86_64-Test<br>FAILED: projects/compiler-rt/lib/msan/tests/Msan-x86_64-Test <br>cd /home/jdenny/ornl/llvm/llvm-mono-git-build/projects/compiler-rt/lib/msan/tests && /home/jdenny/ornl/llvm/llvm-mono-git-build/./bin/clang MSAN_INST_TEST_OBJECTS.msan_test.cpp.x86_64.o MSAN_INST_TEST_OBJECTS.msan_test_main.cpp.x86_64.o MSAN_INST_GTEST.gtest-all.cc.x86_64.o /home/jdenny/ornl/llvm/llvm-mono-git-build/projects/compiler-rt/lib/msan/tests/../libcxx_msan_x86_64/lib//libc++.a /home/jdenny/ornl/llvm/llvm-mono-git-build/projects/compiler-rt/lib/msan/tests/../libcxx_msan_x86_64/lib//libc++abi.a -o /home/jdenny/ornl/llvm/llvm-mono-git-build/projects/compiler-rt/lib/msan/tests/./Msan-x86_64-Test -fuse-ld=lld -Wl,--color-diagnostics -Wl,-allow-shlib-undefined -fsanitize=memory -ldl -m64 -m64<br>ld.lld: error: undefined symbol: __cxa_begin_catch</div><div><br></div><div>I'm on an Ubuntu 18.04.3 system.  Let me know if any other details are needed.<br></div><div><br></div><div>Thanks.</div><div><br></div><div>Joel<br></div><div></div><div><br></div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Oct 31, 2019 at 1:23 PM Evgenii Stepanov via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
Author: Evgenii Stepanov<br>
Date: 2019-10-31T10:22:52-07:00<br>
New Revision: 2f856a36e0b270b184051d10a18d4b4238b4c033<br>
<br>
URL: <a href="https://github.com/llvm/llvm-project/commit/2f856a36e0b270b184051d10a18d4b4238b4c033" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/2f856a36e0b270b184051d10a18d4b4238b4c033</a><br>
DIFF: <a href="https://github.com/llvm/llvm-project/commit/2f856a36e0b270b184051d10a18d4b4238b4c033.diff" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/2f856a36e0b270b184051d10a18d4b4238b4c033.diff</a><br>
<br>
LOG: [msan] Blacklist __gxx_personality_v0.<br>
<br>
Summary:<br>
Fixes <a href="https://bugs.llvm.org/show_bug.cgi?id=31877" rel="noreferrer" target="_blank">https://bugs.llvm.org/show_bug.cgi?id=31877</a>.<br>
Fixes <a href="https://github.com/google/sanitizers/issues/1155" rel="noreferrer" target="_blank">https://github.com/google/sanitizers/issues/1155</a>.<br>
<br>
Enables exceptions in msan/tsan buid of libcxx, and in msan tests.<br>
<br>
-fdepfile-entry stuff is a workaround for<br>
<a href="https://reviews.llvm.org/D69290" rel="noreferrer" target="_blank">https://reviews.llvm.org/D69290</a> (default blacklist missing from -MMD<br>
output).<br>
<br>
Reviewers: pcc, dvyukov<br>
<br>
Subscribers: mgorny, christof, #sanitizers, llvm-commits<br>
<br>
Tags: #sanitizers, #llvm<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D69587" rel="noreferrer" target="_blank">https://reviews.llvm.org/D69587</a><br>
<br>
Added: <br>
<br>
<br>
Modified: <br>
    compiler-rt/cmake/Modules/AddCompilerRT.cmake<br>
    compiler-rt/cmake/Modules/CustomLibcxx/CMakeLists.txt<br>
    compiler-rt/lib/msan/CMakeLists.txt<br>
    compiler-rt/lib/msan/msan_blacklist.txt<br>
    compiler-rt/lib/msan/tests/CMakeLists.txt<br>
    compiler-rt/lib/msan/tests/msan_test.cpp<br>
<br>
Removed: <br>
<br>
<br>
<br>
################################################################################<br>
diff  --git a/compiler-rt/cmake/Modules/AddCompilerRT.cmake b/compiler-rt/cmake/Modules/AddCompilerRT.cmake<br>
index 7c9505e66cec..b87ab6a91d42 100644<br>
--- a/compiler-rt/cmake/Modules/AddCompilerRT.cmake<br>
+++ b/compiler-rt/cmake/Modules/AddCompilerRT.cmake<br>
@@ -623,6 +623,7 @@ macro(add_custom_libcxx name prefix)<br>
     USES_TERMINAL_BUILD 1<br>
     USES_TERMINAL_INSTALL 1<br>
     EXCLUDE_FROM_ALL TRUE<br>
+    BUILD_BYPRODUCTS "${prefix}/lib/libc++.a" "${prefix}/lib/libc++abi.a"<br>
     )<br>
<br>
   if (CMAKE_GENERATOR MATCHES "Make")<br>
<br>
diff  --git a/compiler-rt/cmake/Modules/CustomLibcxx/CMakeLists.txt b/compiler-rt/cmake/Modules/CustomLibcxx/CMakeLists.txt<br>
index 3b1eb910ec86..e61c222587e6 100644<br>
--- a/compiler-rt/cmake/Modules/CustomLibcxx/CMakeLists.txt<br>
+++ b/compiler-rt/cmake/Modules/CustomLibcxx/CMakeLists.txt<br>
@@ -4,7 +4,7 @@ project(custom-libcxx C CXX)<br>
 # Build static libcxxabi.<br>
 set(LIBCXXABI_STANDALONE_BUILD 1)<br>
 set(LIBCXXABI_ENABLE_SHARED OFF CACHE BOOL "")<br>
-set(LIBCXXABI_ENABLE_EXCEPTIONS OFF CACHE BOOL "")<br>
+set(LIBCXXABI_ENABLE_EXCEPTIONS ON CACHE BOOL "")<br>
 set(LIBCXXABI_HERMETIC_STATIC_LIBRARY ON CACHE STRING "")<br>
 set(LIBCXXABI_LIBCXX_PATH ${COMPILER_RT_LIBCXX_PATH} CACHE PATH "")<br>
 set(LIBCXXABI_INCLUDE_TESTS OFF CACHE BOOL "")<br>
<br>
diff  --git a/compiler-rt/lib/msan/CMakeLists.txt b/compiler-rt/lib/msan/CMakeLists.txt<br>
index 9e9bf6543932..86e96a01a118 100644<br>
--- a/compiler-rt/lib/msan/CMakeLists.txt<br>
+++ b/compiler-rt/lib/msan/CMakeLists.txt<br>
@@ -81,6 +81,7 @@ foreach(arch ${MSAN_SUPPORTED_ARCH})<br>
 endforeach()<br>
<br>
 add_compiler_rt_resource_file(msan_blacklist msan_blacklist.txt msan)<br>
+list(APPEND MSAN_RUNTIME_LIBRARIES msan_blacklist)<br>
<br>
 if(COMPILER_RT_INCLUDE_TESTS)<br>
   add_subdirectory(tests)<br>
<br>
diff  --git a/compiler-rt/lib/msan/msan_blacklist.txt b/compiler-rt/lib/msan/msan_blacklist.txt<br>
index 44a5680d4d06..3efef5712185 100644<br>
--- a/compiler-rt/lib/msan/msan_blacklist.txt<br>
+++ b/compiler-rt/lib/msan/msan_blacklist.txt<br>
@@ -5,3 +5,6 @@<br>
 # Example usage:<br>
 # fun:*bad_function_name*<br>
 # src:file_with_tricky_code.cc<br>
+<br>
+# <a href="https://bugs.llvm.org/show_bug.cgi?id=31877" rel="noreferrer" target="_blank">https://bugs.llvm.org/show_bug.cgi?id=31877</a><br>
+fun:__gxx_personality_*<br>
<br>
diff  --git a/compiler-rt/lib/msan/tests/CMakeLists.txt b/compiler-rt/lib/msan/tests/CMakeLists.txt<br>
index 9949e81a2c12..541356fc68d8 100644<br>
--- a/compiler-rt/lib/msan/tests/CMakeLists.txt<br>
+++ b/compiler-rt/lib/msan/tests/CMakeLists.txt<br>
@@ -8,7 +8,9 @@ include_directories(../..)<br>
 set(MSAN_LIBCXX_CFLAGS<br>
   -fsanitize=memory<br>
   -fsanitize-memory-track-origins<br>
-  -Wno-pedantic)<br>
+  -Wno-pedantic<br>
+  -Xclang -fdepfile-entry=${COMPILER_RT_OUTPUT_DIR}/share/msan_blacklist.txt<br>
+  )<br>
<br>
 # Unittest sources and build flags.<br>
 set(MSAN_UNITTEST_SOURCES<br>
@@ -32,7 +34,6 @@ set(MSAN_UNITTEST_COMMON_CFLAGS<br>
   -I${COMPILER_RT_SOURCE_DIR}/lib/msan<br>
   -g<br>
   -O2<br>
-  -fno-exceptions<br>
   -fno-omit-frame-pointer<br>
   -mno-omit-leaf-frame-pointer<br>
   -Wno-deprecated-declarations<br>
@@ -114,13 +115,14 @@ macro(add_msan_tests_for_arch arch kind cflags)<br>
<br>
   set(MSAN_TEST_OBJECTS ${MSAN_INST_TEST_OBJECTS} ${MSAN_INST_GTEST})<br>
   set(MSAN_TEST_DEPS ${MSAN_TEST_OBJECTS} libcxx_msan_${arch}-build<br>
-                     ${MSAN_LOADABLE_SO})<br>
+                     ${MSAN_LOADABLE_SO}<br>
+                    "${MSAN_LIBCXX_DIR}/libc++.a" "${MSAN_LIBCXX_DIR}/libc++abi.a")<br>
   if(NOT COMPILER_RT_STANDALONE_BUILD)<br>
     list(APPEND MSAN_TEST_DEPS msan)<br>
   endif()<br>
   get_target_flags_for_arch(${arch} TARGET_LINK_FLAGS)<br>
   add_compiler_rt_test(MsanUnitTests "Msan-${arch}${kind}-Test" ${arch}<br>
-    OBJECTS ${MSAN_TEST_OBJECTS} "${MSAN_LIBCXX_DIR}/libc++.a"<br>
+    OBJECTS ${MSAN_TEST_OBJECTS} "${MSAN_LIBCXX_DIR}/libc++.a" "${MSAN_LIBCXX_DIR}/libc++abi.a"<br>
     DEPS ${MSAN_TEST_DEPS}<br>
     LINK_FLAGS ${MSAN_UNITTEST_LINK_FLAGS}<br>
                ${TARGET_LINK_FLAGS})<br>
<br>
diff  --git a/compiler-rt/lib/msan/tests/msan_test.cpp b/compiler-rt/lib/msan/tests/msan_test.cpp<br>
index c1cae3dad1fc..2d67b6ff645a 100644<br>
--- a/compiler-rt/lib/msan/tests/msan_test.cpp<br>
+++ b/compiler-rt/lib/msan/tests/msan_test.cpp<br>
@@ -4798,3 +4798,32 @@ TEST(MemorySanitizer, Bmi) {<br>
   }<br>
 }<br>
 #endif // defined(__x86_64__)<br>
+<br>
+namespace {<br>
+volatile long z;<br>
+<br>
+__attribute__((noinline,optnone)) void f(long a, long b, long c, long d, long e, long f) {<br>
+  z = a + b + c + d + e + f;<br>
+}<br>
+<br>
+__attribute__((noinline,optnone)) void throw_stuff() {<br>
+  throw 5;<br>
+}<br>
+<br>
+TEST(MemorySanitizer, throw_catch) {<br>
+  long x;<br>
+  // Poison __msan_param_tls.<br>
+  __msan_poison(&x, sizeof(x));<br>
+  f(x, x, x, x, x, x);<br>
+  try {<br>
+    // This calls __gxx_personality_v0 through some libgcc_s function.<br>
+    // __gxx_personality_v0 is instrumented, libgcc_s is not; as a result,<br>
+    // __msan_param_tls is not updated and __gxx_personality_v0 can find<br>
+    // leftover poison from the previous call.<br>
+    // A suppression in msan_blacklist.txt makes it work.<br>
+    throw_stuff();<br>
+  } catch (const int &e) {<br>
+    // pass<br>
+  }<br>
+}<br>
+} // namespace<br>
<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div></div>
</blockquote></div>