Commit 1c63105c by Iain Buclaw

re PR d/88958 (ICE in walk_aliased_vdefs_1, at tree-ssa-alias.c:2887)

    PR d/88958
d/dmd: Merge upstream dmd 0fc786f49

Backport fix to disallow passing functions as parameters.

Fixes https://gcc.gnu.org/PR88958

Reviewed-on: https://github.com/dlang/dmd/pull/9437

From-SVN: r269557
parent b496651b
d517c0e6a10b548f44d82b71b3c079663cb94f8e
0fc786f4908aa6bdd4220af87995333b1f24c3d7
The first line of this file holds the git revision number of the last
merge done from the dlang/dmd repository.
......@@ -102,6 +102,12 @@ static bool preFunctionParameters(Scope *sc, Expressions *exps)
arg = new ErrorExp();
err = true;
}
else if (arg->type->toBasetype()->ty == Tfunction)
{
arg->error("cannot pass type %s as a function argument", arg->toChars());
arg = new ErrorExp();
err = true;
}
else if (checkNonAssignmentArrayOp(arg))
{
arg = new ErrorExp();
......
// https://issues.dlang.org/show_bug.cgi?id=19608
/*
TEST_OUTPUT:
---
fail_compilation/test19608.d(15): Error: cannot pass function `*& f` as a function argument
---
*/
import core.stdc.stdarg;
void f(int) {}
void g(...) {}
void h()
{
g(&f); // OK, function address
g(*&f); // ICE -> Error
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment