Index: src/arm64/assembler-arm64.cc |
diff --git a/src/arm64/assembler-arm64.cc b/src/arm64/assembler-arm64.cc |
index 8bee92ccc273a87b1e319481ef0697063c7f4075..ad2997c316070600fba82c707a0fd07ab0a162ff 100644 |
--- a/src/arm64/assembler-arm64.cc |
+++ b/src/arm64/assembler-arm64.cc |
@@ -456,6 +456,8 @@ void Assembler::bind(Label* label) { |
ASSERT(!label->is_near_linked()); |
ASSERT(!label->is_bound()); |
+ DeleteUnresolvedBranchInfoForLabel(label); |
+ |
// If the label is linked, the link chain looks something like this: |
// |
// |--I----I-------I-------L |
@@ -497,8 +499,6 @@ void Assembler::bind(Label* label) { |
ASSERT(label->is_bound()); |
ASSERT(!label->is_linked()); |
- |
- DeleteUnresolvedBranchInfoForLabel(label); |
} |
@@ -551,14 +551,16 @@ void Assembler::DeleteUnresolvedBranchInfoForLabel(Label* label) { |
return; |
} |
- // Branches to this label will be resolved when the label is bound below. |
- std::multimap<int, FarBranchInfo>::iterator it_tmp, it; |
- it = unresolved_branches_.begin(); |
- while (it != unresolved_branches_.end()) { |
- it_tmp = it++; |
- if (it_tmp->second.label_ == label) { |
- CHECK(it_tmp->first >= pc_offset()); |
- unresolved_branches_.erase(it_tmp); |
+ if (label->is_linked()) { |
+ // Branches to this label will be resolved when the label is bound below. |
+ std::multimap<int, FarBranchInfo>::iterator it_tmp, it; |
+ it = unresolved_branches_.begin(); |
+ while (it != unresolved_branches_.end()) { |
+ it_tmp = it++; |
+ if (it_tmp->second.label_ == label) { |
+ CHECK(it_tmp->first >= pc_offset()); |
+ unresolved_branches_.erase(it_tmp); |
+ } |
} |
} |
if (unresolved_branches_.empty()) { |