File 0783-dialyzer-Support-modules-compiled-with-line_coverage.patch of Package erlang
From 017e756ff4af218bc19918246462a678bf156b66 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org>
Date: Fri, 8 Nov 2024 07:11:00 +0100
Subject: [PATCH] dialyzer: Support modules compiled with `line_coverage`
Closes #9027
---
lib/dialyzer/src/dialyzer_dataflow.erl | 2 ++
lib/dialyzer/src/dialyzer_typesig.erl | 2 ++
lib/dialyzer/test/dialyzer_SUITE.erl | 25 ++++++++++++++++++++++---
3 files changed, 26 insertions(+), 3 deletions(-)
diff --git a/lib/dialyzer/src/dialyzer_dataflow.erl b/lib/dialyzer/src/dialyzer_dataflow.erl
index 939397741b..fa8bbf00ef 100644
--- a/lib/dialyzer/src/dialyzer_dataflow.erl
+++ b/lib/dialyzer/src/dialyzer_dataflow.erl
@@ -1013,6 +1013,8 @@ handle_primop(Tree, Map, State) ->
{State, Map, t_any()};
nif_start ->
{State, Map, t_any()};
+ executable_line ->
+ {State, Map, t_any()};
Other ->
error({'Unsupported primop', Other})
end.
diff --git a/lib/dialyzer/src/dialyzer_typesig.erl b/lib/dialyzer/src/dialyzer_typesig.erl
index ac6f57836e..039b90585f 100644
--- a/lib/dialyzer/src/dialyzer_typesig.erl
+++ b/lib/dialyzer/src/dialyzer_typesig.erl
@@ -438,6 +438,8 @@ traverse(Tree, DefinedVars, State) ->
{State, t_any()};
nif_start ->
{State, t_any()};
+ executable_line ->
+ {State, t_any()};
Other -> erlang:error({'Unsupported primop', Other})
end;
seq ->
diff --git a/lib/dialyzer/test/dialyzer_SUITE.erl b/lib/dialyzer/test/dialyzer_SUITE.erl
index fe6987192a..a19e6930bc 100644
--- a/lib/dialyzer/test/dialyzer_SUITE.erl
+++ b/lib/dialyzer/test/dialyzer_SUITE.erl
@@ -31,12 +31,12 @@
-export([init_per_testcase/2, end_per_testcase/2]).
%% Test cases must be exported.
--export([app_test/1, appup_test/1, file_list/1]).
+-export([app_test/1, appup_test/1, file_list/1, line_coverage/1]).
suite() -> [{ct_hooks,[ts_install_cth]}].
all() ->
- [app_test, appup_test, file_list].
+ [app_test, appup_test, file_list, line_coverage].
groups() ->
[].
@@ -129,3 +129,21 @@ expected(Files0) ->
":6:5: The variable _ can never match since previous clauses completely covered the type \n"
" atom()\n" || F <- Files],
iolist_to_binary(S).
+
+line_coverage(Config) ->
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Prog = <<"-module(foo).
+ bar() -> ok."
+ >>,
+ {ok, Beam1} = compile(Config, Prog, foo, [line_coverage]),
+
+ Plt1 = filename:join(PrivDir, "line_coverage.plt"),
+ _ = dialyzer:run([{analysis_type, plt_build},
+ {files, [Beam1]},
+ {init_plt, Plt1},
+ {from, byte_code}]),
+
+ {ok, [{files, [Beam1]}]} = dialyzer:plt_info(Plt1),
+
+ ok.
+
--
2.43.0