| 169 | #[test] |
| 170 | #[cfg_attr(miri, ignore)] |
| 171 | fn coredump_has_defined_globals_and_memory() -> Result<()> { |
| 172 | let mut config = Config::default(); |
| 173 | config.coredump_on_trap(true); |
| 174 | let engine = Engine::new(&config).unwrap(); |
| 175 | |
| 176 | let module = Module::new( |
| 177 | &engine, |
| 178 | r#" |
| 179 | (module |
| 180 | (global (mut i32) (i32.const 42)) |
| 181 | (memory 1) |
| 182 | (func (export "a") |
| 183 | unreachable |
| 184 | ) |
| 185 | ) |
| 186 | "#, |
| 187 | )?; |
| 188 | |
| 189 | let mut store = Store::<()>::new(&engine, ()); |
| 190 | let instance = Instance::new(&mut store, &module, &[])?; |
| 191 | |
| 192 | let a_func = instance.get_typed_func::<(), ()>(&mut store, "a")?; |
| 193 | let err = a_func.call(&mut store, ()).unwrap_err(); |
| 194 | let core_dump = err.downcast_ref::<WasmCoreDump>().unwrap(); |
| 195 | assert_eq!(core_dump.globals().len(), 1); |
| 196 | assert_eq!(core_dump.memories().len(), 1); |
| 197 | assert_eq!(core_dump.instances().len(), 1); |
| 198 | let _ = core_dump.serialize(&mut store, "defined-globals-and-memory"); |
| 199 | |
| 200 | Ok(()) |
| 201 | } |
| 202 | |
| 203 | #[test] |
| 204 | #[cfg_attr(miri, ignore)] |