diff options
author | John Högberg <john@erlang.org> | 2019-01-21 07:25:47 +0100 |
---|---|---|
committer | John Högberg <john@erlang.org> | 2019-01-24 08:37:37 +0100 |
commit | 294d66a295f6c2101fe3c2da630979ad4e736c08 (patch) | |
tree | 7a74227c185c69a976bd90b521eddd47d01db5d3 /lib/compiler/test/apply_SUITE.erl | |
parent | 1c73a313e72909d054f55e321c1929d2be55ff11 (diff) | |
download | erlang-294d66a295f6c2101fe3c2da630979ad4e736c08.tar.gz |
compiler: Introduce module-level type optimization
This commit lets the type optimization pass work across functions,
tracking return and argument types to eliminate redundant tests.
Diffstat (limited to 'lib/compiler/test/apply_SUITE.erl')
-rw-r--r-- | lib/compiler/test/apply_SUITE.erl | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/lib/compiler/test/apply_SUITE.erl b/lib/compiler/test/apply_SUITE.erl index 0f82a56fb7..2ee518b1a0 100644 --- a/lib/compiler/test/apply_SUITE.erl +++ b/lib/compiler/test/apply_SUITE.erl @@ -73,6 +73,7 @@ mfa(Config) when is_list(Config) -> {'EXIT',_} = (catch ?APPLY2(Mod, (id(bazzzzzz)), a, b)), {'EXIT',_} = (catch ?APPLY2({}, baz, a, b)), {'EXIT',_} = (catch ?APPLY2(?MODULE, [], a, b)), + {'EXIT',_} = (catch bad_literal_call(1)), ok = apply(Mod, foo, id([])), {[a,b|c]} = apply(Mod, bar, id([[a,b|c]])), @@ -92,6 +93,13 @@ mfa(Config) when is_list(Config) -> apply(Mod, foo, []). +%% The single call to this function with a literal argument caused type +%% optimization to swap out the 'mod' field of a #b_remote{}, which was +%% mishandled during code generation as it assumed that the module would always +%% be an atom. +bad_literal_call(I) -> + I:foo(). + foo() -> ok. |