[clang] [llvm] Enable running ClangReplInterpreterTests in an Emscripten environment (PR #150977)

via llvm-commits llvm-commits at lists.llvm.org
Mon Jul 28 08:36:40 PDT 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-webassembly

Author: None (mcbarton)

<details>
<summary>Changes</summary>

@<!-- -->vgvassilev @<!-- -->anutosh491 This is what it took for me to enable running ClangReplInterpreterTests in an Emscripten environment. When I ran this patch for llvm 20 we could run InterpreterTest.InstantiateTemplate , but now it crashes gtest when running in node. Let me know what you think.

---
Full diff: https://github.com/llvm/llvm-project/pull/150977.diff


5 Files Affected:

- (modified) clang/unittests/Interpreter/CMakeLists.txt (+55-26) 
- (modified) clang/unittests/Interpreter/IncrementalCompilerBuilderTest.cpp (+3) 
- (modified) clang/unittests/Interpreter/InterpreterTest.cpp (+9) 
- (modified) llvm/cmake/modules/AddLLVM.cmake (+3-1) 
- (modified) llvm/lib/Target/WebAssembly/TargetInfo/WebAssemblyTargetInfo.cpp (+3-2) 


``````````diff
diff --git a/clang/unittests/Interpreter/CMakeLists.txt b/clang/unittests/Interpreter/CMakeLists.txt
index 1dda9024075a1..a84ab045d4333 100644
--- a/clang/unittests/Interpreter/CMakeLists.txt
+++ b/clang/unittests/Interpreter/CMakeLists.txt
@@ -1,31 +1,60 @@
-add_distinct_clang_unittest(ClangReplInterpreterTests
-  IncrementalCompilerBuilderTest.cpp
-  IncrementalProcessingTest.cpp
-  InterpreterTest.cpp
-  InterpreterExtensionsTest.cpp
-  CodeCompletionTest.cpp
-
-  EXPORT_SYMBOLS
-
-  CLANG_LIBS
-  clangAST
-  clangBasic
-  clangInterpreter
-  clangFrontend
-  clangSema
-
-  LINK_LIBS
-  LLVMTestingSupport
-
-  LLVM_COMPONENTS
-  ${LLVM_TARGETS_TO_BUILD}
-  Core
-  MC
-  OrcJIT
-  Support
-  TargetParser
+if(EMSCRIPTEN)
+
+  add_distinct_clang_unittest(ClangReplInterpreterTests
+    IncrementalCompilerBuilderTest.cpp
+    IncrementalProcessingTest.cpp
+    InterpreterTest.cpp
+    InterpreterExtensionsTest.cpp
+    CodeCompletionTest.cpp
+
+    CLANG_LIBS
+    clangInterpreter
+  )
+
+  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"
+  )
+
+else()
+
+  add_distinct_clang_unittest(ClangReplInterpreterTests
+    IncrementalCompilerBuilderTest.cpp
+    IncrementalProcessingTest.cpp
+    InterpreterTest.cpp
+    InterpreterExtensionsTest.cpp
+    CodeCompletionTest.cpp
+
+    EXPORT_SYMBOLS
+
+    CLANG_LIBS
+    clangAST
+    clangBasic
+    clangInterpreter
+    clangFrontend
+    clangSema
+
+    LINK_LIBS
+    LLVMTestingSupport
+
+    LLVM_COMPONENTS
+    ${LLVM_TARGETS_TO_BUILD}
+    Core
+    MC
+    OrcJIT
+    Support
+    TargetParser
+    )
+
+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");
 }

``````````

</details>


https://github.com/llvm/llvm-project/pull/150977


More information about the llvm-commits mailing list