ソースを参照

[inliner] don't generate default value for an arg if it's never read (fixes #8791)

Aleksandr Kuzmenko 5 年 前
コミット
03d9542c40
2 ファイル変更14 行追加2 行削除
  1. 2 2
      src/optimization/inline.ml
  2. 12 0
      tests/unit/src/unit/issues/Issue8791.hx

+ 2 - 2
src/optimization/inline.ml

@@ -520,8 +520,8 @@ class inline_state ctx ethis params cf f p = object(self)
 					add (mk (TVar (v,eo)) ctx.t.tvoid e.epos);
 				) vl;
 				List.iter (fun (l,e) -> match l.i_default_value with
-					| None -> ()
-					| Some e -> add (Texpr.set_default ctx.com.basic l.i_subst e e.epos)
+					| Some e when l.i_read > 0 -> add (Texpr.set_default ctx.com.basic l.i_subst e e.epos)
+					| _ -> ()
 				) _inlined_vars;
 				begin match e.eexpr with
 					| TBlock el -> List.iter add el

+ 12 - 0
tests/unit/src/unit/issues/Issue8791.hx

@@ -0,0 +1,12 @@
+package unit.issues;
+
+class Issue8791 extends unit.Test {
+	function test() {
+		var a = write(true);
+		eq('', a);
+	}
+
+	static inline function write(binary = true) {
+		return '';
+	}
+}