[Issue 5026] ICE(expression.c) Incomplete mixin expression + char[] to char assignment

d-bugmail at puremagic.com d-bugmail at puremagic.com
Mon Oct 18 13:28:15 PDT 2010


http://d.puremagic.com/issues/show_bug.cgi?id=5026


Don <clugdbug at yahoo.com.au> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |patch


--- Comment #1 from Don <clugdbug at yahoo.com.au> 2010-10-18 13:27:37 PDT ---
There are two independent issues here.
The superficial diagnostic bug is that mixin() shouldn't accept a void function
at all.
expression.c, line 5569. Actually the second error message here is optional,
since there
should have already been a "cannot be evaluated at compile time" error message.

Expression *CompileExp::semantic(Scope *sc)
{
#if LOGSEMANTIC
    printf("CompileExp::semantic('%s')\n", toChars());
#endif
    UnaExp::semantic(sc);
    e1 = resolveProperties(sc, e1);
+    if (!e1->type->isString()) {
+        error("argument to mixin must be a string, not (%s)\n",
e1->toChars());
+        return new ErrorExp();
+    }
    e1 = e1->optimize(WANTvalue | WANTinterpret);
    if (e1->op != TOKstring)
-    {    error("argument to mixin must be a string, not (%s)\n",
e1->toChars());
+    {   error("argument to mixin must be evaluated at compile time");
        return new ErrorExp();
    }

The more important bug, which causes the ICE, is that declaration.c line 1212
is gagging the results.
Then, interpret.c runs semantic3 on the function while results are gagged.
The errors get suppressed, so garbage gets passed to the back end.

func.c, semantic3(), line 1592.

        sc2->callSuper = 0;
        sc2->pop();
    }
+    if (global.gag && global.errors)
+        semanticRun = PASSsemanticdone; // Ensure errors get reported again
+    else
    semanticRun = PASSsemantic3done;
}

void FuncDeclaration::toCBuffer(OutBuffer *buf, HdrGenState *hgs)

-- 
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