digitalmars.D.bugs - [Issue 3488] New: Segfault(expression.c): enum declared with struct initializer in template
- d-bugmail puremagic.com (28/28) Nov 08 2009 http://d.puremagic.com/issues/show_bug.cgi?id=3488
- d-bugmail puremagic.com (34/34) Nov 08 2009 http://d.puremagic.com/issues/show_bug.cgi?id=3488
- d-bugmail puremagic.com (20/20) Nov 08 2009 http://d.puremagic.com/issues/show_bug.cgi?id=3488
- d-bugmail puremagic.com (14/14) Nov 09 2009 http://d.puremagic.com/issues/show_bug.cgi?id=3488
- d-bugmail puremagic.com (20/20) Nov 23 2009 http://d.puremagic.com/issues/show_bug.cgi?id=3488
- d-bugmail puremagic.com (10/10) Jan 23 2010 http://d.puremagic.com/issues/show_bug.cgi?id=3488
- d-bugmail puremagic.com (11/11) Jan 30 2010 http://d.puremagic.com/issues/show_bug.cgi?id=3488
http://d.puremagic.com/issues/show_bug.cgi?id=3488
Summary: Segfault(expression.c): enum declared with struct
initializer in template
Product: D
Version: 2.036
Platform: Other
OS/Version: Windows
Status: NEW
Keywords: ice-on-valid-code
Severity: normal
Priority: P2
Component: DMD
AssignedTo: nobody puremagic.com
ReportedBy: clugdbug yahoo.com.au
Reported by g in d.learn.
Segfaults in expression.c. D2 only.
--
struct Move{
int Dx;
}
template genMove(){
enum Move genMove = { Dx:4 };
}
enum Move b = genMove!();
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Nov 08 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3488
g <sockpuppet3 hotmail.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |sockpuppet3 hotmail.com
also to note that this also don't works:
--
struct A{
int n;
}
template genA(){
enum A genA = { n:4 };
}
immutable A b = genA!();
--
but this works:
--
struct A{
int n;
}
template genA(){
//works with immutable
immutable A genA = { n:4 };
}
immutable A b = genA!();
void main(){
//ok
assert(b.n == 4);
}
--
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Nov 08 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3488
Don <clugdbug yahoo.com.au> changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|Segfault(expression.c): |Segfault(expression.c):
|enum declared with struct |enum declared with struct
|initializer in template |static initializer
Further reduced test case shows it doesn't need a template. It's just an enum
static initializer problem.
---
struct Move{
int Dx;
}
enum Move genMove = { Dx:4 };
immutable Move b = genMove;
---
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Nov 08 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3488
It's happening because static struct initializers with names are not evaluated
at compile time. And this is because init.c, StructInitializer::toExpression()
doesn't deal with it. BTW -- now that we have struct literals, I'm not sure
that we need struct initializers any more. They're a bit annoying,
implementation-wise.
--- TEST CASE ---
struct Move{ int Dx; }
immutable Move genMove = { Dx:4};
static assert(genMove.Dx == 4); // not evaluatable at compile time.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Nov 09 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3488
PATCH: With the demise of struct initializers, it's not worth fixing properly.
But DsymbolExp::semantic() should check for a null value anyway (it checks in
other places in expression.c). This would prevent the segfault.
expression.c line 2306 (svn 267):
if ((v->storage_class & STCmanifest) && v->init)
{
e = v->init->toExpression();
+ if (!e)
+ { error("cannot make expression out of initializer for %s",
v->toChars());
+ e = new ErrorExp();
+ }
e->semantic(sc);
return e;
}
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Nov 23 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3488
Walter Bright <bugzilla digitalmars.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |bugzilla digitalmars.com
01:19:02 PST ---
Changeset 349
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 23 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3488
Walter Bright <bugzilla digitalmars.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution| |FIXED
22:44:36 PST ---
fixed dmd 2.040
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 30 2010









d-bugmail puremagic.com 