Thread overview
[Issue 8525] New: optimizer loops infinitely
Aug 09, 2012
dawg@dawgfoto.de
Aug 09, 2012
dawg@dawgfoto.de
Aug 09, 2012
dawg@dawgfoto.de
August 09, 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8525

           Summary: optimizer loops infinitely
           Product: D
           Version: D2
          Platform: All
        OS/Version: Other
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody@puremagic.com
        ReportedBy: dawg@dawgfoto.de


--- Comment #0 from dawg@dawgfoto.de 2012-08-08 19:04:00 PDT ---
OpenBSD-only

cat > bug.d << CODE
class Foo
{
    int[] elements;

    final int bar()
    {
        return elements[0];
    }
}
CODE

dmd -c -O bug.d

----

The bug is caused by infinitely performing two associative transformations.

- cgelem.c(4444): Replace (a op1 (b op2 c)) with ((a op2 b) op1 c)
- cgelem.c(4471): Replace ((a op c1) op c2) with (a op (c2 op c1))

It only happens on OpenBSD because folding 'c2 op c1' fails in evalu8 due to a
fenv.h workaround.
The proposed fix is to perform the first transformation only if 'b' is not a
constant.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
August 09, 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8525



--- Comment #1 from dawg@dawgfoto.de 2012-08-08 20:19:56 PDT ---
There is another similar bug.
cat > bug.d << CODE
int get(int[] devt)
{
    return devt[$ - 1];
}
CODE

dmd -c -O bug.d

----

This can be reproduced on non-OpenBSD platforms by deactivating evalu8, i.e. defining 'elem * evalu8(elem *e) { return e; }'. This is effectively what this functions does on OpenBSD.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
August 09, 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8525



--- Comment #2 from dawg@dawgfoto.de 2012-08-08 20:30:50 PDT ---
https://github.com/D-Programming-Language/dmd/pull/1076

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