File 1241-parsetools-Fix-compiler-warning-in-generated-code.patch of Package erlang
From bf49f816ef9e6f362d777f89d5f7720f951485f4 Mon Sep 17 00:00:00 2001
From: Hans Bolinder <hasse@erlang.org>
Date: Tue, 1 Jun 2021 12:41:06 +0200
Subject: [PATCH] parsetools: Fix compiler warning in generated code
See also https://github.com/erlang/otp/issues/4918.
---
lib/parsetools/src/leex.erl | 5 ++++-
lib/parsetools/test/leex_SUITE.erl | 25 +++++++++++++++++++++++--
2 files changed, 27 insertions(+), 3 deletions(-)
diff --git a/lib/parsetools/src/leex.erl b/lib/parsetools/src/leex.erl
index 90d1b9f71e..37f3fb7114 100644
--- a/lib/parsetools/src/leex.erl
+++ b/lib/parsetools/src/leex.erl
@@ -1547,7 +1547,10 @@ pack_trans(Trs) -> pack_trans(Trs, []).
%% Trs1.
pack_trans([{{C,C},S}|Trs], Pt) -> % Singletons to the head
- pack_trans(Trs, [{C,S}|Pt]);
+ case lists:member({C,S}, Pt) of
+ true -> pack_trans(Trs, Pt);
+ false -> pack_trans(Trs, [{C,S}|Pt])
+ end;
%% Special detection and handling of $\n.
pack_trans([{{Cf,$\n},S}|Trs], Pt) ->
pack_trans([{{Cf,$\n-1},S}|Trs], [{$\n,S}|Pt]);
diff --git a/lib/parsetools/test/leex_SUITE.erl b/lib/parsetools/test/leex_SUITE.erl
index 90ab770138..d03ff30127 100644
--- a/lib/parsetools/test/leex_SUITE.erl
+++ b/lib/parsetools/test/leex_SUITE.erl
@@ -45,7 +45,8 @@
pt/1, man/1, ex/1, ex2/1, not_yet/1,
line_wrap/1,
- otp_10302/1, otp_11286/1, unicode/1, otp_13916/1]).
+ otp_10302/1, otp_11286/1, unicode/1, otp_13916/1,
+ compiler_warnings/1]).
% Default timetrap timeout (set in init_per_testcase).
-define(default_timeout, ?t:minutes(1)).
@@ -67,7 +68,8 @@ all() ->
groups() ->
[{checks, [], [file, compile, syntax]},
{examples, [], [pt, man, ex, ex2, not_yet, unicode]},
- {tickets, [], [otp_10302, otp_11286, otp_13916]},
+ {tickets, [], [otp_10302, otp_11286, otp_13916,
+ compiler_warnings]},
{bugs, [], [line_wrap]}].
init_per_suite(Config) ->
@@ -1131,6 +1133,26 @@ otp_17023(Config) ->
?line run(Config, Ts),
ok.
+%% OTP-17499. GH-4918.
+compiler_warnings(Config) ->
+ Xrl =
+ <<"
+Definitions.
+Rules.
+/(\\\\.|[^\\\\/]|\\[(/|\\\\.|[^\\\\/])+\\]|\\((\\\\.|/|[^\\\\/])+\\)+)*/ : a.
+/\\*([^*][\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*+/ : b.
+Erlang code.
+ ">>,
+ Dir = ?privdir,
+ XrlFile = filename:join(Dir, "compiler_warnings.xrl"),
+ ok = file:write_file(XrlFile, Xrl),
+ ErlFile = filename:join(Dir, "compiler_warnings.erl"),
+erlang:display({xrlfile,XrlFile}),
+ {ok, _} = leex:file(XrlFile, []),
+erlang:display({erlfile,ErlFile}),
+ {ok, compiler_warnings, []} = compile:file(ErlFile, [return]),
+ ok.
+
start_node(Name, Args) ->
[_,Host] = string:tokens(atom_to_list(node()), "@"),
ct:log("Trying to start ~w@~s~n", [Name,Host]),
--
2.26.2