Jump to page: 1 2
Thread overview
[Issue 16107] [ICE] - Internal error: backend/cgcod.c 2297
Jun 01, 2016
b2.temp@gmx.com
Jun 01, 2016
ag0aep6g@gmail.com
Jun 01, 2016
b2.temp@gmx.com
Jul 18, 2016
b2.temp@gmx.com
Mar 23, 2018
Mike Franklin
Mar 23, 2018
Mike Franklin
Mar 23, 2018
Mike Franklin
Mar 23, 2018
Walter Bright
Mar 24, 2018
ag0aep6g
Mar 25, 2018
Basile B.
Mar 25, 2018
Seb
Mar 25, 2018
Walter Bright
Mar 25, 2018
Walter Bright
June 01, 2016
https://issues.dlang.org/show_bug.cgi?id=16107

--- Comment #1 from b2.temp@gmx.com ---
definition of Foo can be reduced to

class Foo
{
    alias TreeItemType = typeof(this);

    TreeItemSiblings!TreeItemType _siblings;    // remove this decl
    TreeItemChildren!TreeItemType _children;    // or this one      : OK
}
June 01, 2016
https://issues.dlang.org/show_bug.cgi?id=16107

ag0aep6g@gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |ice
                 CC|                            |ag0aep6g@gmail.com

--- Comment #2 from ag0aep6g@gmail.com ---
Reduced further:

----
bool check()
{
    bool result = false;

    result |= false;   // result = result | ... : OK
    if (result) goto ret;     // remove this line       : OK

    result |= false;   // result = result | ... : OK
    if (result) {}     // remove this line       : OK

    ret: return true;
}

enum e = check();
----

--
June 01, 2016
https://issues.dlang.org/show_bug.cgi?id=16107

--- Comment #3 from b2.temp@gmx.com ---
(In reply to ag0aep6g from comment #2)
> Reduced further:
> 
> ----
> bool check()
> {
>     bool result = false;
> 
>     result |= false;   // result = result | ... : OK
>     if (result) goto ret;     // remove this line       : OK
> 
>     result |= false;   // result = result | ... : OK
>     if (result) {}     // remove this line       : OK
> 
>     ret: return true;
> }
> 
> enum e = check();
> ----

OMG, Can someone fix this fast PLZ ? I don't know if you'll agree but this is not some "super sharp" code, just a bunch of OrEqual !

--
July 18, 2016
https://issues.dlang.org/show_bug.cgi?id=16107

--- Comment #4 from b2.temp@gmx.com ---
ping. do you realize that by nature this bug is very disruptive ? It kills the boolean logic.

--
September 02, 2016
https://issues.dlang.org/show_bug.cgi?id=16107

hsteoh@quickfur.ath.cx changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |hsteoh@quickfur.ath.cx

--
September 02, 2016
https://issues.dlang.org/show_bug.cgi?id=16107

--- Comment #5 from hsteoh@quickfur.ath.cx ---
I managed to trace the error to freenode() in backend/cgcod.c, for some reason it gets called with an elem with e->Ecomsub==0, so when it tries to decrement it, e->Ecomsub rolls over to 255, which eventually triggers this assert.

However, I couldn't figure out enough of the backend code to actually fix this. I tried changing the if-statement in freenode() to `if (e->Ecomsub==0 || e->Ecomsub--) return;`, and it works for this particular test case, but then it fails to compile the d_do_test tool, so obviously this is the wrong fix. So this will probably need Walter to look at it. :-P

--
September 02, 2016
https://issues.dlang.org/show_bug.cgi?id=16107

hsteoh@quickfur.ath.cx changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |bugzilla@digitalmars.com

--
September 02, 2016
https://issues.dlang.org/show_bug.cgi?id=16107

--- Comment #6 from hsteoh@quickfur.ath.cx ---
P.S. The faulty call to freenode() comes from codelem() in cgcod.c.

--
March 23, 2018
https://issues.dlang.org/show_bug.cgi?id=16107

Mike Franklin <slavo5150@yahoo.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |slavo5150@yahoo.com

--- Comment #7 from Mike Franklin <slavo5150@yahoo.com> ---
> bool check()
> {
>    bool result = false;
> 
>    result |= false;   // result = result | ... : OK
>    if (result) goto ret;     // remove this line       : OK
> 
>    result |= false;   // result = result | ... : OK
>    if (result) {}     // remove this line       : OK
> 
>    ret: return true;
> }
> 
> enum e = check();

According to https://run.dlang.io/is/98Uf5T, this has been working since 2.067.1.

--
March 23, 2018
https://issues.dlang.org/show_bug.cgi?id=16107

--- Comment #8 from Mike Franklin <slavo5150@yahoo.com> ---
> import std.stdio, std.traits;
> 
> struct TreeItemChildren(T){}
> 
> struct TreeItemSiblings(T){}
> 
> class Foo
> {
>     alias TreeItemType = typeof(this);
> 
>     TreeItemSiblings!TreeItemType _siblings;    // remove this decl
>     TreeItemChildren!TreeItemType _children;    // or this one      : OK
> }
> 
> template Bug(T)
> {
>     bool check()
>     {
>         bool result;
>         import std.meta: aliasSeqOf;
>         import std.range: iota;
> 
>         foreach(i;  aliasSeqOf!(iota(0, T.tupleof.length)))
>         {
>             alias MT = typeof(T.tupleof[i]);
>             static if (is(MT == struct))
>                 result |= Bug!MT;   // result = result | ... : OK
>             if (result) break;     // remove this line       : OK
> 
>         }
>         return result;
>     }
>     enum Bug = check();
> }
> 
> void main()
> {
>     assert(!Bug!Foo);
> }

According to https://run.dlang.io/is/kosY23, this has been fixed since 2.070.2

--
« First   ‹ Prev
1 2