File 1752-beam_disasm-fix-label-reordering-bug.patch of Package erlang
From a657e9721bf4a0bcf7efb9604bd37f0f5294145f Mon Sep 17 00:00:00 2001
From: Richard Carlsson <carlsson.richard@gmail.com>
Date: Sat, 20 Dec 2025 20:56:14 +0100
Subject: [PATCH 2/2] beam_disasm: fix label reordering bug
---
lib/compiler/src/beam_disasm.erl | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/lib/compiler/src/beam_disasm.erl b/lib/compiler/src/beam_disasm.erl
index ba0cddcc5d..dfaa4e5b98 100644
--- a/lib/compiler/src/beam_disasm.erl
+++ b/lib/compiler/src/beam_disasm.erl
@@ -386,8 +386,9 @@ disasm_code([], _, _, _) ->
get_function_chunks([]) ->
?exit(empty_code_segment);
-get_function_chunks(Code) ->
- get_funs(labels_r(Code, [])).
+get_function_chunks(Code0) ->
+ {LsR,Code} = labels_r(Code0, []),
+ get_funs({lists:reverse(LsR),Code}).
labels_r([], R) -> {R, []};
labels_r([{label,_}=I|Is], R) ->
@@ -399,20 +400,20 @@ labels_r(Is, R) -> {R, Is}.
get_funs({[],[]}) -> [];
get_funs({_,[]}) ->
?exit(no_func_info_in_code_segment);
-get_funs({LsR0,[{func_info,[{atom,M}=AtomM,{atom,F}=AtomF,ArityArg]}|Code0]})
+get_funs({Ls0,[{func_info,[{atom,M}=AtomM,{atom,F}=AtomF,ArityArg]}|Code0]})
when is_atom(M), is_atom(F) ->
Arity = resolve_arg_unsigned(ArityArg),
- {LsR,Code,RestCode} = get_fun(Code0, []),
+ {Ls,Code,RestCode} = get_fun(Code0, []),
[{label,[{u,Entry}]}|_] = Code,
[#function{name=F,
arity=Arity,
entry=Entry,
- code=lists:reverse(LsR0, [{func_info,AtomM,AtomF,Arity}|Code])}
- |get_funs({LsR,RestCode})].
+ code=Ls0 ++ [{func_info,AtomM,AtomF,Arity}|Code]}
+ |get_funs({Ls,RestCode})].
get_fun([{func_info,_}|_]=Is, R0) ->
- {LsR,R} = labels_r(R0, []),
- {LsR,lists:reverse(R),Is};
+ {Ls,R} = labels_r(R0, []),
+ {Ls,lists:reverse(R),Is};
get_fun([{int_code_end,[]}], R) ->
{[],lists:reverse(R),[]};
get_fun([I|Is], R) ->
--
2.51.0