aboutsummaryrefslogtreecommitdiffstats
path: root/erts/preloaded/src/add_abstract_code
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2014-06-13 12:57:35 +0200
committerBjörn Gustavsson <[email protected]>2014-06-13 12:57:35 +0200
commitab8c6675511cb1968c57fab3dd8e47cc48037c06 (patch)
tree7b602053af81ba8eb378fa8c47be864e46317fa2 /erts/preloaded/src/add_abstract_code
parentc9e36ab16034bb7fe71f772df6bba22070976bbf (diff)
downloadotp-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/preloaded/src/add_abstract_code')
-rw-r--r--erts/preloaded/src/add_abstract_code14
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).