Function references compiler error: inherited protected method cannot be passed to a function reference in Delphi mode
## Summary When passing an inherited protected method to a function reference in Delphi mode, the compiler wants to execute the method instead to pass it as parameter. In ObjFPC mode it works fine. It works fine also when the inherited method is public. ## System Information <!-- The more information are provided the easier it is to replicate the bug --> - **Operating system:** Windows - **Processor architecture:** x86 - **Compiler version:** trunk - **Device:** Computer ## Steps to reproduce Run the example project below - you get the `TestInheritedFunctionReferencesDelphi.lpr(44,8) Error: Wrong number of parameters specified for call to "MyEvent"` error message ## Example Project ```pascal program TestInheritedFunctionReferencesDelphi; {$IFDEF FPC} {$mode delphi} {$ModeSwitch functionreferences} {$ELSE} {$APPTYPE CONSOLE} {$ENDIF} type TRefProc = reference to procedure(Sender: TObject); procedure Test(P: TRefProc); begin Writeln('test'); end; type TMyObjA = class(TObject) strict protected procedure MyEvent(Sender: TObject); end; TMyObjB = class(TMyObjA) public procedure MyTest; end; { TMyObjA } procedure TMyObjA.MyEvent(Sender: TObject); begin Writeln('hello'); end; { TMyObjB } procedure TMyObjB.MyTest; begin Test(MyEvent); // solved with ObjFpc mode and Test(@MyEvent); using Self.MyEvent or TRefProc(MyEvent) doesn't help end; var O: TMyObjB; begin O := TMyObjB.Create; O.MyTest; end. ``` ## What is the current bug behavior? Compiler error. ## What is the expected (correct) behavior? No compiler error.
issue