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

openSUSE Build Service is sponsored by