diff options
author | Björn Gustavsson <[email protected]> | 2014-06-13 12:57:35 +0200 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2014-06-13 12:57:35 +0200 |
commit | ab8c6675511cb1968c57fab3dd8e47cc48037c06 (patch) | |
tree | 7b602053af81ba8eb378fa8c47be864e46317fa2 /erts | |
parent | c9e36ab16034bb7fe71f772df6bba22070976bbf (diff) | |
download | otp-ab8c6675511cb1968c57fab3dd8e47cc48037c06.tar.gz otp-ab8c6675511cb1968c57fab3dd8e47cc48037c06.tar.bz2 otp-ab8c6675511cb1968c57fab3dd8e47cc48037c06.zip |
add_abstract_code: Remove 'from_asm' option
The purpose of add_abstract_code is to give Dialyzer some
abstract code so that it will not fail fatally when analysing
prim_eval which was compiled from BEAM assembly.
But if Dialyzer were to pass along the compiler options
that the module was compiled with when translating the
abstract code to Core Erlang, the 'from_asm' option would
crash the compilation. Thus, since we are already cheating,
we should cheat a little bit more and also remove the
'from_asm' option.
Diffstat (limited to 'erts')
-rw-r--r-- | erts/preloaded/src/add_abstract_code | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/erts/preloaded/src/add_abstract_code b/erts/preloaded/src/add_abstract_code index e670156d21..211a60c930 100644 --- a/erts/preloaded/src/add_abstract_code +++ b/erts/preloaded/src/add_abstract_code @@ -27,8 +27,18 @@ main([BeamFile,AbstrFile]) -> {ok,_,Chunks0} = beam_lib:all_chunks(BeamFile), {ok,Abstr} = file:consult(AbstrFile), - Chunks = lists:keyreplace("Abst", 1, Chunks0, - {"Abst",term_to_binary({raw_abstract_v1,Abstr})}), + Chunks1 = lists:keyreplace("Abst", 1, Chunks0, + {"Abst",term_to_binary({raw_abstract_v1,Abstr})}), + {"CInf",CInf0} = lists:keyfind("CInf", 1, Chunks1), + CInf = fix_options(CInf0), + Chunks = lists:keyreplace("CInf", 1, Chunks1, {"CInf",CInf}), {ok,Module} = beam_lib:build_module(Chunks), ok = file:write_file(BeamFile, Module), init:stop(). + +fix_options(CInf0) -> + CInf1 = binary_to_term(CInf0), + {options,Opts0} = lists:keyfind(options, 1, CInf1), + Opts = Opts0 -- [from_asm], + CInf = lists:keyreplace(options, 1, CInf1, {options,Opts}), + term_to_binary(CInf). |