Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,7 @@ if(MINICC_ENABLE_TESTING)
-DWASM_TCC=$<TARGET_FILE:wasm32-tcc>
-DSOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}
-DBINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}
-DNODE_EXECUTABLE=${MINICC_NODE_EXECUTABLE}
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/RunWasmCompileFailTest.cmake
)
endif()
Expand Down
26 changes: 18 additions & 8 deletions cmake/RunWasmCompileFailTest.cmake
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.20)

foreach(_req TEST_NAME WASM_TCC SOURCE_DIR BINARY_DIR)
foreach(_req TEST_NAME WASM_TCC SOURCE_DIR BINARY_DIR NODE_EXECUTABLE)
if(NOT DEFINED ${_req} OR "${${_req}}" STREQUAL "")
message(FATAL_ERROR "RunWasmCompileFailTest.cmake: missing required -D${_req}=...")
endif()
Expand All @@ -24,17 +24,27 @@ execute_process(
ERROR_VARIABLE _cc_stderr
)

if(_cc_rv EQUAL 0)
if(NOT _cc_rv EQUAL 0)
message(FATAL_ERROR
"Expected wasm compile to fail for ${TEST_NAME}, but it succeeded.\n"
"Expected wasm compile to succeed for ${TEST_NAME}, but it failed.\n"
"exit code: ${_cc_rv}\n"
"stdout:\n${_cc_stdout}\n"
"stderr:\n${_cc_stderr}")
endif()

if(NOT _cc_stderr MATCHES "unresolved direct call")
execute_process(
COMMAND "${NODE_EXECUTABLE}" -e
"const fs=require('fs');const p=process.argv[1];const m=new WebAssembly.Module(fs.readFileSync(p));const imports=WebAssembly.Module.imports(m);const ok=imports.some(i=>i.kind==='function'&&i.module==='env'&&i.name==='missing');if(!ok){console.error(JSON.stringify(imports));process.exit(2);}"
"${_out_wasm}"
RESULT_VARIABLE _node_rv
OUTPUT_VARIABLE _node_stdout
ERROR_VARIABLE _node_stderr
)

if(NOT _node_rv EQUAL 0)
message(FATAL_ERROR
"Expected unresolved direct call diagnostic for ${TEST_NAME}.\n"
"exit code: ${_cc_rv}\n"
"stdout:\n${_cc_stdout}\n"
"stderr:\n${_cc_stderr}")
"Expected wasm import env.missing for ${TEST_NAME}.\n"
"node exit code: ${_node_rv}\n"
"stdout:\n${_node_stdout}\n"
"stderr:\n${_node_stderr}")
endif()
Loading