diff --git a/bench-moerman2018/infer.mk b/bench-moerman2018/infer.mk
new file mode 100644
index 0000000000000000000000000000000000000000..8f82f54340dbe66ada28b77ffc167805d4dc0ed2
--- /dev/null
+++ b/bench-moerman2018/infer.mk
@@ -0,0 +1,46 @@
+INFER = infer run
+
+CPPFLAGS    += \
+  -Icommon \
+
+# excludes files with recursive functions
+filter-out-substring = $(foreach v,$(2),$(if $(findstring $(1),$(v)),,$(v)))
+SRCS:=$(sort $(call filter-out-substring,leak,$(call filter-out-substring,recursion,$(wildcard base/*.c */*/*.c))))
+
+GOOD_TARGETS:=$(foreach s,$(SRCS),$(subst /,_,$(s:%.c=%))_good.infer)
+BAD_TARGETS:=$(foreach s,$(SRCS),$(subst /,_,$(s:%.c=%))_bad.infer)
+TARGETS:=$(GOOD_TARGETS) $(BAD_TARGETS)
+
+define generate-infer-rules =
+  $(subst /,_,$(1:%.c=%))_good.infer: $(if $(findstring cross_file,$(1)),common/common.c,) $(1)
+	$(INFER) -o $$@ -- clang -DNO_BUG $(CPPFLAGS) $$^
+
+  $(subst /,_,$(1:%.c=%))_bad.infer: $(if $(findstring cross_file,$(1)),common/common.c,) $(1)
+	$(INFER) -o $$@ -- clang $(CPPFLAGS) $$^
+
+  $(subst /,_,$(1:%.c=%))_good.infer/eval.txt: $(subst /,_,$(1:%.c=%))_good.infer infer_evaluate_case.sh
+	./infer_evaluate_case.sh good $$</bugs.txt > $$</eval.txt
+
+  $(subst /,_,$(1:%.c=%))_bad.infer/eval.txt: $(subst /,_,$(1:%.c=%))_bad.infer infer_evaluate_case.sh
+	./infer_evaluate_case.sh bad $$</bugs.txt > $$</eval.txt
+endef
+
+$(foreach s,$(SRCS),$(eval $(call generate-infer-rules,$(s))))
+
+infer_eval_sumup.txt: $(addsuffix /eval.txt, $(TARGETS))
+	cat $^ > infer_eval_sumup.txt
+
+evaluate: infer_eval_sumup.txt
+.PHONY: infer_eval_sumup.txt
+
+good: $(GOOD_TARGETS)
+
+bad: $(BAD_TARGETS)
+
+all: good bad
+
+clean:
+	@rm -rf *_good.infer
+	@rm -rf *_bad.infer
+	@rm -rf a.out
+	@rm -rf infer-out
diff --git a/bench-moerman2018/infer_eval_sumup.txt b/bench-moerman2018/infer_eval_sumup.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f7e85daca00c2e2d5b2922bc934bf5339abc042e
--- /dev/null
+++ b/bench-moerman2018/infer_eval_sumup.txt
@@ -0,0 +1,400 @@
+base_files_access_closed_good.infer/report.json (good): ok
+base_files_double_close_good.infer/report.json (good): ok
+base_general_divide_by_0_good.infer/report.json (good): ok
+base_general_nullpointer_good.infer/report.json (good): ok
+base_general_uninitialized_pointer_good.infer/report.json (good): ok
+base_general_uninitialized_value_good.infer/report.json (good): ok
+base_integers_overflow_good.infer/report.json (good): ok
+base_memory_double_free_good.infer/report.json (good): ok
+base_memory_read_uninitialized_malloced_mem_good.infer/report.json (good): ok
+base_memory_refer_freed_good.infer/report.json (good): ok
+base_memory_zero_alloc_good.infer/report.json (good): ok
+base_strings_overflow_good.infer/report.json (good): ok
+base_strings_unbounded_copy_good.infer/report.json (good): ok
+file_operations_access_closed_01_simple_if_good.infer/report.json (good): ok
+file_operations_access_closed_02_simple_if_int1_good.infer/report.json (good): ok
+file_operations_access_closed_02_simple_if_int2_good.infer/report.json (good): ok
+file_operations_access_closed_03_simple_if_multi_func_good.infer/report.json (good): ok
+file_operations_access_closed_04_simple_switch_good.infer/report.json (good): ok
+file_operations_access_closed_05_simple_goto_good.infer/report.json (good): ok
+file_operations_access_closed_06_simple_pass_by_reference_good.infer/report.json (good): ok
+file_operations_access_closed_07_cross_file_good.infer/report.json (good): ok
+file_operations_access_closed_08_loop_for_good.infer/report.json (good): ok
+file_operations_access_closed_09_loop_for_complex_good.infer/report.json (good): ok
+file_operations_access_closed_10_loop_while_continue_good.infer/report.json (good): ok
+file_operations_access_closed_11_loop_while_do_continue_good.infer/report.json (good): ok
+file_operations_access_closed_12_loop_for_array_branching_good.infer/report.json (good): ok
+file_operations_access_closed_13_loop_for_pointer_arithmetic_good.infer/report.json (good): ok
+file_operations_access_closed_17_complex_function_pointers_good.infer/report.json (good): ok
+file_operations_access_closed_18_complex_struct_multiple_methods_good.infer/report.json (good): ok
+file_operations_access_closed_19_complex_refcount_good.infer/report.json (good): ok
+file_operations_double_close_01_simple_if_good.infer/report.json (good): ok
+file_operations_double_close_02_simple_if_int1_good.infer/report.json (good): ok
+file_operations_double_close_02_simple_if_int2_good.infer/report.json (good): ok
+file_operations_double_close_03_simple_if_multi_func_good.infer/report.json (good): ok
+file_operations_double_close_04_simple_switch_good.infer/report.json (good): ok
+file_operations_double_close_05_simple_goto_good.infer/report.json (good): ok
+file_operations_double_close_06_simple_pass_by_reference_good.infer/report.json (good): ok
+file_operations_double_close_07_cross_file_good.infer/report.json (good): ok
+file_operations_double_close_08_loop_for_good.infer/report.json (good): ok
+file_operations_double_close_09_loop_for_complex_good.infer/report.json (good): ok
+file_operations_double_close_10_loop_while_continue_good.infer/report.json (good): ok
+file_operations_double_close_11_loop_while_do_continue_good.infer/report.json (good): ok
+file_operations_double_close_12_loop_for_array_branching_good.infer/report.json (good): ok
+file_operations_double_close_13_loop_for_pointer_arithmetic_good.infer/report.json (good): ok
+file_operations_double_close_17_complex_function_pointers_good.infer/report.json (good): ok
+file_operations_double_close_18_complex_struct_multiple_methods_good.infer/report.json (good): ok
+file_operations_double_close_19_complex_refcount_good.infer/report.json (good): ok
+general_divide_by_zero_01_simple_if_good.infer/report.json (good): ok
+general_divide_by_zero_02_simple_if_int1_good.infer/report.json (good): ok
+general_divide_by_zero_02_simple_if_int2_good.infer/report.json (good): ok
+general_divide_by_zero_03_simple_if_multi_func_good.infer/report.json (good): ok
+general_divide_by_zero_04_simple_switch_good.infer/report.json (good): ok
+general_divide_by_zero_05_simple_goto_good.infer/report.json (good): ok
+general_divide_by_zero_06_simple_pass_by_reference_good.infer/report.json (good): ok
+general_divide_by_zero_07_simple_cross_file_good.infer/report.json (good): ok
+general_divide_by_zero_08_loop_for_good.infer/report.json (good): ok
+general_divide_by_zero_09_loop_for_complex_good.infer/report.json (good): ok
+general_divide_by_zero_10_loop_while_continue_good.infer/report.json (good): ok
+general_divide_by_zero_11_loop_while_do_continue_good.infer/report.json (good): ok
+general_divide_by_zero_12_loop_for_array_branching_good.infer/report.json (good): ok
+general_divide_by_zero_13_loop_for_pointer_arithmetic_good.infer/report.json (good): ok
+general_divide_by_zero_17_complex_function_pointers_good.infer/report.json (good): ok
+general_divide_by_zero_18_complex_struct_multiple_methods_good.infer/report.json (good): ok
+general_divide_by_zero_19_complex_refcount_good.infer/report.json (good): ok
+general_nullpointer_01_simple_if_good.infer/report.json (good): ok
+general_nullpointer_02_simple_if_int1_good.infer/report.json (good): ok
+general_nullpointer_02_simple_if_int2_good.infer/report.json (good): ok
+general_nullpointer_03_simple_if_multi_func_good.infer/report.json (good): ok
+general_nullpointer_04_simple_switch_good.infer/report.json (good): ok
+general_nullpointer_05_simple_goto_good.infer/report.json (good): ok
+general_nullpointer_06_simple_pass_by_reference_good.infer/report.json (good): ok
+general_nullpointer_07_cross_file_good.infer/report.json (good): ok
+general_nullpointer_08_loop_for_good.infer/report.json (good): ok
+general_nullpointer_09_loop_for_complex_good.infer/report.json (good): ok
+general_nullpointer_10_loop_while_continue_good.infer/report.json (good): ok
+general_nullpointer_11_loop_while_do_continue_good.infer/report.json (good): ok
+general_nullpointer_12_loop_for_array_branching_good.infer/report.json (good): ok
+general_nullpointer_13_loop_for_pointer_arithmetic_good.infer/report.json (good): ok
+general_nullpointer_17_complex_function_pointers_good.infer/report.json (good): ok
+general_nullpointer_18_complex_struct_multiple_methods_good.infer/report.json (good): ok
+general_nullpointer_19_complex_refcount_good.infer/report.json (good): ok
+integers_overflow_01_simple_if_good.infer/report.json (good): ok
+integers_overflow_02_simple_if_int1_good.infer/report.json (good): ok
+integers_overflow_02_simple_if_int2_good.infer/report.json (good): ok
+integers_overflow_03_simple_if_multi_func_good.infer/report.json (good): ok
+integers_overflow_04_simple_switch_good.infer/report.json (good): ok
+integers_overflow_05_simple_goto_good.infer/report.json (good): ok
+integers_overflow_06_simple_pass_by_reference_good.infer/report.json (good): ok
+integers_overflow_07_simple_cross_file_good.infer/report.json (good): ok
+integers_overflow_08_loop_for_good.infer/report.json (good): ok
+integers_overflow_09_loop_for_complex_good.infer/report.json (good): ok
+integers_overflow_10_loop_while_continue_good.infer/report.json (good): ok
+integers_overflow_11_loop_while_do_continue_good.infer/report.json (good): ok
+integers_overflow_12_loop_for_array_branching_good.infer/report.json (good): ok
+integers_overflow_13_loop_for_pointer_arithmetic_good.infer/report.json (good): ok
+integers_overflow_17_complex_function_pointers_good.infer/report.json (good): ok
+integers_overflow_18_complex_struct_multiple_methods_good.infer/report.json (good): ok
+integers_overflow_19_complex_refcount_good.infer/report.json (good): ok
+memory_access_uninit_01_simple_if_good.infer/report.json (good): ok
+memory_access_uninit_02_simple_if_int1_good.infer/report.json (good): ok
+memory_access_uninit_02_simple_if_int2_good.infer/report.json (good): ok
+memory_access_uninit_03_simple_if_multi_func_good.infer/report.json (good): ok
+memory_access_uninit_04_simple_switch_good.infer/report.json (good): ok
+memory_access_uninit_05_simple_goto_good.infer/report.json (good): ok
+memory_access_uninit_06_simple_pass_by_reference_good.infer/report.json (good): ok
+memory_access_uninit_07_simple_cross_file_good.infer/report.json (good): ok
+memory_access_uninit_08_loop_for_good.infer/report.json (good): ok
+memory_access_uninit_09_loop_for_complex_good.infer/report.json (good): ok
+memory_access_uninit_10_loop_while_continue_good.infer/report.json (good): ok
+memory_access_uninit_11_loop_while_do_continue_good.infer/report.json (good): ok
+memory_access_uninit_12_loop_for_array_branching_good.infer/report.json (good): ok
+memory_access_uninit_13_loop_for_pointer_arithmetic_good.infer/report.json (good): ok
+memory_access_uninit_17_complex_function_pointers_good.infer/report.json (good): ok
+memory_access_uninit_18_complex_struct_multiple_methods_good.infer/report.json (good): ok
+memory_access_uninit_19_complex_refcount_good.infer/report.json (good): ok
+memory_double_free_01_simple_if_good.infer/report.json (good): ok
+memory_double_free_02_simple_if_int1_good.infer/report.json (good): ok
+memory_double_free_02_simple_if_int2_good.infer/report.json (good): ok
+memory_double_free_03_simple_if_multi_func_good.infer/report.json (good): ok
+memory_double_free_04_simple_switch_good.infer/report.json (good): ok
+memory_double_free_05_simple_goto_good.infer/report.json (good): ok
+memory_double_free_06_simple_pass_by_reference_good.infer/report.json (good): ok
+memory_double_free_07_cross_file_good.infer/report.json (good): ok
+memory_double_free_08_loop_for_good.infer/report.json (good): ok
+memory_double_free_09_loop_for_complex_good.infer/report.json (good): ok
+memory_double_free_10_loop_while_continue_good.infer/report.json (good): ok
+memory_double_free_11_loop_while_do_continue_good.infer/report.json (good): ok
+memory_double_free_12_loop_for_array_branching_good.infer/report.json (good): ok
+memory_double_free_13_loop_for_pointer_arithmetic_good.infer/report.json (good): ok
+memory_double_free_17_complex_function_pointers_good.infer/report.json (good): ok
+memory_double_free_18_complex_struct_multiple_methods_good.infer/report.json (good): ok
+memory_double_free_19_complex_refcount_good.infer/report.json (good): ok
+memory_refer_free_01_simple_if_good.infer/report.json (good): ok
+memory_refer_free_02_simple_if_int1_good.infer/report.json (good): ok
+memory_refer_free_02_simple_if_int2_good.infer/report.json (good): ok
+memory_refer_free_03_simple_if_multi_func_good.infer/report.json (good): ok
+memory_refer_free_04_simple_switch_good.infer/report.json (good): ok
+memory_refer_free_05_simple_goto_good.infer/report.json (good): ok
+memory_refer_free_06_simple_pass_by_reference_good.infer/report.json (good): ok
+memory_refer_free_07_cross_file_good.infer/report.json (good): ok
+memory_refer_free_08_loop_for_good.infer/report.json (good): ok
+memory_refer_free_09_loop_for_complex_good.infer/report.json (good): ok
+memory_refer_free_10_loop_while_continue_good.infer/report.json (good): ok
+memory_refer_free_11_loop_while_do_continue_good.infer/report.json (good): ok
+memory_refer_free_12_loop_for_array_branching_good.infer/report.json (good): ok
+memory_refer_free_13_loop_for_pointer_arithmetic_good.infer/report.json (good): ok
+memory_refer_free_17_complex_function_pointers_good.infer/report.json (good): ok
+memory_refer_free_18_complex_struct_multiple_methods_good.infer/report.json (good): ok
+memory_refer_free_19_complex_refcount_good.infer/report.json (good): ok
+memory_zero_alloc_01_simple_if_good.infer/report.json (good): ok
+memory_zero_alloc_02_simple_if_int1_good.infer/report.json (good): ok
+memory_zero_alloc_02_simple_if_int2_good.infer/report.json (good): ok
+memory_zero_alloc_03_simple_if_multi_func_good.infer/report.json (good): ok
+memory_zero_alloc_04_simple_switch_good.infer/report.json (good): ok
+memory_zero_alloc_05_simple_goto_good.infer/report.json (good): ok
+memory_zero_alloc_06_simple_pass_by_reference_good.infer/report.json (good): ok
+memory_zero_alloc_07_cross_file_good.infer/report.json (good): ok
+memory_zero_alloc_08_loop_for_good.infer/report.json (good): ok
+memory_zero_alloc_09_loop_for_complex_good.infer/report.json (good): ok
+memory_zero_alloc_10_loop_while_continue_good.infer/report.json (good): ok
+memory_zero_alloc_11_loop_while_do_continue_good.infer/report.json (good): ok
+memory_zero_alloc_12_loop_for_array_branching_good.infer/report.json (good): ok
+memory_zero_alloc_13_loop_for_pointer_arithmetic_good.infer/report.json (good): ok
+memory_zero_alloc_17_complex_function_pointers_good.infer/report.json (good): ok
+memory_zero_alloc_18_complex_struct_multiple_methods_good.infer/report.json (good): ok
+memory_zero_alloc_19_complex_refcount_good.infer/report.json (good): ok
+strings_overflow_01_simple_if_good.infer/report.json (good): ok
+strings_overflow_02_simple_if_int1_good.infer/report.json (good): ok
+strings_overflow_02_simple_if_int2_good.infer/report.json (good): ok
+strings_overflow_03_simple_if_multi_func_good.infer/report.json (good): ok
+strings_overflow_04_simple_switch_good.infer/report.json (good): ok
+strings_overflow_05_simple_goto_good.infer/report.json (good): ok
+strings_overflow_06_simple_pass_by_reference_good.infer/report.json (good): ok
+strings_overflow_07_simple_cross_file_good.infer/report.json (good): ok
+strings_overflow_08_loop_for_good.infer/report.json (good): ok
+strings_overflow_09_loop_for_complex_good.infer/report.json (good): ok
+strings_overflow_10_loop_while_continue_good.infer/report.json (good): ok
+strings_overflow_11_loop_while_do_continue_good.infer/report.json (good): ok
+strings_overflow_12_loop_for_array_branching_good.infer/report.json (good): ok
+strings_overflow_13_loop_for_pointer_arithmetic_good.infer/report.json (good): ok
+strings_overflow_17_complex_function_pointers_good.infer/report.json (good): ok
+strings_overflow_18_complex_struct_multiple_methods_good.infer/report.json (good): ok
+strings_overflow_19_complex_refcount_good.infer/report.json (good): ok
+strings_unbounded_copy_01_simple_if_good.infer/report.json (good): ok
+strings_unbounded_copy_02_simple_if_int1_good.infer/report.json (good): ok
+strings_unbounded_copy_02_simple_if_int2_good.infer/report.json (good): ok
+strings_unbounded_copy_03_simple_if_multi_func_good.infer/report.json (good): ok
+strings_unbounded_copy_04_simple_switch_good.infer/report.json (good): ok
+strings_unbounded_copy_05_simple_goto_good.infer/report.json (good): ok
+strings_unbounded_copy_06_simple_pass_by_reference_good.infer/report.json (good): ok
+strings_unbounded_copy_07_simple_cross_file_good.infer/report.json (good): ok
+strings_unbounded_copy_08_loop_for_good.infer/report.json (good): ok
+strings_unbounded_copy_09_loop_for_complex_good.infer/report.json (good): ok
+strings_unbounded_copy_10_loop_while_continue_good.infer/report.json (good): ok
+strings_unbounded_copy_11_loop_while_do_continue_good.infer/report.json (good): ok
+strings_unbounded_copy_12_loop_for_array_branching_good.infer/report.json (good): ok
+strings_unbounded_copy_13_loop_for_pointer_arithmetic_good.infer/report.json (good): ok
+strings_unbounded_copy_17_complex_function_pointers_good.infer/report.json (good): ok
+strings_unbounded_copy_18_complex_struct_multiple_methods_good.infer/report.json (good): ok
+strings_unbounded_copy_19_complex_refcount_good.infer/report.json (good): ok
+base_files_access_closed_bad.infer/report.json (bad): false negative
+base_files_double_close_bad.infer/report.json (bad): false negative
+base_general_divide_by_0_bad.infer/report.json (bad): false negative
+base_general_nullpointer_bad.infer/report.json (bad): false negative
+base_general_uninitialized_pointer_bad.infer/report.json (bad): false negative
+base_general_uninitialized_value_bad.infer/report.json (bad): false negative
+base_integers_overflow_bad.infer/report.json (bad): false negative
+base_memory_double_free_bad.infer/report.json (bad): false negative
+base_memory_read_uninitialized_malloced_mem_bad.infer/report.json (bad): false negative
+base_memory_refer_freed_bad.infer/report.json (bad): false negative
+base_memory_zero_alloc_bad.infer/report.json (bad): false negative
+base_strings_overflow_bad.infer/report.json (bad): false negative
+base_strings_unbounded_copy_bad.infer/report.json (bad): false negative
+file_operations_access_closed_01_simple_if_bad.infer/report.json (bad): false negative
+file_operations_access_closed_02_simple_if_int1_bad.infer/report.json (bad): false negative
+file_operations_access_closed_02_simple_if_int2_bad.infer/report.json (bad): false negative
+file_operations_access_closed_03_simple_if_multi_func_bad.infer/report.json (bad): false negative
+file_operations_access_closed_04_simple_switch_bad.infer/report.json (bad): false negative
+file_operations_access_closed_05_simple_goto_bad.infer/report.json (bad): false negative
+file_operations_access_closed_06_simple_pass_by_reference_bad.infer/report.json (bad): false negative
+file_operations_access_closed_07_cross_file_bad.infer/report.json (bad): false negative
+file_operations_access_closed_08_loop_for_bad.infer/report.json (bad): false negative
+file_operations_access_closed_09_loop_for_complex_bad.infer/report.json (bad): false negative
+file_operations_access_closed_10_loop_while_continue_bad.infer/report.json (bad): false negative
+file_operations_access_closed_11_loop_while_do_continue_bad.infer/report.json (bad): false negative
+file_operations_access_closed_12_loop_for_array_branching_bad.infer/report.json (bad): false negative
+file_operations_access_closed_13_loop_for_pointer_arithmetic_bad.infer/report.json (bad): false negative
+file_operations_access_closed_17_complex_function_pointers_bad.infer/report.json (bad): false negative
+file_operations_access_closed_18_complex_struct_multiple_methods_bad.infer/report.json (bad): false negative
+file_operations_access_closed_19_complex_refcount_bad.infer/report.json (bad): false negative
+file_operations_double_close_01_simple_if_bad.infer/report.json (bad): false negative
+file_operations_double_close_02_simple_if_int1_bad.infer/report.json (bad): false negative
+file_operations_double_close_02_simple_if_int2_bad.infer/report.json (bad): false negative
+file_operations_double_close_03_simple_if_multi_func_bad.infer/report.json (bad): false negative
+file_operations_double_close_04_simple_switch_bad.infer/report.json (bad): false negative
+file_operations_double_close_05_simple_goto_bad.infer/report.json (bad): false negative
+file_operations_double_close_06_simple_pass_by_reference_bad.infer/report.json (bad): false negative
+file_operations_double_close_07_cross_file_bad.infer/report.json (bad): false negative
+file_operations_double_close_08_loop_for_bad.infer/report.json (bad): false negative
+file_operations_double_close_09_loop_for_complex_bad.infer/report.json (bad): false negative
+file_operations_double_close_10_loop_while_continue_bad.infer/report.json (bad): false negative
+file_operations_double_close_11_loop_while_do_continue_bad.infer/report.json (bad): false negative
+file_operations_double_close_12_loop_for_array_branching_bad.infer/report.json (bad): false negative
+file_operations_double_close_13_loop_for_pointer_arithmetic_bad.infer/report.json (bad): false negative
+file_operations_double_close_17_complex_function_pointers_bad.infer/report.json (bad): false negative
+file_operations_double_close_18_complex_struct_multiple_methods_bad.infer/report.json (bad): false negative
+file_operations_double_close_19_complex_refcount_bad.infer/report.json (bad): false negative
+general_divide_by_zero_01_simple_if_bad.infer/report.json (bad): false negative
+general_divide_by_zero_02_simple_if_int1_bad.infer/report.json (bad): false negative
+general_divide_by_zero_02_simple_if_int2_bad.infer/report.json (bad): false negative
+general_divide_by_zero_03_simple_if_multi_func_bad.infer/report.json (bad): false negative
+general_divide_by_zero_04_simple_switch_bad.infer/report.json (bad): false negative
+general_divide_by_zero_05_simple_goto_bad.infer/report.json (bad): false negative
+general_divide_by_zero_06_simple_pass_by_reference_bad.infer/report.json (bad): false negative
+general_divide_by_zero_07_simple_cross_file_bad.infer/report.json (bad): false negative
+general_divide_by_zero_08_loop_for_bad.infer/report.json (bad): false negative
+general_divide_by_zero_09_loop_for_complex_bad.infer/report.json (bad): false negative
+general_divide_by_zero_10_loop_while_continue_bad.infer/report.json (bad): false negative
+general_divide_by_zero_11_loop_while_do_continue_bad.infer/report.json (bad): false negative
+general_divide_by_zero_12_loop_for_array_branching_bad.infer/report.json (bad): false negative
+general_divide_by_zero_13_loop_for_pointer_arithmetic_bad.infer/report.json (bad): false negative
+general_divide_by_zero_17_complex_function_pointers_bad.infer/report.json (bad): false negative
+general_divide_by_zero_18_complex_struct_multiple_methods_bad.infer/report.json (bad): false negative
+general_divide_by_zero_19_complex_refcount_bad.infer/report.json (bad): false negative
+general_nullpointer_01_simple_if_bad.infer/report.json (bad): false negative
+general_nullpointer_02_simple_if_int1_bad.infer/report.json (bad): false negative
+general_nullpointer_02_simple_if_int2_bad.infer/report.json (bad): false negative
+general_nullpointer_03_simple_if_multi_func_bad.infer/report.json (bad): false negative
+general_nullpointer_04_simple_switch_bad.infer/report.json (bad): false negative
+general_nullpointer_05_simple_goto_bad.infer/report.json (bad): false negative
+general_nullpointer_06_simple_pass_by_reference_bad.infer/report.json (bad): false negative
+general_nullpointer_07_cross_file_bad.infer/report.json (bad): false negative
+general_nullpointer_08_loop_for_bad.infer/report.json (bad): false negative
+general_nullpointer_09_loop_for_complex_bad.infer/report.json (bad): false negative
+general_nullpointer_10_loop_while_continue_bad.infer/report.json (bad): false negative
+general_nullpointer_11_loop_while_do_continue_bad.infer/report.json (bad): false negative
+general_nullpointer_12_loop_for_array_branching_bad.infer/report.json (bad): false negative
+general_nullpointer_13_loop_for_pointer_arithmetic_bad.infer/report.json (bad): false negative
+general_nullpointer_17_complex_function_pointers_bad.infer/report.json (bad): false negative
+general_nullpointer_18_complex_struct_multiple_methods_bad.infer/report.json (bad): false negative
+general_nullpointer_19_complex_refcount_bad.infer/report.json (bad): false negative
+integers_overflow_01_simple_if_bad.infer/report.json (bad): false negative
+integers_overflow_02_simple_if_int1_bad.infer/report.json (bad): false negative
+integers_overflow_02_simple_if_int2_bad.infer/report.json (bad): false negative
+integers_overflow_03_simple_if_multi_func_bad.infer/report.json (bad): false negative
+integers_overflow_04_simple_switch_bad.infer/report.json (bad): false negative
+integers_overflow_05_simple_goto_bad.infer/report.json (bad): false negative
+integers_overflow_06_simple_pass_by_reference_bad.infer/report.json (bad): false negative
+integers_overflow_07_simple_cross_file_bad.infer/report.json (bad): false negative
+integers_overflow_08_loop_for_bad.infer/report.json (bad): false negative
+integers_overflow_09_loop_for_complex_bad.infer/report.json (bad): false negative
+integers_overflow_10_loop_while_continue_bad.infer/report.json (bad): false negative
+integers_overflow_11_loop_while_do_continue_bad.infer/report.json (bad): false negative
+integers_overflow_12_loop_for_array_branching_bad.infer/report.json (bad): false negative
+integers_overflow_13_loop_for_pointer_arithmetic_bad.infer/report.json (bad): false negative
+integers_overflow_17_complex_function_pointers_bad.infer/report.json (bad): false negative
+integers_overflow_18_complex_struct_multiple_methods_bad.infer/report.json (bad): false negative
+integers_overflow_19_complex_refcount_bad.infer/report.json (bad): false negative
+memory_access_uninit_01_simple_if_bad.infer/report.json (bad): false negative
+memory_access_uninit_02_simple_if_int1_bad.infer/report.json (bad): false negative
+memory_access_uninit_02_simple_if_int2_bad.infer/report.json (bad): false negative
+memory_access_uninit_03_simple_if_multi_func_bad.infer/report.json (bad): false negative
+memory_access_uninit_04_simple_switch_bad.infer/report.json (bad): false negative
+memory_access_uninit_05_simple_goto_bad.infer/report.json (bad): false negative
+memory_access_uninit_06_simple_pass_by_reference_bad.infer/report.json (bad): false negative
+memory_access_uninit_07_simple_cross_file_bad.infer/report.json (bad): false negative
+memory_access_uninit_08_loop_for_bad.infer/report.json (bad): false negative
+memory_access_uninit_09_loop_for_complex_bad.infer/report.json (bad): false negative
+memory_access_uninit_10_loop_while_continue_bad.infer/report.json (bad): false negative
+memory_access_uninit_11_loop_while_do_continue_bad.infer/report.json (bad): false negative
+memory_access_uninit_12_loop_for_array_branching_bad.infer/report.json (bad): false negative
+memory_access_uninit_13_loop_for_pointer_arithmetic_bad.infer/report.json (bad): false negative
+memory_access_uninit_17_complex_function_pointers_bad.infer/report.json (bad): false negative
+memory_access_uninit_18_complex_struct_multiple_methods_bad.infer/report.json (bad): false negative
+memory_access_uninit_19_complex_refcount_bad.infer/report.json (bad): false negative
+memory_double_free_01_simple_if_bad.infer/report.json (bad): false negative
+memory_double_free_02_simple_if_int1_bad.infer/report.json (bad): false negative
+memory_double_free_02_simple_if_int2_bad.infer/report.json (bad): false negative
+memory_double_free_03_simple_if_multi_func_bad.infer/report.json (bad): false negative
+memory_double_free_04_simple_switch_bad.infer/report.json (bad): false negative
+memory_double_free_05_simple_goto_bad.infer/report.json (bad): false negative
+memory_double_free_06_simple_pass_by_reference_bad.infer/report.json (bad): false negative
+memory_double_free_07_cross_file_bad.infer/report.json (bad): false negative
+memory_double_free_08_loop_for_bad.infer/report.json (bad): false negative
+memory_double_free_09_loop_for_complex_bad.infer/report.json (bad): false negative
+memory_double_free_10_loop_while_continue_bad.infer/report.json (bad): false negative
+memory_double_free_11_loop_while_do_continue_bad.infer/report.json (bad): false negative
+memory_double_free_12_loop_for_array_branching_bad.infer/report.json (bad): false negative
+memory_double_free_13_loop_for_pointer_arithmetic_bad.infer/report.json (bad): false negative
+memory_double_free_17_complex_function_pointers_bad.infer/report.json (bad): false negative
+memory_double_free_18_complex_struct_multiple_methods_bad.infer/report.json (bad): false negative
+memory_double_free_19_complex_refcount_bad.infer/report.json (bad): false negative
+memory_refer_free_01_simple_if_bad.infer/report.json (bad): false negative
+memory_refer_free_02_simple_if_int1_bad.infer/report.json (bad): false negative
+memory_refer_free_02_simple_if_int2_bad.infer/report.json (bad): false negative
+memory_refer_free_03_simple_if_multi_func_bad.infer/report.json (bad): false negative
+memory_refer_free_04_simple_switch_bad.infer/report.json (bad): false negative
+memory_refer_free_05_simple_goto_bad.infer/report.json (bad): false negative
+memory_refer_free_06_simple_pass_by_reference_bad.infer/report.json (bad): false negative
+memory_refer_free_07_cross_file_bad.infer/report.json (bad): false negative
+memory_refer_free_08_loop_for_bad.infer/report.json (bad): false negative
+memory_refer_free_09_loop_for_complex_bad.infer/report.json (bad): false negative
+memory_refer_free_10_loop_while_continue_bad.infer/report.json (bad): false negative
+memory_refer_free_11_loop_while_do_continue_bad.infer/report.json (bad): false negative
+memory_refer_free_12_loop_for_array_branching_bad.infer/report.json (bad): false negative
+memory_refer_free_13_loop_for_pointer_arithmetic_bad.infer/report.json (bad): false negative
+memory_refer_free_17_complex_function_pointers_bad.infer/report.json (bad): false negative
+memory_refer_free_18_complex_struct_multiple_methods_bad.infer/report.json (bad): false negative
+memory_refer_free_19_complex_refcount_bad.infer/report.json (bad): false negative
+memory_zero_alloc_01_simple_if_bad.infer/report.json (bad): false negative
+memory_zero_alloc_02_simple_if_int1_bad.infer/report.json (bad): false negative
+memory_zero_alloc_02_simple_if_int2_bad.infer/report.json (bad): false negative
+memory_zero_alloc_03_simple_if_multi_func_bad.infer/report.json (bad): false negative
+memory_zero_alloc_04_simple_switch_bad.infer/report.json (bad): false negative
+memory_zero_alloc_05_simple_goto_bad.infer/report.json (bad): false negative
+memory_zero_alloc_06_simple_pass_by_reference_bad.infer/report.json (bad): false negative
+memory_zero_alloc_07_cross_file_bad.infer/report.json (bad): false negative
+memory_zero_alloc_08_loop_for_bad.infer/report.json (bad): false negative
+memory_zero_alloc_09_loop_for_complex_bad.infer/report.json (bad): false negative
+memory_zero_alloc_10_loop_while_continue_bad.infer/report.json (bad): false negative
+memory_zero_alloc_11_loop_while_do_continue_bad.infer/report.json (bad): false negative
+memory_zero_alloc_12_loop_for_array_branching_bad.infer/report.json (bad): false negative
+memory_zero_alloc_13_loop_for_pointer_arithmetic_bad.infer/report.json (bad): false negative
+memory_zero_alloc_17_complex_function_pointers_bad.infer/report.json (bad): false negative
+memory_zero_alloc_18_complex_struct_multiple_methods_bad.infer/report.json (bad): false negative
+memory_zero_alloc_19_complex_refcount_bad.infer/report.json (bad): false negative
+strings_overflow_01_simple_if_bad.infer/report.json (bad): false negative
+strings_overflow_02_simple_if_int1_bad.infer/report.json (bad): false negative
+strings_overflow_02_simple_if_int2_bad.infer/report.json (bad): false negative
+strings_overflow_03_simple_if_multi_func_bad.infer/report.json (bad): false negative
+strings_overflow_04_simple_switch_bad.infer/report.json (bad): false negative
+strings_overflow_05_simple_goto_bad.infer/report.json (bad): false negative
+strings_overflow_06_simple_pass_by_reference_bad.infer/report.json (bad): false negative
+strings_overflow_07_simple_cross_file_bad.infer/report.json (bad): false negative
+strings_overflow_08_loop_for_bad.infer/report.json (bad): false negative
+strings_overflow_09_loop_for_complex_bad.infer/report.json (bad): false negative
+strings_overflow_10_loop_while_continue_bad.infer/report.json (bad): false negative
+strings_overflow_11_loop_while_do_continue_bad.infer/report.json (bad): false negative
+strings_overflow_12_loop_for_array_branching_bad.infer/report.json (bad): false negative
+strings_overflow_13_loop_for_pointer_arithmetic_bad.infer/report.json (bad): false negative
+strings_overflow_17_complex_function_pointers_bad.infer/report.json (bad): false negative
+strings_overflow_18_complex_struct_multiple_methods_bad.infer/report.json (bad): false negative
+strings_overflow_19_complex_refcount_bad.infer/report.json (bad): false negative
+strings_unbounded_copy_01_simple_if_bad.infer/report.json (bad): false negative
+strings_unbounded_copy_02_simple_if_int1_bad.infer/report.json (bad): false negative
+strings_unbounded_copy_02_simple_if_int2_bad.infer/report.json (bad): false negative
+strings_unbounded_copy_03_simple_if_multi_func_bad.infer/report.json (bad): false negative
+strings_unbounded_copy_04_simple_switch_bad.infer/report.json (bad): false negative
+strings_unbounded_copy_05_simple_goto_bad.infer/report.json (bad): false negative
+strings_unbounded_copy_06_simple_pass_by_reference_bad.infer/report.json (bad): false negative
+strings_unbounded_copy_07_simple_cross_file_bad.infer/report.json (bad): false negative
+strings_unbounded_copy_08_loop_for_bad.infer/report.json (bad): false negative
+strings_unbounded_copy_09_loop_for_complex_bad.infer/report.json (bad): false negative
+strings_unbounded_copy_10_loop_while_continue_bad.infer/report.json (bad): false negative
+strings_unbounded_copy_11_loop_while_do_continue_bad.infer/report.json (bad): false negative
+strings_unbounded_copy_12_loop_for_array_branching_bad.infer/report.json (bad): false negative
+strings_unbounded_copy_13_loop_for_pointer_arithmetic_bad.infer/report.json (bad): false negative
+strings_unbounded_copy_17_complex_function_pointers_bad.infer/report.json (bad): false negative
+strings_unbounded_copy_18_complex_struct_multiple_methods_bad.infer/report.json (bad): false negative
+strings_unbounded_copy_19_complex_refcount_bad.infer/report.json (bad): false negative
diff --git a/bench-moerman2018/infer_evaluate_case.sh b/bench-moerman2018/infer_evaluate_case.sh
new file mode 100644
index 0000000000000000000000000000000000000000..3f119532ee48b16336551d535d386f6a52549ff4
--- /dev/null
+++ b/bench-moerman2018/infer_evaluate_case.sh
@@ -0,0 +1,30 @@
+#!/bin/bash -eu
+
+if [ $# -lt 2 ]; then
+    echo "usage: $0 (good|bad) path/to/bugs.txt"
+    exit 1
+fi
+
+goodbad="$1"
+alarms=$(wc -l "$2" | cut -d' ' -f1)
+
+case $goodbad in
+    "good")
+        if [ "$alarms" -gt 1 ]; then
+            echo "$2 ($goodbad): imprecise"
+        else
+            echo "$2 ($goodbad): ok"
+        fi
+        ;;
+    "bad")
+        if [ "$alarms" -lt 2 ]; then
+            echo "$2 ($goodbad): false negative"
+        else
+            echo "$2 ($goodbad): ok"
+        fi
+        ;;
+    *)
+        echo "invalid '$goodbad': must be either 'good' or 'bad'."
+        exit 1
+esac
+