Bug 8283 – ICE(cod1.c): returning struct with constructor as member of another struct
Status
RESOLVED
Resolution
FIXED
Severity
regression
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2012-06-22T08:46:00Z
Last change time
2012-07-21T22:12:01Z
Keywords
ice
Assigned to
nobody
Creator
code
Comments
Comment #0 by code — 2012-06-22T08:46:53Z
The following test case was reduced from code passing a core.time.Duration using std.concurrency:
---
struct Foo {
this(long) {}
}
struct FooContainer {
Foo value;
}
auto get() {
union Buf { FooContainer result; }
Buf buf = {};
return buf.result;
}
void writerThread() {
auto a = get();
}
---
DMD 3bfac139 (on OS X) fails with: Internal error: backend/cod1.c 1677
In the original much larger test case, the error was different, although probably related (I'll re-test it once this version has been addressed):
---
el:0x1008c5d70 cnt=0 cs=0 call 8 TYstruct 0x1008a27d0 0x1008aad70
el:0x1008a27d0 cnt=0 cs=0 var TYD func _D3std7variant17__T8VariantNVm32Z8VariantN37__T3getTS4file20FlushIntervalMessageZ3getMFNdNeZS4file20FlushIntervalMessage
el:0x1008aad70 cnt=0 cs=0 + TY* 0x1008c6a30 0x1008aabf0
el:0x1008c6a30 cnt=1 cs=0 var TY* this
el:0x1008aabf0 cnt=0 cs=0 const TYuns long long 8LL
Internal error: backend/cod1.c 3235
---
Comment #1 by code — 2012-06-30T13:05:46Z
*** Issue 8327 has been marked as a duplicate of this issue. ***
Comment #2 by clugdbug — 2012-07-16T02:00:26Z
Reduced test case. Bug8283 can be either a struct or a union.
---------------------------
struct Ctor8283 {
this(int n) {}
}
struct Bug8283 {
Ctor8283 value;
}
Bug8283 get8283() {
Bug8283 buf;
return buf;
}
void outer8283() {
Bug8283 x = get8283();
}
Comment #3 by github-bugzilla — 2012-07-21T22:06:36Z