Skip to content


[Repost] Issue 8220 - invalid function call not detected during semantic analysis #1007

merged 1 commit into from

4 participants

D Programming Language member

This pull is identical to #1000. @WalterBright reverted #1000, because of the breaking of test case that he has, but I think it is genuinely invalid code (my comment).

D Programming Language member

I agree with you. I have written code like Walter's example in the past, and I later rewrote it because I decided it was wrong. int + int isn't valid, and typeof(int + int) shouldn't be, either. It's easy enough to add .init to every type to turn those into valid expressions. It's not like it's a silent breakage.

But only Walter can merge this.


LGTM. @WalterBright please merge this before any more people start assuming that Type+Type is meaningful (6 months and counting!). AFAIK the specs never mention this as valid code, but you've said you told some people it does work. Couldn't you tell them about .init?

@WalterBright WalterBright merged commit 3644943 into D-Programming-Language:master

1 check was pending

Details default Pass: 8, Pending: 2
D Programming Language member

This pull introduced a regression:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Jul 23, 2012
  1. @9rnsr
Showing with 9 additions and 0 deletions.
  1. +3 −0 src/expression.c
  2. +6 −0 test/runnable/xtest46.d
3 src/expression.c
@@ -723,6 +723,9 @@ void preFunctionParameters(Loc loc, Scope *sc, Expressions *exps)
(*exps)[i] = arg;
+ if (arg->op == TOKtype)
+ arg->error("%s is not an expression", arg->toChars());
#if 0
if (arg->type->ty == Tfunction)
6 test/runnable/xtest46.d
@@ -5137,6 +5137,12 @@ void test8064()
+// 8220
+void foo8220(int){}
+static assert(!__traits(compiles, foo8220(typeof(0)))); // fail
void func8105(in ref int x) { }
Something went wrong with that request. Please try again.