[Issue 1984] Assertion failure: 'e1->type' on line 1198 in file 'constfold.c'

d-bugmail at puremagic.com d-bugmail at puremagic.com
Wed May 13 11:49:03 PDT 2009


http://d.puremagic.com/issues/show_bug.cgi?id=1984


Don <clugdbug at yahoo.com.au> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |patch
                 CC|                            |clugdbug at yahoo.com.au
            Version|2.012                       |1.037




--- Comment #3 from Don <clugdbug at yahoo.com.au>  2009-05-13 11:49:03 PDT ---

Here are two more extreme versions of the same bug. They segfault even on D1.
// TEST CASE 1: // Segfault D1 and D2.
int[] map = ([ 4:true, 5:true ]).keys;
// TEST CASE 2:
bool[] foo2 = ([ 4:true, 5:true ]).values;


PATCH against DMD2.029
PATCH (interpret.c)
This is crashing because interpret_aakeys() and interpret_aavalues() aren't
setting the type of the array literal which they are creating.
This patch fixes both the segfaults and the original bug.

Note, however, that the original bug report generates an error, because AA
literals cannot be used at runtime. With this patch, the CTFE part of it works
fine.

--- interpret.c    (revision 26)
+++ interpret.c    (working copy)
@@ -2291,6 +2295,8 @@
     return NULL;
     AssocArrayLiteralExp *aae = (AssocArrayLiteralExp *)earg;
     Expression *e = new ArrayLiteralExp(aae->loc, aae->keys);
+    Type *elemType = ((TypeAArray *)aae->type)->index;
+    e->type = new TypeSArray(elemType, ArrayLength(elemType, e));
     return e;
 }

@@ -2307,6 +2313,8 @@
     return NULL;
     AssocArrayLiteralExp *aae = (AssocArrayLiteralExp *)earg;
     Expression *e = new ArrayLiteralExp(aae->loc, aae->values);
+    Type *elemType = ((TypeAArray *)aae->type)->next;
+    e->type = new TypeSArray(elemType, ArrayLength(elemType, e));
     //printf("result is %s\n", e->toChars());
     return e;
 }

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list