IR: Take uint64_t in DIBuilder::createExpression()
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>
Mon, 9 Feb 2015 22:13:27 +0000 (22:13 +0000)
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>
Mon, 9 Feb 2015 22:13:27 +0000 (22:13 +0000)
`DIExpression` deals with `uint64_t`, so it doesn't make sense that
`createExpression()` is created from `int64_t`.  Switch to `uint64_t` to
unify them.

I've temporarily left in the `int64_t` version, which forwards to the
`uint64_t` version.  I'll delete it once I've updated the callers.

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

include/llvm/IR/DIBuilder.h
lib/IR/DIBuilder.cpp
lib/Transforms/Utils/Local.cpp

index b0eec7e576b2fbede426346d7cf9141bcdf0eb6f..06753e7fce5fbd1d84557026efa61e46f884cf9b 100644 (file)
@@ -514,7 +514,8 @@ namespace llvm {
     /// createExpression - Create a new descriptor for the specified
     /// variable which has a complex address expression for its address.
     /// @param Addr        An array of complex address operations.
-    DIExpression createExpression(ArrayRef<int64_t> Addr = None);
+    DIExpression createExpression(ArrayRef<uint64_t> Addr = None);
+    DIExpression createExpression(ArrayRef<int64_t> Addr);
 
     /// createPieceExpression - Create a descriptor to describe one part
     /// of aggregate variable that is fragmented across multiple Values.
index 4c8dbb7251454611c44fd45ece5323a8634db714..a1af40546b7319318f5b83f0dba38eb09f3992ea 100644 (file)
@@ -947,17 +947,23 @@ DIVariable DIBuilder::createLocalVariable(unsigned Tag, DIDescriptor Scope,
   return RetVar;
 }
 
-DIExpression DIBuilder::createExpression(ArrayRef<int64_t> Addr) {
+DIExpression DIBuilder::createExpression(ArrayRef<uint64_t> Addr) {
   auto Header = HeaderBuilder::get(DW_TAG_expression);
-  for (int64_t I : Addr)
+  for (uint64_t I : Addr)
     Header.concat(I);
   Metadata *Elts[] = {Header.get(VMContext)};
   return DIExpression(MDNode::get(VMContext, Elts));
 }
 
+DIExpression DIBuilder::createExpression(ArrayRef<int64_t> Signed) {
+  // TODO: Remove the callers of this signed version and delete.
+  SmallVector<uint64_t, 8> Addr(Signed.begin(), Signed.end());
+  return createExpression(Addr);
+}
+
 DIExpression DIBuilder::createPieceExpression(unsigned OffsetInBytes,
                                               unsigned SizeInBytes) {
-  int64_t Addr[] = {dwarf::DW_OP_piece, OffsetInBytes, SizeInBytes};
+  uint64_t Addr[] = {dwarf::DW_OP_piece, OffsetInBytes, SizeInBytes};
   return createExpression(Addr);
 }
 
index c2dfaf52746d5d4aed511111d2882c9bbde25d7c..b8c0a7e47b5bc0dbac2f0c4f6554bf9efebfeeaa 100644 (file)
@@ -1123,7 +1123,7 @@ bool llvm::replaceDbgDeclareForAlloca(AllocaInst *AI, Value *NewAllocaAddress,
     // "deref" operation to a list of address elements, as new llvm.dbg.declare
     // will take a value storing address of the memory for variable, not
     // alloca itself.
-    SmallVector<int64_t, 4> NewDIExpr;
+    SmallVector<uint64_t, 4> NewDIExpr;
     NewDIExpr.push_back(dwarf::DW_OP_deref);
     if (DIExpr)
       for (unsigned i = 0, n = DIExpr.getNumElements(); i < n; ++i)