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 The first line of this file holds the git revision number of the last
merge done from the dlang/dmd repository. merge done from the dlang/dmd repository.
...@@ -102,6 +102,12 @@ static bool preFunctionParameters(Scope *sc, Expressions *exps) ...@@ -102,6 +102,12 @@ static bool preFunctionParameters(Scope *sc, Expressions *exps)
arg = new ErrorExp(); arg = new ErrorExp();
err = true; 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)) else if (checkNonAssignmentArrayOp(arg))
{ {
arg = new ErrorExp(); 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