[Bug 235] ICE with array slice assign on 32 bit

via D.gnu d.gnu at puremagic.com
Sat Oct 22 05:00:14 PDT 2016


http://bugzilla.gdcproject.org/show_bug.cgi?id=235

--- Comment #3 from Iain Buclaw <ibuclaw at gdcproject.org> ---
In compound_expr
---
if (TREE_CODE (arg1) == TARGET_EXPR)
  {
    // If the rhs is a TARGET_EXPR, then build the compound expression
    // inside the target_expr's initializer.  This helps the compiler
    // to eliminate unnecessary temporaries.
    tree init = compound_expr(arg0, TREE_OPERAND (arg1, 1));
    TREE_OPERAND (arg1, 1) = init;

    return arg1;
  }
---

(gdb) call debug_generic_expr (arg1)
TARGET_EXPR <D.3436, func1 () [return slot optimization]>

---

(gdb) call debug_generic_expr (init)
{
  char * D.3438;
  uint D.3437;

  D.3437 = (TARGET_EXPR <D.3436, func1 () [return slot optimization]>).length;
  D.3438 = (TARGET_EXPR <D.3436, func1 () [return slot optimization]>).ptr;
  while (1)
    {
      if (D.3437 == 0) break;
      *D.3438 = 121;
      D.3438++ ;
      D.3437-- ;
    }
}, func1 () [return slot optimization];

---

This is where the recursion comes from.  On x86_64 no TARGET_EXPR is created. 
I'd say the creation of a TARGET_EXPR may be dubious anyway.  Hmm...

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


More information about the D.gnu mailing list