diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
index 755f27867ec..738b879fcef 100644
--- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
+++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
@@ -994,8 +994,10 @@ void DwarfDebug::collectDeadVariables() {
         // Construct subprogram DIE and add variables DIEs.
         CompileUnit *SPCU = CUMap.lookup(TheCU);
         assert(SPCU && "Unable to find Compile Unit!");
-        DIE *SPDIE = SPCU->getDIE(SP);
-        assert(SPDIE && "Subprogram wasn't created?");
+	// FIXME: See the comment in constructSubprogramDIE about duplicate
+	// subprogram DIEs.
+	constructSubprogramDIE(SPCU, SP);
+	DIE *SPDIE = SPCU->getDIE(SP);
         for (unsigned vi = 0, ve = Variables.getNumElements(); vi != ve; ++vi) {
           DIVariable DV(Variables.getElement(vi));
           if (!DV.isVariable())