Ver Fonte

[analyzer] don't make blocks for empty void blocks

Simon Krajewski há 4 anos atrás
pai
commit
2f863d726b

+ 2 - 0
src/optimization/analyzer.ml

@@ -744,6 +744,8 @@ module Debug = struct
 			| BKFunctionBegin _ -> "<function-begin>\n"
 			| BKFunctionEnd -> "<function-end>\n"
 			| BKLoopHead -> "<loop-head>\n"
+			| BKCatch v -> Printf.sprintf "<catch %s<%i>>" v.v_name v.v_id
+			| BKException -> "<exc>"
 			| _ -> ""
 		in
 		Printf.fprintf ch "n%i [shape=box,label=\"%s%s\"];\n" bb.bb_id s_kind (s_escape s)

+ 2 - 0
src/optimization/analyzerTexprTransformer.ml

@@ -364,6 +364,8 @@ let rec func ctx bb tf t p =
 		(* branching *)
 		| TMeta((Meta.MergeBlock,_,_),{eexpr = TBlock el}) ->
 			block_el bb el
+		| TBlock [] when (ExtType.is_void (follow e.etype)) ->
+			bb
 		| TBlock el ->
 			let bb_sub = create_node BKSub e.etype e.epos in
 			add_cfg_edge bb bb_sub CFGGoto;