ソースを参照

* fix #39736: ensure that the capturer object and any converted function reference interface are considered used
+ added test

Sven/Sarah Barth 3 年 前
コミット
f73fc7d566
2 ファイル変更30 行追加0 行削除
  1. 2 0
      compiler/procdefutil.pas
  2. 28 0
      tests/webtbs/tw39736.pp

+ 2 - 0
compiler/procdefutil.pas

@@ -334,6 +334,7 @@ implementation
 
       symowner.insertsym(sym);
       symowner.insertdef(result);
+      addsymref(sym);
     end;
 
 
@@ -446,6 +447,7 @@ implementation
           typesym.fileinfo:=pd.fileinfo;
           st.insertdef(def);
           st.insertsym(typesym);
+          addsymref(typesym);
 
           if df_generic in pd.defoptions then
             include(def.defoptions,df_generic);

+ 28 - 0
tests/webtbs/tw39736.pp

@@ -0,0 +1,28 @@
+{ %NORUN }
+
+program tw39736;
+
+{$mode objfpc}{$H+}
+{$ModeSwitch functionreferences}
+{$ModeSwitch anonymousfunctions}
+
+{$warn 5028 error}
+
+type
+  TProc = reference to procedure;
+
+var
+  p: TProc;
+procedure Fly(w: word);
+begin
+  p:=procedure
+    begin
+      writeln('TBird.Fly w=',w);
+    end;
+  p();
+end;
+
+begin
+  Fly(3);
+end.
+