()
| 263 | #[test] |
| 264 | #[cfg_attr(miri, ignore)] |
| 265 | fn core_dump_with_shared_memory() -> Result<()> { |
| 266 | if super::threads::engine().is_none() { |
| 267 | return Ok(()); |
| 268 | } |
| 269 | let mut config = Config::new(); |
| 270 | config.coredump_on_trap(true); |
| 271 | config.shared_memory(true); |
| 272 | let engine = Engine::new(&config)?; |
| 273 | let mut store = Store::new(&engine, ()); |
| 274 | let wat = r#"(module |
| 275 | (memory 1 1 shared) |
| 276 | (func (export "foo") unreachable) |
| 277 | (data (i32.const 0) "a") |
| 278 | )"#; |
| 279 | let module = Module::new(&engine, wat)?; |
| 280 | let instance = Instance::new(&mut store, &module, &[])?; |
| 281 | let foo = instance.get_typed_func::<(), ()>(&mut store, "foo")?; |
| 282 | let err = foo.call(&mut store, ()).unwrap_err(); |
| 283 | let coredump = err.downcast_ref::<WasmCoreDump>().unwrap(); |
| 284 | assert!(coredump.memories().is_empty()); |
| 285 | |
| 286 | let bytes = coredump.serialize(&mut store, "howdy"); |
| 287 | for payload in wasmparser::Parser::new(0).parse_all(&bytes) { |
| 288 | let payload = payload?; |
| 289 | if let wasmparser::Payload::DataSection(s) = payload { |
| 290 | assert_eq!(s.count(), 0); |
| 291 | } |
| 292 | } |
| 293 | |
| 294 | Ok(()) |
| 295 | } |
nothing calls this directly
no test coverage detected