[Issue 3401] Segfault(expression.c) on invariant + method overload

d-bugmail at puremagic.com d-bugmail at puremagic.com
Thu Oct 15 02:07:04 PDT 2009


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


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

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |patch


--- Comment #3 from Don <clugdbug at yahoo.com.au> 2009-10-15 02:07:03 PDT ---
func.c, line 1568 (DMD 1.050), in mergeFensure(): Need to check fdensure as 
well as fensure.

    FuncDeclaration *fdv = (FuncDeclaration *)foverrides.data[i];
    sf = fdv->mergeFensure(sf);
-    if (fdv->fensure)
+    if (fdv->fensure && fdv->fdensure)
    {
        //printf("fdv->fensure: %s\n", fdv->fensure->toChars());
        // Make the call: __ensure(result)
        Expression *eresult = NULL;

Likewise in mergeFrequire, line 1524 should probably be:

    FuncDeclaration *fdv = (FuncDeclaration *)foverrides.data[i];
    sf = fdv->mergeFrequire(sf);
-    if (fdv->frequire)
+    if (fdv->frequire && fdv->fdrequire)
    {
        //printf("fdv->frequire: %s\n", fdv->frequire->toChars());
        /* Make the call:
         *   try { __require(); }
         *   catch { frequire; }
         */
        Expression *eresult = NULL;
        Expression *e = new CallExp(loc, new VarExp(loc, fdv->fdrequire),
eresult);
        Statement *s2 = new ExpStatement(loc, 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