www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 9540] New: Compiler crash on delegate context frame assignment

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=9540

           Summary: Compiler crash on delegate context frame assignment
           Product: D
           Version: D2
          Platform: x86
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: csantander outlook.com



19:31:35 EST ---
I'm trying to write a particular template, and once I got to a certain point, I
got DMD to crash. I'm attaching the file with the offending code. The compiler
output is:

 Assertion failed: (0), function totym, file glue.c, line 1235.
 Abort trap: 6
I tested this with DMD 2.061 on WIndows and Mac OS X. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Feb 19 2013
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=9540




19:32:15 EST ---
Created an attachment (id=1193)
test case

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Feb 19 2013
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=9540


Maxim Fomin <maxim maxim-fomin.ru> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |ice
                 CC|                            |maxim maxim-fomin.ru



---
That's because Type::totym() during object file generation got Terror value,
which is not switched. Error message can be improved by checking for such value
and printing usual error, but the real problem is that Terror escaped frontend.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Feb 20 2013
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=9540




---

 Assertion failed: (0), function totym, file glue.c, line 1235.
 Abort trap: 6
I tested this with DMD 2.061 on WIndows and Mac OS X.
Can confirm on linux githead. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Feb 20 2013
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=9540




---
Reduced:

module failure;

template Tuple(E...) { alias E Tuple; }
alias Tuple!(int) Args;

void main() {
    (new A).test ();
}

void test1 (int delegate (int) f) { f (-2); }

class A
{
    int f (int a) {
        return a;
    }

    void test () {
        test1 (&AddFront!(this, f));
    }
}

template AddFront (alias ctx, alias fun)  {
    auto AddFront(Args args) {
        auto dg (Args dgArgs) {
            return fun (dgArgs);
        }
        dg.ptr = ctx;
        return dg(args);
    }
}

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Feb 20 2013
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=9540


Dmitry Olshansky <dmitry.olsh gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |dmitry.olsh gmail.com



05:24:43 PDT ---
Nice job at reduction.

I'm hitting the same issue while trying to integrate new std.uni into Phobos 
but the circumstances are different. I'm certainly not trying to do anything 
funky with delegate pointers.

The message is the same for me (both with your minimal test and when compiling
anything in my fork of phobos):

dmd: glue.c:1215: virtual unsigned int Type::totym(): Assertion `0' failed.
Aborted

Now if only dustmite didn't crush on it... we'd have another case.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Apr 14 2013
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=9540


Kenji Hara <k.hara.pg gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |pull
           Platform|x86                         |All



https://github.com/D-Programming-Language/dmd/pull/1911

The root cause is wrong semantic error gagging for UFCS resolving.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Apr 22 2013
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=9540




Commit pushed to master at https://github.com/D-Programming-Language/dmd

https://github.com/D-Programming-Language/dmd/commit/7c2cea2eee75690a6239b5afb53f76c82fc41ecd
fix Issue 9540 - Compiler crash on delegate context frame assignment

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Apr 22 2013
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=9540


Kenji Hara <k.hara.pg gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |FIXED



Now the reduced code reports following errors.

test.d(26): Error: function test.A.test.AddFront!(this, f).AddFront.dg (int
_param_0) is not callable using argument types ()
test.d(17): Error: template instance test.A.test.AddFront!(this, f) error
instantiating

        auto dg (Args dgArgs) {
            return fun (dgArgs);
        }
        dg.ptr = ctx;   // <-- line 26

dg is not a delegate, it is a nested function. So it does not have `ptr`
property.

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