Browse Source

[analyzer] error properly on scope-less block

Simon Krajewski 9 years ago
parent
commit
f18e793f6c
1 changed files with 14 additions and 2 deletions
  1. 14 2
      analyzer.ml

+ 14 - 2
analyzer.ml

@@ -738,6 +738,17 @@ module BasicBlock = struct
 		mutable bb_var_writes : tvar list;    (* List of assigned variables *)
 	}
 
+	let s_block_kind = function
+		| BKRoot -> "BKRoot"
+		| BKNormal -> "BKNormal"
+		| BKFunctionBegin -> "BKFunctionBegin"
+		| BKFunctionEnd -> "BKFunctionEnd"
+		| BKSub -> "BKSub"
+		| BKConditional -> "BKConditional"
+		| BKLoopHead -> "BKLoopHead"
+		| BKException -> "BKException"
+		| BKUnreachable -> "BKUnreachable"
+
 	let has_flag edge flag =
 		List.mem flag edge.cfg_flags
 
@@ -762,8 +773,9 @@ module BasicBlock = struct
 		} in
 		bb
 
-	let in_scope bb bb' =
-		List.mem (List.hd bb'.bb_scopes) bb.bb_scopes
+	let in_scope bb bb' = match bb'.bb_scopes with
+		| [] -> error (Printf.sprintf "Scope-less block (kind: %s)" (s_block_kind bb.bb_kind)) bb.bb_pos
+		| scope :: _ -> List.mem scope bb.bb_scopes
 end
 
 (*