diff options
author | Björn Gustavsson <[email protected]> | 2012-02-13 09:45:22 +0100 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2012-02-13 10:29:00 +0100 |
commit | f928756b2b7f26b90d962cc038d4ba68619c1bf5 (patch) | |
tree | 6b2ce27df934cd6d2c77d50821e9dfe02a5294af /lib/compiler/test | |
parent | c3fb91d203412c16d008b4c36fb13c0d776d8c46 (diff) | |
download | otp-f928756b2b7f26b90d962cc038d4ba68619c1bf5.tar.gz otp-f928756b2b7f26b90d962cc038d4ba68619c1bf5.tar.bz2 otp-f928756b2b7f26b90d962cc038d4ba68619c1bf5.zip |
compiler: Teach the inliner to preserve on_load functions
The inliner was ignorant of on_load functions and would discard them
(unless they were exported or referenced).
Noticed-by: Yiannis Tsiouris <[email protected]>
Diffstat (limited to 'lib/compiler/test')
-rw-r--r-- | lib/compiler/test/compilation_SUITE.erl | 1 | ||||
-rw-r--r-- | lib/compiler/test/compilation_SUITE_data/on_load_inline.erl | 23 |
2 files changed, 24 insertions, 0 deletions
diff --git a/lib/compiler/test/compilation_SUITE.erl b/lib/compiler/test/compilation_SUITE.erl index 664582a3a8..408fd5ed53 100644 --- a/lib/compiler/test/compilation_SUITE.erl +++ b/lib/compiler/test/compilation_SUITE.erl @@ -159,6 +159,7 @@ split({int, N}, <<N:16,B:N/binary,T/binary>>) -> ?comp(convopts). ?comp(otp_7202). ?comp(on_load). +?comp(on_load_inline). beam_compiler_7(doc) -> "Code snippet submitted from Ulf Wiger which fails in R3 Beam."; diff --git a/lib/compiler/test/compilation_SUITE_data/on_load_inline.erl b/lib/compiler/test/compilation_SUITE_data/on_load_inline.erl new file mode 100644 index 0000000000..322843b61e --- /dev/null +++ b/lib/compiler/test/compilation_SUITE_data/on_load_inline.erl @@ -0,0 +1,23 @@ +-module(on_load_inline). +-export([?MODULE/0]). +-on_load(on_load/0). +-compile(inline). + +?MODULE() -> + [{pid,Pid}] = ets:lookup(on_load_executed, pid), + exit(Pid, kill), + ok. + +on_load() -> + Parent = self(), + spawn(fun() -> + T = ets:new(on_load_executed, [named_table]), + ets:insert(T, {pid,self()}), + Parent ! done, + receive + wait_forever -> ok + end + end), + receive + done -> ok + end. |