aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Basic/FileManager.cpp
diff options
context:
space:
mode:
authorDavid Spickett <david.spickett@linaro.org>2024-10-21 11:49:45 +0000
committerDavid Spickett <david.spickett@linaro.org>2024-10-21 11:54:54 +0000
commitc47df3e8c8f47bab8a8302757c50710e0e1c43fb (patch)
treebbbf34fc7f3dda37c49c890e97b53313faa8c88c /clang/lib/Basic/FileManager.cpp
parentdf02bcc81d5099d60c2ec037edf8eaeb66456319 (diff)
downloadllvm-c47df3e8c8f47bab8a8302757c50710e0e1c43fb.zip
llvm-c47df3e8c8f47bab8a8302757c50710e0e1c43fb.tar.gz
llvm-c47df3e8c8f47bab8a8302757c50710e0e1c43fb.tar.bz2
[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.
Diffstat (limited to 'clang/lib/Basic/FileManager.cpp')
0 files changed, 0 insertions, 0 deletions