[Issue 3160] ICE(cgcod.c 1511-D1) or bad code-D2 returning string from void main
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Tue Sep 15 11:31:31 PDT 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3160
Don <clugdbug at yahoo.com.au> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords|ice-on-invalid-code |ice-on-valid-code
Summary|ICE(cgcod.c 1511) returning |ICE(cgcod.c 1511-D1) or bad
|string from void main, D1 |code-D2 returning string
|only |from void main
Severity|regression |critical
--- Comment #3 from Don <clugdbug at yahoo.com.au> 2009-09-15 11:31:30 PDT ---
In D2, rather than an ICE, it generates wrong code. Can't really claim
ICE<->wrong-code is a regression.
Technically, this is valid, but I'm actually not sure if this type of code
should be allowed. Should it check for side-effects? IE, void main() { return
2; } --> should this generate a "expression (2) has no effect" error? Seems
like a newbie trap.
Here's a more formal patch against DMD2.032:
Index: statement.c
===================================================================
--- statement.c (revision 54)
+++ statement.c (revision 55)
@@ -3454,7 +3454,7 @@
return gs;
}
- if (exp && tbret->ty == Tvoid && !fd->isMain())
+ if (exp && tbret->ty == Tvoid && !implicit0)
{
/* Replace:
* return exp;
@@ -3463,7 +3463,10 @@
*/
Statement *s = new ExpStatement(loc, exp);
loc = 0;
- exp = NULL;
+ if (fd->isMain())
+ exp = new IntegerExp(0);
+ else
+ exp = NULL;
return new CompoundStatement(loc, s, this);
}
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list