changeset 1189:c0091f3b72f1

Make sure debug info is only declared once per alloca.
author Christian Kamm <kamm incasoftware de>
date Thu, 02 Apr 2009 20:56:39 +0200
parents 442ab244c455
children ea7b8b6c96c0
files gen/llvmhelpers.cpp
diffstat 1 files changed, 17 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/gen/llvmhelpers.cpp	Thu Apr 02 19:16:44 2009 +0200
+++ b/gen/llvmhelpers.cpp	Thu Apr 02 20:56:39 2009 +0200
@@ -1082,6 +1082,17 @@
 
     // we don't handle aliases either
     assert(!var->aliassym);
+    
+    // alloca if necessary
+    LLValue* allocaval = NULL;
+    if (!addr && (!var->ir.irLocal || !var->ir.irLocal->value))
+    {
+        addr = DtoAlloca(DtoType(var->type), var->toChars());
+        
+        // add debug info
+        if (global.params.symdebug)
+            DtoDwarfLocalVariable(addr, var);
+    }
         
     // referenced by nested function?
 #if DMDV2
@@ -1092,7 +1103,10 @@
     {
         assert(var->ir.irLocal);
         if(!var->ir.irLocal->value)
-            var->ir.irLocal->value = addr ? addr : DtoAlloca(DtoType(var->type), var->toChars());
+        {
+            assert(addr);
+            var->ir.irLocal->value = addr;
+        }
         else
             assert(!addr || addr == var->ir.irLocal->value);
 
@@ -1113,14 +1127,11 @@
         }
 
         assert(!var->ir.isSet());
+        assert(addr);
         var->ir.irLocal = new IrLocal(var);
-        var->ir.irLocal->value = addr ? addr : DtoAlloca(DtoType(var->type), var->toChars());
+        var->ir.irLocal->value = addr;
     }
 
-    // add debug info
-    if (global.params.symdebug)
-        DtoDwarfLocalVariable(var->ir.irLocal->value, var);
-
     // return the alloca
     return var->ir.irLocal->value;
 }