|
@@ -369,14 +369,14 @@ let rec func ctx bb tf t p =
|
|
bb
|
|
bb
|
|
(* branching *)
|
|
(* branching *)
|
|
| TMeta((Meta.MergeBlock,_,_),{eexpr = TBlock el}) ->
|
|
| TMeta((Meta.MergeBlock,_,_),{eexpr = TBlock el}) ->
|
|
- block_el bb el
|
|
|
|
|
|
+ block_el true bb el
|
|
| TBlock [] when (ExtType.is_void (follow e.etype)) ->
|
|
| TBlock [] when (ExtType.is_void (follow e.etype)) ->
|
|
bb
|
|
bb
|
|
| TBlock el ->
|
|
| TBlock el ->
|
|
let bb_sub = create_node BKSub e.etype e.epos in
|
|
let bb_sub = create_node BKSub e.etype e.epos in
|
|
add_cfg_edge bb bb_sub CFGGoto;
|
|
add_cfg_edge bb bb_sub CFGGoto;
|
|
close_node bb;
|
|
close_node bb;
|
|
- let bb_sub_next = block_el bb_sub el in
|
|
|
|
|
|
+ let bb_sub_next = block_el true bb_sub el in
|
|
if bb_sub_next != g.g_unreachable then begin
|
|
if bb_sub_next != g.g_unreachable then begin
|
|
let bb_next = create_node BKNormal bb.bb_type bb.bb_pos in
|
|
let bb_next = create_node BKNormal bb.bb_type bb.bb_pos in
|
|
set_syntax_edge bb (SESubBlock(bb_sub,bb_next));
|
|
set_syntax_edge bb (SESubBlock(bb_sub,bb_next));
|
|
@@ -619,12 +619,18 @@ let rec func ctx bb tf t p =
|
|
let bb = block_element bb e1 in
|
|
let bb = block_element bb e1 in
|
|
block_element bb e2
|
|
block_element bb e2
|
|
| TArrayDecl el ->
|
|
| TArrayDecl el ->
|
|
- block_el bb el
|
|
|
|
|
|
+ block_el false bb el
|
|
| TObjectDecl fl ->
|
|
| TObjectDecl fl ->
|
|
- block_el bb (List.map snd fl)
|
|
|
|
|
|
+ block_el false bb (List.map snd fl)
|
|
| TFor _ | TWhile(_,_,DoWhile) ->
|
|
| TFor _ | TWhile(_,_,DoWhile) ->
|
|
die "" __LOC__
|
|
die "" __LOC__
|
|
- and block_el bb el =
|
|
|
|
|
|
+ and block_el allow_void bb el =
|
|
|
|
+ let block_element = if allow_void then
|
|
|
|
+ block_element
|
|
|
|
+ else (fun bb e ->
|
|
|
|
+ no_void e.etype e.epos;
|
|
|
|
+ block_element bb e
|
|
|
|
+ ) in
|
|
match !b_try_stack with
|
|
match !b_try_stack with
|
|
| [] ->
|
|
| [] ->
|
|
let rec loop bb el = match el with
|
|
let rec loop bb el = match el with
|
|
@@ -656,7 +662,7 @@ let rec func ctx bb tf t p =
|
|
| TBlock el -> el
|
|
| TBlock el -> el
|
|
| _ -> [e]
|
|
| _ -> [e]
|
|
in
|
|
in
|
|
- block_el bb el
|
|
|
|
|
|
+ block_el true bb el
|
|
in
|
|
in
|
|
let bb_last = block bb_root tf.tf_expr in
|
|
let bb_last = block bb_root tf.tf_expr in
|
|
close_node bb_last;
|
|
close_node bb_last;
|