File 0182-compile-make-select_passes-clause-order-match-the-co.patch of Package erlang
From 9e6c9fd5693e24424f807738fdb46d9db731a4b6 Mon Sep 17 00:00:00 2001
From: Richard Carlsson <carlsson.richard@gmail.com>
Date: Thu, 29 Oct 2020 15:09:15 +0100
Subject: [PATCH] compile: make select_passes clause order match the comment
text
The comment text gives the impression that a pass {Name, Fun} should always
work, but if Name matched one of the other passes such as {listing, Ext},
that case would be selected instead, even if the second element was a fun.
---
lib/compiler/src/compile.erl | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/lib/compiler/src/compile.erl b/lib/compiler/src/compile.erl
index a6bf4a187b..d6298fdf93 100644
--- a/lib/compiler/src/compile.erl
+++ b/lib/compiler/src/compile.erl
@@ -694,6 +694,11 @@ select_passes([{pass,Mod}|Ps], Opts) ->
end
end,
[{Mod,F}|select_passes(Ps, Opts)];
+select_passes([{_,Fun}=P|Ps], Opts) when is_function(Fun) ->
+ [P|select_passes(Ps, Opts)];
+select_passes([{_,Test,Fun}=P|Ps], Opts) when is_function(Test),
+ is_function(Fun) ->
+ [P|select_passes(Ps, Opts)];
select_passes([{src_listing,Ext}|_], _Opts) ->
[{listing,fun (Code, St) -> src_listing(Ext, Code, St) end}];
select_passes([{listing,Ext}|_], _Opts) ->
@@ -706,8 +711,6 @@ select_passes([{iff,Flag,Pass}|Ps], Opts) ->
select_cond(Flag, true, Pass, Ps, Opts);
select_passes([{unless,Flag,Pass}|Ps], Opts) ->
select_cond(Flag, false, Pass, Ps, Opts);
-select_passes([{_,Fun}=P|Ps], Opts) when is_function(Fun) ->
- [P|select_passes(Ps, Opts)];
select_passes([{delay,Passes0}|Ps], Opts) when is_list(Passes0) ->
%% Delay evaluation of compiler options and which compiler passes to run.
%% Since we must know beforehand whether a listing will be produced, we
@@ -719,9 +722,6 @@ select_passes([{delay,Passes0}|Ps], Opts) when is_list(Passes0) ->
{not_done,Passes} ->
[{delay,Passes}|select_passes(Ps, Opts)]
end;
-select_passes([{_,Test,Fun}=P|Ps], Opts) when is_function(Test),
- is_function(Fun) ->
- [P|select_passes(Ps, Opts)];
select_passes([], _Opts) ->
[];
select_passes([List|Ps], Opts) when is_list(List) ->
--
2.26.2