You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Reproduce issue with:
```void func()(){ pragma(msg, typeof(&func!()).stringof);}void main() @nogc{ auto funcPtr = &func!(); funcPtr();}```
This fails with:
Error: `@nogc` function `D main` cannot call non-@nogc function pointer `funcPtr`
Normally `func` would be @nogc here, but when DMD is forced to resolve typeof(&func!()) while analyzing func, it causes an issue template inference.
Note that this issue occurs for all function attributes such as `pure` and `nothrow`.
Note that any of the following modifications will fix the issue:
1. remove the pragma, if dmd doesn't have to resolve typeof(&func) inside of func then attribute inference still works correctly
2. don't use auto for funcPtr, i.e.
void main() @nogc
{
void function() @nogc funcPtr = &func!();
funcPtr();
}
3. call the function pointer without assigning it to a variable:
void main() @nogc
{
(&func!())();
}
3. call func directly instead of through a function pointer:
void main() @nogc
{
func!()();
}
The text was updated successfully, but these errors were encountered:
Jonathan Marler (@marler8997) reported this on 2019-06-02T05:31:50Z
Transferred from https://issues.dlang.org/show_bug.cgi?id=19934
Description
The text was updated successfully, but these errors were encountered: