mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-25 05:49:11 +02:00
fcl-passrc: useanalyzer: fixed typeinfo(Result)
This commit is contained in:
parent
6164532196
commit
08f44aff2c
@ -1308,6 +1308,8 @@ begin
|
|||||||
if (El is TPasFunctionType) and (TPasFunctionType(El).ResultEl<>nil) then
|
if (El is TPasFunctionType) and (TPasFunctionType(El).ResultEl<>nil) then
|
||||||
UseSubEl(TPasFunctionType(El).ResultEl.ResultType);
|
UseSubEl(TPasFunctionType(El).ResultEl.ResultType);
|
||||||
end
|
end
|
||||||
|
else if C=TPasResultElement then
|
||||||
|
UseSubEl(TPasResultElement(El).ResultType)
|
||||||
else if C=TPasSpecializeType then
|
else if C=TPasSpecializeType then
|
||||||
begin
|
begin
|
||||||
SpecType:=TPasSpecializeType(El);
|
SpecType:=TPasSpecializeType(El);
|
||||||
|
@ -87,6 +87,7 @@ type
|
|||||||
procedure TestM_Class_MethodOverride;
|
procedure TestM_Class_MethodOverride;
|
||||||
procedure TestM_Class_MethodOverride2;
|
procedure TestM_Class_MethodOverride2;
|
||||||
procedure TestM_Class_NestedClass;
|
procedure TestM_Class_NestedClass;
|
||||||
|
procedure TestM_Class_Function;
|
||||||
procedure TestM_ClassInterface_Corba;
|
procedure TestM_ClassInterface_Corba;
|
||||||
procedure TestM_ClassInterface_NoHintsForMethod;
|
procedure TestM_ClassInterface_NoHintsForMethod;
|
||||||
procedure TestM_ClassInterface_NoHintsForImpl;
|
procedure TestM_ClassInterface_NoHintsForImpl;
|
||||||
@ -1360,6 +1361,42 @@ begin
|
|||||||
CheckUseAnalyzerUnexpectedHints;
|
CheckUseAnalyzerUnexpectedHints;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TTestUseAnalyzer.TestM_Class_Function;
|
||||||
|
begin
|
||||||
|
Parser.Options:=Parser.Options+[po_CheckDirectiveRTTI];
|
||||||
|
StartUnit(true,[supTObject]);
|
||||||
|
Add([
|
||||||
|
'{$mode objfpc}',
|
||||||
|
'{$RTTI explicit methods([vcPublic])}',
|
||||||
|
'interface',
|
||||||
|
'type',
|
||||||
|
' TInterfacedObject = class',
|
||||||
|
' end;',
|
||||||
|
' IUnknown = interface',
|
||||||
|
' end;',
|
||||||
|
' ITestInterface = interface',
|
||||||
|
' procedure Test1;',
|
||||||
|
' function Test2: word;',
|
||||||
|
' end;',
|
||||||
|
' TTestInterfaceClass = class(TInterfacedObject, ITestInterface)',
|
||||||
|
' public',
|
||||||
|
' procedure Test1;',
|
||||||
|
' function Test2: word;',
|
||||||
|
' end;',
|
||||||
|
'implementation',
|
||||||
|
'procedure TTestInterfaceClass.Test1;',
|
||||||
|
'begin',
|
||||||
|
'end;',
|
||||||
|
'function TTestInterfaceClass.Test2: word;',
|
||||||
|
'begin',
|
||||||
|
' Result:=0;',
|
||||||
|
' if typeinfo(Result)<>nil then ;',
|
||||||
|
'end;',
|
||||||
|
'']);
|
||||||
|
AnalyzeUnit;
|
||||||
|
CheckUseAnalyzerUnexpectedHints;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TTestUseAnalyzer.TestM_ClassInterface_Corba;
|
procedure TTestUseAnalyzer.TestM_ClassInterface_Corba;
|
||||||
begin
|
begin
|
||||||
StartProgram(false);
|
StartProgram(false);
|
||||||
|
Loading…
Reference in New Issue
Block a user