The testcase show the stack pointer isn't recovered when we got
exception from _Z3fooiiiiiiiiiiPi, and then we screw up due to
restore return address from wrong stack pointer.
NOTE: Trigger conditions:
1. Frame pointer is required.
2. Stack has out-going argument
3. Vector extension is enabled.
Another run-able testcase:
$ clang++ -target riscv64-unknown-linux-gnu -march=rv64gcv test.cpp
void __attribute__((noinline)) foo(int, int, int, int, int, int, int, int, int, int, int *){ throw int(0); } int main(int argc, char **argv) { int exception_value = 1; try { foo(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); } catch (int i) { exception_value = i; } return exception_value; }