AsmPrinter: Take range in DwarfExpression::AddExpression(), NFC
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>
Tue, 17 Feb 2015 22:30:56 +0000 (22:30 +0000)
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>
Tue, 17 Feb 2015 22:30:56 +0000 (22:30 +0000)
Previously `DwarfExpression::AddExpression()` relied on
default-constructing the end iterators for `DIExpression` -- once the
operands are represented explicitly via `MDExpression` (instead of via
the strange `StringRef` navigator in `DIHeaderIterator`) this won't
work.  Explicitly take an iterator for the end of the range.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229572 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
lib/CodeGen/AsmPrinter/DwarfDebug.cpp
lib/CodeGen/AsmPrinter/DwarfExpression.cpp
lib/CodeGen/AsmPrinter/DwarfExpression.h

index 81f2329657b13556eaa5012fcdf07f9735cdce89..a620ebba2417fe870e27ac82faffd2284be1dfed 100644 (file)
@@ -527,8 +527,11 @@ DwarfCompileUnit::constructVariableDIEImpl(const DbgVariable &DV,
     const TargetFrameLowering *TFI =
         Asm->TM.getSubtargetImpl()->getFrameLowering();
     int Offset = TFI->getFrameIndexReference(*Asm->MF, FI, FrameReg);
+    assert(Expr != DV.getExpression().end() &&
+           "Wrong number of expressions");
     DwarfExpr.AddMachineRegIndirect(FrameReg, Offset);
-    DwarfExpr.AddExpression(*(Expr++));
+    DwarfExpr.AddExpression(Expr->begin(), Expr->end());
+    ++Expr;
   }
   addBlock(*VariableDie, dwarf::DW_AT_location, Loc);
 
@@ -780,7 +783,7 @@ void DwarfCompileUnit::addComplexAddress(const DbgVariable &DV, DIE &Die,
     ValidReg = DwarfExpr.AddMachineRegIndirect(Location.getReg(),
                                                Location.getOffset());
     if (ValidReg)
-      DwarfExpr.AddExpression(Expr);
+      DwarfExpr.AddExpression(Expr.begin(), Expr.end());
   } else
     ValidReg = DwarfExpr.AddMachineRegExpression(Expr, Location.getReg());
 
index e214591a1fd062eed442decf3e34984aecbd1245..4aa12ed25060030c0941465b95210d38fe2cdd2c 100644 (file)
@@ -1725,7 +1725,7 @@ void DwarfDebug::emitDebugLocValue(ByteStreamer &Streamer,
       // Complex address entry.
       if (Loc.getOffset()) {
         DwarfExpr.AddMachineRegIndirect(Loc.getReg(), Loc.getOffset());
-        DwarfExpr.AddExpression(Expr, PieceOffsetInBits);
+        DwarfExpr.AddExpression(Expr.begin(), Expr.end(), PieceOffsetInBits);
       } else
         DwarfExpr.AddMachineRegExpression(Expr, Loc.getReg(),
                                           PieceOffsetInBits);
index 3d1e3822c51c842c5870cb221b5924c8a8f73525..fcab067424e8aa204325726a9e9bc3660040fe27 100644 (file)
@@ -240,13 +240,14 @@ bool DwarfExpression::AddMachineRegExpression(DIExpression Expr,
     return false;
 
   // Emit remaining elements of the expression.
-  AddExpression(I, PieceOffsetInBits);
+  AddExpression(I, Expr.end(), PieceOffsetInBits);
   return true;
 }
 
 void DwarfExpression::AddExpression(DIExpression::iterator I,
+                                    DIExpression::iterator E,
                                     unsigned PieceOffsetInBits) {
for (; I != DIExpression::iterator(); ++I) {
 for (; I != E; ++I) {
     switch (*I) {
     case dwarf::DW_OP_bit_piece: {
       unsigned OffsetInBits = I->getArg(1);
index d4062e8e3bc6cd9239aa0f73f440187411da39f3..b90b7b682ac66a025c4aa7da2e93c4c99cd90b8f 100644 (file)
@@ -96,7 +96,8 @@ public:
   /// Emit a the operations remaining the DIExpressionIterator I.
   /// \param PieceOffsetInBits If this is one piece out of a fragmented
   /// location, this is the offset of the piece inside the entire variable.
-  void AddExpression(DIExpression::iterator I, unsigned PieceOffsetInBits = 0);
+  void AddExpression(DIExpression::iterator I, DIExpression::iterator E,
+                     unsigned PieceOffsetInBits = 0);
 };
 
 /// DwarfExpression implementation for .debug_loc entries.