Arguments of functions cannot directly capture a local function, they can be captured using temporary variable
## Summary
When calling a function that takes a reference to a procedure as argument, the expression `@SomeLocalfunction` is not recognized as a valid function reference. When using a temporary variable of the same type as the argument, assigning the same expression it works. The temp variable can then be used as an argument in the function.
## System Information
- **Operating system:** N/A
- **Processor architecture:** N/A
- **Compiler version:** 3.3.1
- **Device:** N/A
## Steps to reproduce
Compile the below project. You will get an error
```
tb.pp(28,3) Error: Can't take address of a subroutine marked as local
```
The line marked OK (line 27) compiles fine, the line marked Not OK (line 28) does not compile, when functionally, line 28 is the same as lines 26 and 27.
## Example Project
```delphi
program tb;
{$mode objfpc}
{$modeswitch functionreferences}
type
TNotifyProc = reference to procedure(Sender : TObject);
Procedure DoCall(aProc : TNotifyProc);
begin
aProc(Nil);
end;
Procedure DoTest;
procedure HandleCall(Sender : TObject);
begin
Writeln('Nil passed: ',Sender=Nil);
end;
var
p : TNotifyProc;
begin
P:=@HandleCall;
DoCall(P); // OK
DoCall(@HandleCall); // Not OK
end;
begin
DoTest;
end.
```
## What is the current bug behavior?
Error on line 28 (marked Not OK)
```
tb.pp(28,3) Error: Can't take address of a subroutine marked as local
```
## What is the expected (correct) behavior?
No error.
issue