From 367460b2348a5e979aeac4a04935939c217a24be Mon Sep 17 00:00:00 2001 From: Simonas Kazlauskas Date: Mon, 24 Jan 2022 15:39:19 +0200 Subject: [PATCH] regression test for GPR exhaustion during calls --- tests/compilers/issues.rs | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/tests/compilers/issues.rs b/tests/compilers/issues.rs index a07d9a82bd9..8a23405baff 100644 --- a/tests/compilers/issues.rs +++ b/tests/compilers/issues.rs @@ -225,3 +225,42 @@ fn call_with_static_data_pointers(mut config: crate::Config) -> Result<()> { instance.exports.get_function("repro")?.call(&[])?; Ok(()) } + +/// Exhaustion of GPRs when calling a function with many floating point arguments +/// +/// Note: this one is specific to Singlepass, but we want to test in all +/// available compilers. +#[compiler_test(issues)] +fn regression_gpr_exhaustion_for_calls(mut config: crate::Config) -> Result<()> { + let store = config.store(); + let wat = r#" + (module + (type (;0;) (func (param f64) (result i32))) + (type (;1;) (func (param f64 f64 f64 f64 f64 f64))) + (func (;0;) (type 0) (param f64) (result i32) + local.get 0 + local.get 0 + local.get 0 + local.get 0 + f64.const 0 + f64.const 0 + f64.const 0 + f64.const 0 + f64.const 0 + f64.const 0 + f64.const 0 + i32.const 0 + call_indirect (type 0) + call_indirect (type 1) + drop + drop + drop + drop + i32.const 0) + (table (;0;) 1 1 funcref)) + "#; + let module = Module::new(&store, wat)?; + let imports: ImportObject = imports! {}; + let instance = Instance::new(&module, &imports)?; + Ok(()) +}