[clang] [llvm] Enable running ClangReplInterpreterTests in an Emscripten environment (PR #150977)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 28 11:49:11 PDT 2025
https://github.com/mcbarton updated https://github.com/llvm/llvm-project/pull/150977
>From de878527f1671d6effa690a7e01d86cd41446fcc Mon Sep 17 00:00:00 2001
From: mcbarton <150042563+mcbarton at users.noreply.github.com>
Date: Mon, 28 Jul 2025 16:33:29 +0100
Subject: [PATCH 1/2] Enable running ClangReplInterpreterTests in an Emscripten
environment
---
clang/unittests/Interpreter/CMakeLists.txt | 59 +++++++++++++++----
.../IncrementalCompilerBuilderTest.cpp | 3 +
.../unittests/Interpreter/InterpreterTest.cpp | 9 +++
llvm/cmake/modules/AddLLVM.cmake | 4 +-
.../TargetInfo/WebAssemblyTargetInfo.cpp | 5 +-
5 files changed, 65 insertions(+), 15 deletions(-)
diff --git a/clang/unittests/Interpreter/CMakeLists.txt b/clang/unittests/Interpreter/CMakeLists.txt
index 1dda9024075a1..347eb4b639ef3 100644
--- a/clang/unittests/Interpreter/CMakeLists.txt
+++ b/clang/unittests/Interpreter/CMakeLists.txt
@@ -1,3 +1,34 @@
+if(EMSCRIPTEN)
+set(LLVM_COMPONENTS_TO_LINK
+ ""
+ )
+set(LLVM_LIBS_TO_LINK
+ ""
+ )
+set(CLANG_LIBS_TO_LINK
+ clangInterpreter
+ )
+else()
+set(LLVM_COMPONENTS_TO_LINK
+ ${LLVM_TARGETS_TO_BUILD}
+ Core
+ MC
+ OrcJIT
+ Support
+ TargetParser
+ )
+set(LLVM_LIBS_TO_LINK
+ LLVMTestingSupport
+ )
+set(CLANG_LIBS_TO_LINK
+ clangAST
+ clangBasic
+ clangInterpreter
+ clangFrontend
+ clangSema
+ )
+endif()
+
add_distinct_clang_unittest(ClangReplInterpreterTests
IncrementalCompilerBuilderTest.cpp
IncrementalProcessingTest.cpp
@@ -8,24 +39,28 @@ add_distinct_clang_unittest(ClangReplInterpreterTests
EXPORT_SYMBOLS
CLANG_LIBS
- clangAST
- clangBasic
- clangInterpreter
- clangFrontend
- clangSema
+ ${CLANG_LIBS_TO_LINK}
LINK_LIBS
- LLVMTestingSupport
+ ${LLVM_LIBS_TO_LINK}
LLVM_COMPONENTS
- ${LLVM_TARGETS_TO_BUILD}
- Core
- MC
- OrcJIT
- Support
- TargetParser
+ ${LLVM_COMPONENTS_TO_LINK}
)
+if(EMSCRIPTEN)
+target_link_options(ClangReplInterpreterTests
+ PUBLIC "SHELL: -s MAIN_MODULE=1"
+ PUBLIC "SHELL: -s ALLOW_MEMORY_GROWTH=1"
+ PUBLIC "SHELL: -s STACK_SIZE=32mb"
+ PUBLIC "SHELL: -s INITIAL_MEMORY=128mb"
+ PUBLIC "SHELL: --emrun"
+)
+set_target_properties(ClangReplInterpreterTests PROPERTIES
+ SUFFIX ".html"
+)
+endif()
+
# Exceptions on Windows are not yet supported.
if(NOT WIN32)
add_subdirectory(ExceptionTests)
diff --git a/clang/unittests/Interpreter/IncrementalCompilerBuilderTest.cpp b/clang/unittests/Interpreter/IncrementalCompilerBuilderTest.cpp
index c4a40071f55cf..7c17e28bf1a68 100644
--- a/clang/unittests/Interpreter/IncrementalCompilerBuilderTest.cpp
+++ b/clang/unittests/Interpreter/IncrementalCompilerBuilderTest.cpp
@@ -37,6 +37,9 @@ TEST(IncrementalCompilerBuilder, SetCompilerArgs) {
}
TEST(IncrementalCompilerBuilder, SetTargetTriple) {
+#ifdef EMSCRIPTEN
+ GTEST_SKIP() << "Test fails for Emscipten builds";
+#endif
auto CB = clang::IncrementalCompilerBuilder();
CB.SetTargetTriple("armv6-none-eabi");
auto CI = cantFail(CB.CreateCpp());
diff --git a/clang/unittests/Interpreter/InterpreterTest.cpp b/clang/unittests/Interpreter/InterpreterTest.cpp
index 768058b954d49..ad345d2f9e1b6 100644
--- a/clang/unittests/Interpreter/InterpreterTest.cpp
+++ b/clang/unittests/Interpreter/InterpreterTest.cpp
@@ -147,6 +147,9 @@ TEST_F(InterpreterTest, DeclsAndStatements) {
}
TEST_F(InterpreterTest, UndoCommand) {
+#ifdef EMSCRIPTEN
+ GTEST_SKIP() << "Test fails for Emscipten builds";
+#endif
Args ExtraArgs = {"-Xclang", "-diagnostic-log-file", "-Xclang", "-"};
// Create the diagnostic engine with unowned consumer.
@@ -256,6 +259,9 @@ static NamedDecl *LookupSingleName(Interpreter &Interp, const char *Name) {
}
TEST_F(InterpreterTest, InstantiateTemplate) {
+#ifdef EMSCRIPTEN
+ GTEST_SKIP() << "Test fails for Emscipten builds";
+#endif
// FIXME: We cannot yet handle delayed template parsing. If we run with
// -fdelayed-template-parsing we try adding the newly created decl to the
// active PTU which causes an assert.
@@ -295,6 +301,9 @@ TEST_F(InterpreterTest, InstantiateTemplate) {
}
TEST_F(InterpreterTest, Value) {
+#ifdef EMSCRIPTEN
+ GTEST_SKIP() << "Test fails for Emscipten builds";
+#endif
std::vector<const char *> Args = {"-fno-sized-deallocation"};
std::unique_ptr<Interpreter> Interp = createInterpreter(Args);
diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake
index 83772ed8d2b13..40614d2b47868 100644
--- a/llvm/cmake/modules/AddLLVM.cmake
+++ b/llvm/cmake/modules/AddLLVM.cmake
@@ -1764,7 +1764,9 @@ function(add_unittest test_suite test_name)
set(LLVM_REQUIRES_RTTI OFF)
endif()
- list(APPEND LLVM_LINK_COMPONENTS Support) # gtest needs it for raw_ostream
+ if(NOT EMSCRIPTEN)
+ list(APPEND LLVM_LINK_COMPONENTS Support) # gtest needs it for raw_ostream
+ endif()
add_llvm_executable(${test_name} IGNORE_EXTERNALIZE_DEBUGINFO NO_INSTALL_RPATH ${ARGN})
get_subproject_title(subproject_title)
set_target_properties(${test_name} PROPERTIES FOLDER "${subproject_title}/Tests/Unit")
diff --git a/llvm/lib/Target/WebAssembly/TargetInfo/WebAssemblyTargetInfo.cpp b/llvm/lib/Target/WebAssembly/TargetInfo/WebAssemblyTargetInfo.cpp
index e65fa8e60aeb1..d0371374daf2d 100644
--- a/llvm/lib/Target/WebAssembly/TargetInfo/WebAssemblyTargetInfo.cpp
+++ b/llvm/lib/Target/WebAssembly/TargetInfo/WebAssemblyTargetInfo.cpp
@@ -29,8 +29,9 @@ Target &llvm::getTheWebAssemblyTarget64() {
extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void
LLVMInitializeWebAssemblyTargetInfo() {
- RegisterTarget<Triple::wasm32> X(getTheWebAssemblyTarget32(), "wasm32",
- "WebAssembly 32-bit", "WebAssembly");
+ RegisterTarget<Triple::wasm32, /*HasJIT=*/true> X(
+ getTheWebAssemblyTarget32(), "wasm32", "WebAssembly 32-bit",
+ "WebAssembly");
RegisterTarget<Triple::wasm64> Y(getTheWebAssemblyTarget64(), "wasm64",
"WebAssembly 64-bit", "WebAssembly");
}
>From ded0a3b199e2cd2e90810f54e54bc5b2c9310dfe Mon Sep 17 00:00:00 2001
From: mcbarton <matthew.c.barton at hotmail.co.uk>
Date: Mon, 28 Jul 2025 19:49:02 +0100
Subject: [PATCH 2/2] Switch EMSCRIPTEN for __EMSCRIPTEN__ in PR
---
.../Interpreter/IncrementalCompilerBuilderTest.cpp | 2 +-
clang/unittests/Interpreter/InterpreterTest.cpp | 6 +++---
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/clang/unittests/Interpreter/IncrementalCompilerBuilderTest.cpp b/clang/unittests/Interpreter/IncrementalCompilerBuilderTest.cpp
index 7c17e28bf1a68..b67a1f01be4b6 100644
--- a/clang/unittests/Interpreter/IncrementalCompilerBuilderTest.cpp
+++ b/clang/unittests/Interpreter/IncrementalCompilerBuilderTest.cpp
@@ -37,7 +37,7 @@ TEST(IncrementalCompilerBuilder, SetCompilerArgs) {
}
TEST(IncrementalCompilerBuilder, SetTargetTriple) {
-#ifdef EMSCRIPTEN
+#ifdef __EMSCRIPTEN__
GTEST_SKIP() << "Test fails for Emscipten builds";
#endif
auto CB = clang::IncrementalCompilerBuilder();
diff --git a/clang/unittests/Interpreter/InterpreterTest.cpp b/clang/unittests/Interpreter/InterpreterTest.cpp
index ad345d2f9e1b6..52d2b83fdb36f 100644
--- a/clang/unittests/Interpreter/InterpreterTest.cpp
+++ b/clang/unittests/Interpreter/InterpreterTest.cpp
@@ -147,7 +147,7 @@ TEST_F(InterpreterTest, DeclsAndStatements) {
}
TEST_F(InterpreterTest, UndoCommand) {
-#ifdef EMSCRIPTEN
+#ifdef __EMSCRIPTEN__
GTEST_SKIP() << "Test fails for Emscipten builds";
#endif
Args ExtraArgs = {"-Xclang", "-diagnostic-log-file", "-Xclang", "-"};
@@ -259,7 +259,7 @@ static NamedDecl *LookupSingleName(Interpreter &Interp, const char *Name) {
}
TEST_F(InterpreterTest, InstantiateTemplate) {
-#ifdef EMSCRIPTEN
+#ifdef __EMSCRIPTEN__
GTEST_SKIP() << "Test fails for Emscipten builds";
#endif
// FIXME: We cannot yet handle delayed template parsing. If we run with
@@ -301,7 +301,7 @@ TEST_F(InterpreterTest, InstantiateTemplate) {
}
TEST_F(InterpreterTest, Value) {
-#ifdef EMSCRIPTEN
+#ifdef __EMSCRIPTEN__
GTEST_SKIP() << "Test fails for Emscipten builds";
#endif
std::vector<const char *> Args = {"-fno-sized-deallocation"};
More information about the llvm-commits
mailing list