summaryrefslogtreecommitdiffstats
path: root/llvm/include
diff options
context:
space:
mode:
authorAdrian Prantl <aprantl@apple.com>2017-05-09 19:47:37 +0000
committerAdrian Prantl <aprantl@apple.com>2017-05-09 19:47:37 +0000
commitc10d0e5ccd12f049bddb24dcf8bbb7fbbc6c68f2 (patch)
tree040042696a2447b6326e2086d645a95c5eca8954 /llvm/include
parentd979c1f80607eabadf8395ac690daf1b93f24789 (diff)
downloadbcm5719-llvm-c10d0e5ccd12f049bddb24dcf8bbb7fbbc6c68f2.tar.gz
bcm5719-llvm-c10d0e5ccd12f049bddb24dcf8bbb7fbbc6c68f2.zip
Make it illegal for two Functions to point to the same DISubprogram
As recently discussed on llvm-dev [1], this patch makes it illegal for two Functions to point to the same DISubprogram and updates FunctionCloner to also clone the debug info of a function to conform to the new requirement. To simplify the implementation it also factors out the creation of inlineAt locations from the Inliner into a general-purpose utility in DILocation. [1] http://lists.llvm.org/pipermail/llvm-dev/2017-May/112661.html <rdar://problem/31926379> Differential Revision: https://reviews.llvm.org/D32975 This reapplies r302469 with a fix for a bot failure (reparentDebugInfo now checks for the case the orig and new function are identical). llvm-svn: 302576
Diffstat (limited to 'llvm/include')
-rw-r--r--llvm/include/llvm/IR/DebugLoc.h16
1 files changed, 16 insertions, 0 deletions
diff --git a/llvm/include/llvm/IR/DebugLoc.h b/llvm/include/llvm/IR/DebugLoc.h
index 202be3da14d..aa74f361cda 100644
--- a/llvm/include/llvm/IR/DebugLoc.h
+++ b/llvm/include/llvm/IR/DebugLoc.h
@@ -80,6 +80,22 @@ namespace llvm {
static DebugLoc get(unsigned Line, unsigned Col, const MDNode *Scope,
const MDNode *InlinedAt = nullptr);
+ enum { ReplaceLastInlinedAt = true };
+ /// Rebuild the entire inlined-at chain for this instruction so that the top of
+ /// the chain now is inlined-at the new call site.
+ /// \param InlinedAt The new outermost inlined-at in the chain.
+ /// \param ReplaceLast Replace the last location in the inlined-at chain.
+ static DebugLoc appendInlinedAt(DebugLoc DL, DILocation *InlinedAt,
+ LLVMContext &Ctx,
+ DenseMap<const MDNode *, MDNode *> &Cache,
+ bool ReplaceLast = false);
+
+ /// Reparent all debug locations referenced by \c I that belong to \c OrigSP
+ /// to become (possibly indirect) children of \c NewSP.
+ static void reparentDebugInfo(Instruction &I, DISubprogram *OrigSP,
+ DISubprogram *NewSP,
+ DenseMap<const MDNode *, MDNode *> &Cache);
+
unsigned getLine() const;
unsigned getCol() const;
MDNode *getScope() const;
OpenPOWER on IntegriCloud