www.digitalmars.com         C & C++   DMDScript  

D.gnu - [Bug 264] New: [ICE] (update_equiv_regs) ira.c:3425: Assertion

https://bugzilla.gdcproject.org/show_bug.cgi?id=264

            Bug ID: 264
           Summary: [ICE] (update_equiv_regs) ira.c:3425: Assertion failed
                    gcc_assert (REG_P (dest));
           Product: GDC
           Version: development
          Hardware: ARM
                OS: All
            Status: NEW
          Severity: normal
          Priority: Normal
         Component: gdc
          Assignee: ibuclaw gdcproject.org
          Reporter: ibuclaw gdcproject.org

Backtrace on aarch64-linux-gnu gdc cross compiler:
---
during RTL pass: ira
testv.d: In function 'test1':
testv.d:13:1: internal compiler error: in update_equiv_regs, at ira.c:3425
0xa91413 update_equiv_regs
        /buildbot/aarch64-linux-gnu/build/gcc/ira.c:3425
0xa96de0 ira
        /buildbot/aarch64-linux-gnu/build/gcc/ira.c:5226
0xa96de0 execute
        /buildbot/aarch64-linux-gnu/build/gcc/ira.c:5581
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <http://bugzilla.gdcproject.org> for instructions.
---

Few examples, all seem to ICE because of passing static arrays as a dynamic
array parameter, or more specifically, when the original array is in data
segment.

---
bool bt10715(uint[] ary)
{
    return !ary; // uses bt
}

void test10715()
{
    static uint[2] a1;
    if (bt10715(a1))
        assert(0);
}
---
struct Test9386
{
    static char[25] op;
    string sop()
    {
        return cast(string)op;
    }
}
---
void foo34(int[])
{
    static int[5] x;
    foo34(x);
}
---
void foo16(bool[])
{
}

void test16()
{
    static bool[16] b1;
    foo16(b1);
}
---
struct Data15664A
{
    int[][2] b;
}

Data15664A d15664a1 = {};

void test15664()
{
    assert(d15664a1.b == []);
}
---
int sum(...)
{
    int s;
    return s;
}

void test1()
{
    static int[3] a;
    sum(a);
}
---


Dump of one of the tests:
---
Original:

foo34 (struct  _param_0)
{
  foo34 ({.length=5, .ptr=(int *) &x});
}

Gimple:

foo34 (struct  _param_0)
{
  struct  D.2609;

  D.2609.length = 5;
  D.2609.ptr = &x;
  foo34 (D.2609);
}
---

This ICE only happens if compiling without optimizations.

-- 
You are receiving this mail because:
You are watching all bug changes.
Jul 09