More long term solution


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30720 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/DwarfWriter.cpp b/lib/CodeGen/DwarfWriter.cpp
index 32079f2..aa393f3 100644
--- a/lib/CodeGen/DwarfWriter.cpp
+++ b/lib/CodeGen/DwarfWriter.cpp
@@ -1259,17 +1259,27 @@
     Unit->getDie()->AddChild(Die);
     return Die;
   }
-  
+ 
   // Check for pre-existence.
   DIE *&Slot = Unit->getDieMapSlotFor(TyDesc);
   if (Slot) return Slot;
 
+  // Type DIE result.
+  DIE *Ty = NULL;
+
+  // Short cut for handling subprogram types (not really a TyDesc.)
+  if (SubprogramDesc *SubprogramTy = dyn_cast<SubprogramDesc>(TyDesc)) {
+    Slot = Ty = new DIE(DW_TAG_pointer_type);
+    Ty->AddUInt(DW_AT_byte_size, 0, TAI->getAddressSize());
+    Ty->AddString(DW_AT_name, DW_FORM_string, SubprogramTy->getName());
+    Context->AddChild(Ty);
+    return Slot;
+  }
+  
   // Get core information.
   const std::string &Name = TyDesc->getName();
   uint64_t Size = TyDesc->getSize() >> 3;
   
-  DIE *Ty = NULL;
-  
   if (BasicTypeDesc *BasicTy = dyn_cast<BasicTypeDesc>(TyDesc)) {
     // Fundamental types like int, float, bool
     Slot = Ty = new DIE(DW_TAG_base_type);
@@ -1526,14 +1536,8 @@
     }
     default: break;
     }
-  } else if (SubprogramDesc *SubprogramTy = dyn_cast<SubprogramDesc>(TyDesc)) {
-    Slot =  Ty = new DIE(DW_TAG_pointer_type);
-    Ty->AddUInt(DW_AT_byte_size, 0, TAI->getAddressSize());
-    Ty->AddString(DW_AT_name, DW_FORM_string, SubprogramTy->getName());
-    Context->AddChild(Ty);
-    return Slot;
   }
-  
+    
   assert(Ty && "Type not supported yet");
  
   // Add size if non-zero (derived types don't have a size.)