[Issue 6784] Compile-time constant assigned with a runtime value
https://issues.dlang.org/show_bug.cgi?id=6784 --- Comment #6 from hst...@quickfur.ath.cx --- No idea, should the bug be reopened for D1-only? --
[Issue 6784] Compile-time constant assigned with a runtime value
https://issues.dlang.org/show_bug.cgi?id=6784 --- Comment #5 from yebblies --- Does it still exist in D1? --
[Issue 6784] Compile-time constant assigned with a runtime value
https://issues.dlang.org/show_bug.cgi?id=6784 hst...@quickfur.ath.cx changed: What|Removed |Added Status|NEW |RESOLVED CC||hst...@quickfur.ath.cx Resolution|--- |WORKSFORME --- Comment #4 from hst...@quickfur.ath.cx --- Tested on git HEAD, now the compiler correctly issues an error: -- test.d(4): Error: value of 'this' is not known at compile time -- The test code was modified to use size_t instead of uint, since on 64-bit platforms args.length is ulong, and the compiler will complain that you can't assign ulong to uint. But that's irrelevant to this bug. --
[Issue 6784] Compile-time constant assigned with a runtime value
http://d.puremagic.com/issues/show_bug.cgi?id=6784 --- Comment #3 from Don 2012-02-22 11:59:55 PST --- FWIW, this patch in optimize.c, DotVarExp::optimize() fixes the bug. But, the exclusion of TOKassocarrayliteral is just a hack. if (e && e->op == TOKstructliteral) { StructLiteralExp *sle = (StructLiteralExp *)e; VarDeclaration *vf = var->isVarDeclaration(); if (vf) { Expression *e = sle->getField(type, vf->offset); if (e && e != EXP_CANT_INTERPRET) return e; } } + else if (result & WANTinterpret && (!e || e->op != TOKassocarrayliteral)) +error("%s cannot be evaluated at compile time", e1->toChars()); return this; } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 6784] Compile-time constant assigned with a runtime value
http://d.puremagic.com/issues/show_bug.cgi?id=6784 --- Comment #2 from Don 2012-02-22 01:14:30 PST --- The error message should only happen when result & WANTinterpret. But, the problem is, as usual, those %&/$# AAs. The builtin AA properties aren't converted into function calls. Rather than add another hack for this, it's probably better to wait for bug 5590 to be pulled in. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 6784] Compile-time constant assigned with a runtime value
http://d.puremagic.com/issues/show_bug.cgi?id=6784 yebblies changed: What|Removed |Added CC||yebbl...@gmail.com Platform|x86 |All Version|D2 |D1 & D2 AssignedTo|nob...@puremagic.com|clugd...@yahoo.com.au OS/Version|Windows |All --- Comment #1 from yebblies 2012-02-01 13:09:43 EST --- Related to Issue 2414. What differs here is that enum uint y = x Is translated to enum uint y = this.x And DotIdExp::optimize does not turn this into a constant value, and there is no error when it fails when called with result & WANTinterpret. Unfortunately adding an error causes problems with other code, presumably because DotIdExp::optimize is use from other places like CallExp::optimize that expect it to just try and finish without errors. Reassigning to Don as he fixed 2414 and understands the constfolding/interpreter code a lot better than I do. Probably applies to D1/const variables too. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---