On 5/24/22 11:14 PM, frame wrote:
On Wednesday, 25 May 2022 at 02:42:26 UTC, Steven Schveighoffer wrote:

try:

pragma(msg, typeof(fun));

Outputs:
```
extern (C) void function(...)
```

OK, so it's a function pointer.


But the compiler would complain if I call it as a type? And how could it call it later without an address to it - this works.

You don't need an address to call it. The compiler shouldn't complain at all, nor should it decide to think you are calling it without parentheses.


D should never call a function pointer without parentheses.

I'm very good in finding weird bugs ;-) Unfortunately, I cannot make an example. I already tried some changes/simplifications but cannot reproduce it outside the project.

I have encountered bugs like this (which disappear with seemingly unrelated removals). They are hard to deal with.

Have you tried [dustmite](https://code.dlang.org/packages/dustmite)? It can reduce D code down automatically to a smaller example, but be warned that if you get the condition wrong, and your code base is huge, it can take hours/days to whittle down to something that isn't what you want.

You can file a bug without a full example, just note that you have verified via the pragma(msg) statement above that the symbol is indeed a function pointer, and that compiler is trying to call it without explicit parentheses.

However, without a complete example, it's going to be hard to find/fix.

But how can I help the compiler to use it as correct type? On invocation with arguments all works fine, but checking if the pointer is not null fails. It not even works with an assignment. Could some `static if()` maybe help or some asm trick?

This is a compiler bug, at least I think so. Since the compiler is misbehaving, it's not clear how to make it behave.

-Steve

Reply via email to