Thread overview | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
March 19, 2010 [Issue 3984] New: CTFE array assignment for struct members fails | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=3984 Summary: CTFE array assignment for struct members fails Product: D Version: 2.041 Platform: Other OS/Version: All Status: NEW Keywords: ice-on-valid-code, wrong-code Severity: normal Priority: P2 Component: DMD AssignedTo: nobody@puremagic.com ReportedBy: ludwig@informatik.uni-luebeck.de --- Comment #0 from Sönke Ludwig <ludwig@informatik.uni-luebeck.de> 2010-03-18 23:44:20 PDT --- In the following code snipped, for global variables or enums, this.s is not correctly written in the constructor. The direct way to assign a value without the 'dst' temporary does not work due to http://d.puremagic.com/issues/show_bug.cgi?id=3801. --- struct S { float[1] s; this(float x){ float[] dst = this.s; dst[0] = x; } } S S_zero = S(0); // initialization fails enum S S_zero2 = S(0); // initialization fails void main() { //enum S z = S(0); // ICE //static S z = S(0); // ICE //S z = S(0); // works, initialized with 0 //S z = S_zero; // contains NaN S z = S_zero2; // contains NaN assert(z.s[0] == 0); } --- -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
March 24, 2010 [Issue 3984] CTFE array assignment for struct members using a temporary slice fails | ||||
---|---|---|---|---|
| ||||
Posted in reply to Sönke Ludwig | http://d.puremagic.com/issues/show_bug.cgi?id=3984 Don <clugdbug@yahoo.com.au> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |patch CC| |clugdbug@yahoo.com.au --- Comment #1 from Don <clugdbug@yahoo.com.au> 2010-03-24 12:02:25 PDT --- Most of the issues described here are duplicates of bug 1330, or bug 3801. The segfault is the only new bug here. Here's a reduced test case: struct Segfault3984 { int a; this(int x){ a = x; } } void bug3984(){ static assert(Segfault3984(3).a == 3); } Root cause: Struct constructors can result in a situation where a CTFE variable is created outside of a CTFE function. They need a context to put the variable into. Effectively, the comma expression acts a very simple function. PATCH: Interpret.c line 2641 Expression *CommaExp::interpret(InterState *istate) { #if LOG printf("CommaExp::interpret() %s\n", toChars()); #endif // If the comma returns a temporary variable, it needs to be an lvalue // (this is particularly important for struct constructors) if (e1->op == TOKdeclaration && e2->op == TOKvar && ((DeclarationExp *)e1)->declaration == ((VarExp*)e2)->var) { + // If there's no context for the variable to be created in, + // we need to create one now. + InterState istateComma; + if (!istate) + istate = &istateComma; VarExp* ve = (VarExp *)e2; VarDeclaration *v = ve->var->isVarDeclaration(); if (!v->init && !v->value) v->value = v->type->defaultInitLiteral(); -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
March 28, 2010 [Issue 3984] Segfault(interpret.c): CTFE using struct constructor on a local static variable | ||||
---|---|---|---|---|
| ||||
Posted in reply to Sönke Ludwig | http://d.puremagic.com/issues/show_bug.cgi?id=3984 Walter Bright <bugzilla@digitalmars.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |bugzilla@digitalmars.com --- Comment #2 from Walter Bright <bugzilla@digitalmars.com> 2010-03-28 12:40:45 PDT --- changeset 423 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
April 09, 2010 [Issue 3984] Segfault(interpret.c): CTFE using struct constructor on a local static variable | ||||
---|---|---|---|---|
| ||||
Posted in reply to Sönke Ludwig | http://d.puremagic.com/issues/show_bug.cgi?id=3984 Don <clugdbug@yahoo.com.au> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |FIXED --- Comment #3 from Don <clugdbug@yahoo.com.au> 2010-04-09 13:42:41 PDT --- Fixed DMD1.058 and 2.043. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
Copyright © 1999-2021 by the D Language Foundation