diff --git a/packages/fcl-passrc/src/pasresolver.pp b/packages/fcl-passrc/src/pasresolver.pp index 12a499fae8..6c3630d099 100644 --- a/packages/fcl-passrc/src/pasresolver.pp +++ b/packages/fcl-passrc/src/pasresolver.pp @@ -4800,7 +4800,8 @@ begin begin // Delphi/FPC do not give a message when hiding a non virtual method // -> emit Hint with other message id - if (Data^.Proc.Parent is TPasMembersType) then + if (Data^.Proc.Parent is TPasMembersType) + and (Proc.Visibility<>visStrictPrivate) then begin ProcScope:=Proc.CustomData as TPasProcedureScope; if (ProcScope.ImplProc<>nil) // not abstract, external @@ -4811,6 +4812,9 @@ begin else if (Proc is TPasConstructor) and (Data^.Proc.ClassType=Proc.ClassType) then // do not give a hint for hiding a constructor + else if (Proc.Visibility=visPrivate) + and (Proc.GetModule<>Data^.Proc.GetModule) then + // a private private is hidden by definition -> no hint else LogMsg(20171118214523,mtHint, nFunctionHidesIdentifier_NonVirtualMethod,sFunctionHidesIdentifier, diff --git a/packages/fcl-passrc/tests/tcresolver.pas b/packages/fcl-passrc/tests/tcresolver.pas index 069f60b36b..3485f17345 100644 --- a/packages/fcl-passrc/tests/tcresolver.pas +++ b/packages/fcl-passrc/tests/tcresolver.pas @@ -557,6 +557,7 @@ type Procedure TestClass_MethodOverloadUnit; Procedure TestClass_HintMethodHidesNonVirtualMethod; Procedure TestClass_HintMethodHidesNonVirtualMethodWithoutBody_NoHint; + Procedure TestClass_NoHintMethodHidesPrivateMethod; Procedure TestClass_MethodReintroduce; Procedure TestClass_MethodOverloadArrayOfTClass; Procedure TestClass_ConstructorHidesAncestorWarning; @@ -9507,6 +9508,30 @@ begin CheckResolverUnexpectedHints(true); end; +procedure TTestResolver.TestClass_NoHintMethodHidesPrivateMethod; +begin + StartProgram(false); + Add([ + 'type', + ' TObject = class', + ' strict private', + ' procedure DoIt(p: pointer);', + ' end;', + ' TBird = class', + ' procedure DoIt(i: longint);', + ' end;', + 'procedure TObject.DoIt(p: pointer);', + 'begin', + ' if p=nil then ;', + 'end;', + 'procedure TBird.DoIt(i: longint); begin end;', + 'var b: TBird;', + 'begin', + ' b.DoIt(3);']); + ParseProgram; + CheckResolverUnexpectedHints; +end; + procedure TTestResolver.TestClass_MethodReintroduce; begin StartProgram(false); diff --git a/packages/pastojs/tests/tcmodules.pas b/packages/pastojs/tests/tcmodules.pas index 4d5b6fb580..6a6391866c 100644 --- a/packages/pastojs/tests/tcmodules.pas +++ b/packages/pastojs/tests/tcmodules.pas @@ -3700,6 +3700,7 @@ procedure TTestModule.TestProc_Asm; begin StartProgram(false); Add([ + '{$mode delphi}', 'function DoIt: longint;', 'begin;', ' asm', @@ -3715,6 +3716,10 @@ begin ' s = "end";', ' end;', 'end;', + 'procedure Fly;', + 'asm', + ' return;', + 'end;', 'begin']); ConvertProgram; CheckSource('TestProc_Asm',