aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorDavid Blaikie <dblaikie@gmail.com>2013-08-09 17:17:12 +0000
committerDavid Blaikie <dblaikie@gmail.com>2013-08-09 17:17:12 +0000
commit8328b6932ffeb41af7fc1260a48d36cf2a427f6f (patch)
tree308fb39dbb5e7f87f755e630a7bab5f75e6cff17 /lib
parent5752b08aef30386cc6720b59f1103e770ae4eb9c (diff)
downloadexternal_llvm-8328b6932ffeb41af7fc1260a48d36cf2a427f6f.zip
external_llvm-8328b6932ffeb41af7fc1260a48d36cf2a427f6f.tar.gz
external_llvm-8328b6932ffeb41af7fc1260a48d36cf2a427f6f.tar.bz2
DebugInfo: provide the ability to add members to a class after it has been constructed
This is necessary to allow Clang to only emit implicit members when there is code generated for them, rather than whenever they are ODR used. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@188082 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/IR/DebugInfo.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/IR/DebugInfo.cpp b/lib/IR/DebugInfo.cpp
index fc93249..0f7ddb5 100644
--- a/lib/IR/DebugInfo.cpp
+++ b/lib/IR/DebugInfo.cpp
@@ -647,6 +647,19 @@ void DICompositeType::setTypeArray(DIArray Elements, DIArray TParams) {
DbgNode = N;
}
+void DICompositeType::addMember(DISubprogram S) {
+ SmallVector<llvm::Value *, 16> M;
+ DIArray OrigM = getTypeArray();
+ unsigned Elements = OrigM.getNumElements();
+ if (Elements == 1 && !OrigM.getElement(0))
+ Elements = 0;
+ M.reserve(Elements + 1);
+ for (unsigned i = 0; i != Elements; ++i)
+ M.push_back(OrigM.getElement(i));
+ M.push_back(S);
+ setTypeArray(DIArray(MDNode::get(DbgNode->getContext(), M)));
+}
+
/// \brief Set the containing type.
void DICompositeType::setContainingType(DICompositeType ContainingType) {
TrackingVH<MDNode> N(*this);