[llvm] r358940 - Revert "Use const DebugLoc&"

Chandler Carruth via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 22 18:42:07 PDT 2019


Author: chandlerc
Date: Mon Apr 22 18:42:07 2019
New Revision: 358940

URL: http://llvm.org/viewvc/llvm-project?rev=358940&view=rev
Log:
Revert "Use const DebugLoc&"

This reverts r358910 (git commit 2b744665308fc8d30a3baecb4947f2bd81aa7d30)

While this patch *seems* trivial and safe and correct, it is not. The
copies are actually load bearing copies. You can observe this with MSan
or other ways of checking for use-after-destroy, but otherwise this may
result in ... difficult to debug inexplicable behavior.

I suspect the issue is that the debug location is used after the
original reference to it is removed. The metadata backing it gets
destroyed as its last references goes away, and then we reference it
later through these const references.

Modified:
    llvm/trunk/lib/CodeGen/BranchRelaxation.cpp

Modified: llvm/trunk/lib/CodeGen/BranchRelaxation.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/BranchRelaxation.cpp?rev=358940&r1=358939&r2=358940&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/BranchRelaxation.cpp (original)
+++ llvm/trunk/lib/CodeGen/BranchRelaxation.cpp Mon Apr 22 18:42:07 2019
@@ -300,7 +300,7 @@ bool BranchRelaxation::isBlockInRange(
 /// too far away to fit in its displacement field. It is converted to an inverse
 /// conditional branch + an unconditional branch to the destination.
 bool BranchRelaxation::fixupConditionalBranch(MachineInstr &MI) {
-  const DebugLoc &DL = MI.getDebugLoc();
+  DebugLoc DL = MI.getDebugLoc();
   MachineBasicBlock *MBB = MI.getParent();
   MachineBasicBlock *TBB = nullptr, *FBB = nullptr;
   MachineBasicBlock *NewBB = nullptr;
@@ -468,7 +468,7 @@ bool BranchRelaxation::fixupUnconditiona
     MBB->replaceSuccessor(DestBB, BranchBB);
   }
 
-  const DebugLoc &DL = MI.getDebugLoc();
+  DebugLoc DL = MI.getDebugLoc();
   MI.eraseFromParent();
   BlockInfo[BranchBB->getNumber()].Size += TII->insertIndirectBranch(
     *BranchBB, *DestBB, DL, DestOffset - SrcOffset, RS.get());




More information about the llvm-commits mailing list