www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 4940] New: ICE(symbol.c): Accessing tuple-typed field of struct literal with user-defined constructor

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

           Summary: ICE(symbol.c): Accessing tuple-typed field of struct
                    literal with user-defined constructor
           Product: D
           Version: D2
          Platform: Other
        OS/Version: Windows
            Status: NEW
          Keywords: ice-on-valid-code
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: k.hanazuki gmail.com



PDT ---
DMD v2.049 on Windows crashes with the message:

  Internal error: ..\ztc\symbol.c 1043

This only occurs when accessing a tuple-typed field on a struct literal
directly and using an user-defined constructor.

----

void main() {
  auto w = S(0).x;
}

template Tuple(T...) {
  alias T Tuple;
}

struct S {
  Tuple!(int, int) x;
  this(int) { }
}

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Sep 25 2010
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4940


yebblies <yebblies gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |dsimcha yahoo.com



*** Issue 6530 has been marked as a duplicate of this issue. ***

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Aug 29 2011
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4940


yebblies <yebblies gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |yebblies gmail.com



Test case from 6530:

struct S {
    int a, b, c;
}

struct HasPostblit {
    this(this) {}  // Bug goes away without this.
}

auto toRandomAccessTuple(T...)(T input, HasPostblit hasPostblit) {
    return S(1, 2, 3);
}

void doStuff(T...)(T args) {
    HasPostblit hasPostblit;

    // Bug goes away without the .tupleof.
    auto foo = toRandomAccessTuple(args, hasPostblit).tupleof;
}

void main() {
    doStuff(1, 2, 3);
}

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Aug 29 2011
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4940




In the expression e1.tupleof, if e1 has some side effect, this problem occurs.

The explanation of bug mechanism:

1. e1.tupleof is translated to e1.field0, e1.field1, ..., e1.fieldN
(e1.tupleof.length == N).
But if e1 has some side effect (e.g. e1 is function call), e1 is simply
duplicated.

  funcall().tupleof -> (funcall().field0, funcall, field1, ..., funcall.fieldN)

2. Postblit call on function argument creates hidden temporary variable.

  toRandomAccessTuple(args, hasPostblit)
  ->
  toRandomAccessTuple(args, (auto __cpcttmp = hasPostblit, __cpcttmp))


follows:

  toRandomAccessTuple(args, hasPostblit).tupleof
  ->
  (toRandomAccessTuple(args, (auto __cpcttmp = hasPostblit, __cpcttmp)).a,
   toRandomAccessTuple(args, (auto __cpcttmp = hasPostblit, __cpcttmp)).b,
   toRandomAccessTuple(args, (auto __cpcttmp = hasPostblit, __cpcttmp)).c)

Finally the repetation of __cpcttmp cause ICE in backend.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 06 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4940


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

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |bearophile_hugs eml.cc



*** Issue 6729 has been marked as a duplicate of this issue. ***

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 06 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4940




*** Issue 7233 has been marked as a duplicate of this issue. ***

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 06 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4940


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

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |patch



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

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 06 2012
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4940


Walter Bright <bugzilla digitalmars.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |bugzilla digitalmars.com
         Resolution|                            |FIXED



11:05:29 PST ---
https://github.com/D-Programming-Language/dmd/commit/d6ede2edc28c94b6b3372eb1301cf300b0860eb6

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