[all-commits] [llvm/llvm-project] c47df3: [lldb][test] Make vector operator[] return T& to w...
David Spickett via All-commits
all-commits at lists.llvm.org
Mon Oct 21 04:57:20 PDT 2024
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: c47df3e8c8f47bab8a8302757c50710e0e1c43fb
https://github.com/llvm/llvm-project/commit/c47df3e8c8f47bab8a8302757c50710e0e1c43fb
Author: David Spickett <david.spickett at linaro.org>
Date: 2024-10-21 (Mon, 21 Oct 2024)
Changed paths:
M lldb/test/Shell/Recognizer/Inputs/verbose_trap-in-stl.cpp
Log Message:
-----------
[lldb][test] Make vector operator[] return T& to workaround Arm codegen issue
Since https://github.com/llvm/llvm-project/pull/109628 landed, this test
has been failing on 32-bit Arm.
This is due to a codegen problem (whether added or uncovered by the change,
not known) where the trap instruction is placed after the frame pointer
and link register are restored.
https://github.com/llvm/llvm-project/issues/113154
So the code was:
```
std::__1::vector<int>::operator[](unsigned int):
sub sp, sp, #8
str r0, [sp, #4]
str r1, [sp]
add sp, sp, #8
.inst 0xe7ffdefe
bx lr
```
When lldb saw the trap, the PC was inside operator[] but the frame
information actually pointed to g.
This bug only happens for leaf functions so adding a return type
works around it:
```
std::__1::vector<int>::operator[](unsigned int):
push {r11, lr}
mov r11, sp
sub sp, sp, #8
str r0, [sp, #4]
str r1, [sp]
mov sp, r11
pop {r11, lr}
.inst 0xe7ffdefe
bx lr
```
(and operator[] should return T& anyway)
Now the PC location and frame information should match and the
test passes.
To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications
More information about the All-commits
mailing list