@@ -1,4 +1,4 @@
-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();
new file mode 100644
@@ -0,0 +1,16 @@
+// 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
+}