[llvm] [BOLT][AArch64]`lookupStubFromGroup` Should Check the Last Element Instead of Returning `nullptr` When `lower_bound` Reaches End Iterator (PR #114015)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 29 01:18:08 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-bolt
Author: Nicholas (liusy58)
<details>
<summary>Changes</summary>
The current implementation of `lookupStubFromGroup` is incorrect. The function is intended to find and return the closest stub using `lower_bound`, which identifies the first element in a sorted range that is not less than a specified value. However, if such an element is not found within `Candidates` and the list is not empty, the function returns `nullptr`. Instead, it should check whether the last element satisfies the condition.
---
Full diff: https://github.com/llvm/llvm-project/pull/114015.diff
1 Files Affected:
- (modified) bolt/lib/Passes/LongJmp.cpp (+3-3)
``````````diff
diff --git a/bolt/lib/Passes/LongJmp.cpp b/bolt/lib/Passes/LongJmp.cpp
index 0b2d00300f46b9..77acd2decc9bd9 100644
--- a/bolt/lib/Passes/LongJmp.cpp
+++ b/bolt/lib/Passes/LongJmp.cpp
@@ -130,9 +130,9 @@ BinaryBasicBlock *LongJmpPass::lookupStubFromGroup(
const std::pair<uint64_t, BinaryBasicBlock *> &RHS) {
return LHS.first < RHS.first;
});
- if (Cand == Candidates.end())
- return nullptr;
- if (Cand != Candidates.begin()) {
+ if (Cand == Candidates.end()) {
+ Cand = std::prev(Cand);
+ } else if (Cand != Candidates.begin()) {
const StubTy *LeftCand = std::prev(Cand);
if (Cand->first - DotAddress > DotAddress - LeftCand->first)
Cand = LeftCand;
``````````
</details>
https://github.com/llvm/llvm-project/pull/114015
More information about the llvm-commits
mailing list