digitalmars.D.bugs - [Issue 4828] New: ICE w/ non-boolean dot expression sth.template_instance in static if
- d-bugmail puremagic.com (38/38) Sep 05 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4828
- d-bugmail puremagic.com (20/20) Sep 05 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4828
- d-bugmail puremagic.com (14/14) Sep 06 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4828
- d-bugmail puremagic.com (12/12) Sep 11 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4828
http://d.puremagic.com/issues/show_bug.cgi?id=4828
Summary: ICE w/ non-boolean dot expression
sth.template_instance in static if
Product: D
Version: D2
Platform: All
OS/Version: All
Status: NEW
Keywords: ice-on-invalid-code
Severity: regression
Priority: P2
Component: DMD
AssignedTo: nobody puremagic.com
ReportedBy: rsinfu gmail.com
---
Using an syntax `something.template_instance` in static-if triggers an
assertion at expression.c(817).
--------------------
struct S
{
template P() {}
alias P!() p;
}
static if (S.p) {} // ICE
--------------------
% dmd -o- -c test
Assertion failed: (pr != PREC_zero), function expToCBuffer, file expression.c,
line 817.
--------------------
Assertion failure did not occur before svn r629.
--------------------
% dmd-r628 -o- -c test
test.d(6): Error: expression S dotexp P!() is not constant or does not evaluate
to a bool
--------------------
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Sep 05 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4828
---
Created an attachment (id=748)
Patch against dmd r660, implements DotExp::toCBuffer()
The attached patch implements DotExp::toCBuffer().
The syntax `something.template_instance` yields a DotExp. The repro code in
Then it calls toCBuffer() on the DotExp object, but it's not overridden, so the
base class' BinExp::toCBuffer() is invoked.
It hits the assertion because `precedence[TOKdotexp]` is PREC_zero:
--------------------
void BinExp::toCBuffer(OutBuffer *buf, HdrGenState *hgs)
{
expToCBuffer(buf, hgs, e1, precedence[op]); // op == TOKdotexp
...
--------------------
So, DotExp::toCBuffer() needs to be implemented to handle this case.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Sep 05 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4828
Don <clugdbug yahoo.com.au> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |clugdbug yahoo.com.au
Another regression from the same svn commit, that hits the same assert:
static assert(!is(typeof(Object.tupleof[2000]=0)));
---
precedence not defined for token 'tuple'
assert expression.c(816) precedence[e->op] != PREC_zero
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Sep 06 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4828
Walter Bright <bugzilla digitalmars.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
CC| |bugzilla digitalmars.com
Resolution| |FIXED
13:22:37 PDT ---
http://www.dsource.org/projects/dmd/changeset/669
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Sep 11 2010









d-bugmail puremagic.com 