The condition and assert messages are contradicting each other here:
```
frame frame::sender_for_compiled_frame(RegisterMap* map) const {
...
assert(_cb->frame_size() >= 0, "must have non-zero frame size");
intptr_t* sender_sp = unextended_sp() + _cb->frame_size();
```
I found this in x86_32 Loom port, where a entry generator bug caused zero-sized frames. I believe the assert message is correct, and the condition is not: sender SP should be different from (unextended) SP. In fact, if allowed to proceed, the tests can then fail the later assert, assuming `sp() == unextended_sp()`:
```
assert(sender_sp != sp(), "must have changed");
```
This code predates OpenJDK history, and assert was copy-pasted in this form to many arches.
```
frame frame::sender_for_compiled_frame(RegisterMap* map) const {
...
assert(_cb->frame_size() >= 0, "must have non-zero frame size");
intptr_t* sender_sp = unextended_sp() + _cb->frame_size();
```
I found this in x86_32 Loom port, where a entry generator bug caused zero-sized frames. I believe the assert message is correct, and the condition is not: sender SP should be different from (unextended) SP. In fact, if allowed to proceed, the tests can then fail the later assert, assuming `sp() == unextended_sp()`:
```
assert(sender_sp != sp(), "must have changed");
```
This code predates OpenJDK history, and assert was copy-pasted in this form to many arches.