aboutsummaryrefslogtreecommitdiff
path: root/clang/unittests
diff options
context:
space:
mode:
authorSunho Kim <ksunhokim123@gmail.com>2022-07-31 05:42:16 +0900
committerSunho Kim <ksunhokim123@gmail.com>2022-07-31 05:42:57 +0900
commita8f2e24e48fddb3707301c9d24cc50ab778d4fda (patch)
tree1d043ca17bafdf367b09a82c1406b934bf2ee0f7 /clang/unittests
parent1d03b2efcd40eb8225a0b10afea86e8a1436681e (diff)
[clang-repl] Disable building when LLVM_STATIC_LINK_CXX_STDLIB is ON.
We have seen random symbol not found "__cxa_throw" error in fuschia build bots and out-of-tree users. The understanding have been that they are built without exception support, but it turned out that these platforms have LLVM_STATIC_LINK_CXX_STDLIB ON so that they link libstdc++ to llvm statically. The reason why this is problematic for clang-repl is that by default clang-repl tries to find symbols from symbol table of executable and dynamic libraries loaded by current process. It needs to load another libstdc++, but the platform that had LLVM_STATIC_LINK_CXX_STDLIB turned on is usally those with missing or obsolate shared libstdc++ in the first place -- trying to load it again would be destined to fail eventually with a risk to introuduce mixed libstdc++ versions. A proper solution that doesn't take a workaround is statically link the same libstdc++ by clang-repl side, but this is not possible with old JIT linker runtimedyld. New just-in-time linker JITLink handles this relatively well, but it's not availalbe in majority of platforms. For now, this patch just disables the building of clang-repl when LLVM_STATIC_LINK_CXX_STDLIB is ON and removes the "__cxa_throw" check in exception unittest as well as reverting previous exception check flag patch. Reviewed By: v.g.vassilev Differential Revision: https://reviews.llvm.org/D130788
Diffstat (limited to 'clang/unittests')
-rw-r--r--clang/unittests/CMakeLists.txt4
-rw-r--r--clang/unittests/Interpreter/ExceptionTests/InterpreterExceptionTest.cpp11
2 files changed, 3 insertions, 12 deletions
diff --git a/clang/unittests/CMakeLists.txt b/clang/unittests/CMakeLists.txt
index 51fe5de9ce64..31836198646e 100644
--- a/clang/unittests/CMakeLists.txt
+++ b/clang/unittests/CMakeLists.txt
@@ -35,7 +35,9 @@ add_subdirectory(Frontend)
add_subdirectory(Rewrite)
add_subdirectory(Sema)
add_subdirectory(CodeGen)
-add_subdirectory(Interpreter)
+if(HAVE_CLANG_REPL_SUPPORT)
+ add_subdirectory(Interpreter)
+endif()
# FIXME: libclang unit tests are disabled on Windows due
# to failures, mostly in libclang.VirtualFileOverlay_*.
if(NOT WIN32 AND CLANG_TOOL_LIBCLANG_BUILD)
diff --git a/clang/unittests/Interpreter/ExceptionTests/InterpreterExceptionTest.cpp b/clang/unittests/Interpreter/ExceptionTests/InterpreterExceptionTest.cpp
index d827c915e070..f54c65568a66 100644
--- a/clang/unittests/Interpreter/ExceptionTests/InterpreterExceptionTest.cpp
+++ b/clang/unittests/Interpreter/ExceptionTests/InterpreterExceptionTest.cpp
@@ -113,17 +113,6 @@ extern "C" int throw_exception() {
Triple.getArch() == llvm::Triple::aarch64_32))
return;
- // Check if platform does not support exceptions.
- {
- // Force the creation of an incremental executor to call getSymbolAddress.
- llvm::cantFail(Interp->ParseAndExecute(""));
- auto Sym = Interp->getSymbolAddress("__cxa_throw");
- if (!Sym) {
- LLVMConsumeError(llvm::wrap(Sym.takeError()));
- return;
- }
- }
-
llvm::cantFail(Interp->ParseAndExecute(ExceptionCode));
testing::internal::CaptureStdout();
auto ThrowException =