Allow DIBuilder::replaceVTableHolder() to work with temporary nodes,
authorAdrian Prantl <aprantl@apple.com>
Wed, 11 Feb 2015 17:45:10 +0000 (17:45 +0000)
committerAdrian Prantl <aprantl@apple.com>
Wed, 11 Feb 2015 17:45:10 +0000 (17:45 +0000)
tested via the clang test CodeGenCXX/vtable-holder-self-reference.cpp .

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

lib/IR/DIBuilder.cpp

index 5cdb6a6487df3912bdd359b8bb7e110eaffcf1f0..5217a4ea6dc23e74d3b3975debe0093d4b4e5d71 100644 (file)
@@ -1229,12 +1229,12 @@ void DIBuilder::replaceVTableHolder(DICompositeType &T, DICompositeType VTableHo
   if (T != VTableHolder)
     return;
 
-  // Look for unresolved operands.  T has dropped RAUW support and is already
-  // marked resolved, orphaning any cycles underneath it.
-  assert(T->isResolved() && "Expected self-reference to be resolved");
-  for (const MDOperand &O : T->operands())
-    if (auto *N = dyn_cast_or_null<MDNode>(O))
-      trackIfUnresolved(N);
+  // Look for unresolved operands.  T will drop RAUW support, orphaning any
+  // cycles underneath it.
+  if (T->isResolved())
+    for (const MDOperand &O : T->operands())
+      if (auto *N = dyn_cast_or_null<MDNode>(O))
+        trackIfUnresolved(N);
 }
 
 void DIBuilder::replaceArrays(DICompositeType &T, DIArray Elements,