Two bugs in the InvokeFunction call. (1) The first argument is changed from `r4` to `r0`, but `MacroAssembler::InvokeFunction` has `DCHECK_EQ(function, r4)` and unconditionally uses `r4` internally to load the context and invoke the function code — passing `r0` will hit the assertion in debug builds and is semantically wrong. (2) The second argument is changed from `r5` (which holds `kDontAdaptArgumentsSentinel` set on the previous line) to `ip`, which has not been assigned in this function and contains an arbitrary value, so the expected parameter count will be garbage.
__ InvokeFunction(r0, ip, r3, InvokeType::kJump);Bug: `r0` violates the `DCHECK_EQ(function, r4)` contract in `MacroAssembler::InvokeFunction` (see macro-assembler-ppc.cc:1601). The function register must be `r4` — the implementation unconditionally uses `r4` to load the context and invoke the function code, ignoring whatever register is passed here. Additionally, `ip` has not been set in this function; the previous line loads `kDontAdaptArgumentsSentinel` into `r5`, so `r5` should be the expected_parameter_count argument. This should remain `InvokeFunction(r4, r5, r3, InvokeType::kJump)`.
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |