8283 – ICE(cod1.c): returning struct with constructor as member of another struct

D issues are now tracked on GitHub. This Bugzilla instance remains as a read-only archive.
Issue 8283 - ICE(cod1.c): returning struct with constructor as member of another struct
Summary: ICE(cod1.c): returning struct with constructor as member of another struct
Status: RESOLVED FIXED
Alias: None
Product: D
Classification: Unclassified
Component: dmd (show other issues)
Version: D2
Hardware: All All
: P2 regression
Assignee: No Owner
URL:
Keywords: ice
: 8327 (view as issue list)
Depends on:
Blocks:
Reported: 2012年06月22日 08:46 UTC by David Nadlinger
Modified: 2012年07月21日 22:12 UTC (History)
3 users (show)

See Also:


Attachments
Add an attachment (proposed patch, testcase, etc.)

Note You need to log in before you can comment on or make changes to this issue.
Description David Nadlinger 2012年06月22日 08:46:53 UTC
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 David Nadlinger 2012年06月30日 13:05:46 UTC
*** Issue 8327 has been marked as a duplicate of this issue. ***
Comment 2 Don 2012年07月16日 02:00:26 UTC
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 github-bugzilla 2012年07月21日 22:06:36 UTC
Commit pushed to master at https://github.com/D-Programming-Language/dmd
https://github.com/D-Programming-Language/dmd/commit/20083aa60aa612d89045eaad7cd8bdeb56b75bba
fix Issue 8283 - ICE(cod1.c): returning struct with constructor as member of another struct
Comment 5 github-bugzilla 2012年07月21日 22:12:01 UTC
Commit pushed to dmd-1.x at https://github.com/D-Programming-Language/dmd
https://github.com/D-Programming-Language/dmd/commit/68fa19e2cae1ae8c6799fb58e45b43e096f73ede
fix Issue 8283 - ICE(cod1.c): returning struct with constructor as member of another struct


AltStyle によって変換されたページ (->オリジナル) /