diff options
author | Björn Gustavsson <[email protected]> | 2017-08-07 07:00:14 +0200 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2017-08-07 07:20:29 +0200 |
commit | f59e70ce61913356a67d58e03d6b68c29e983363 (patch) | |
tree | 370a0b69f33dc1db37fb79bc249e7402719cb101 /lib/compiler/test/core_SUITE.erl | |
parent | 520310feef0d76c0f99447187f3574408b219ae5 (diff) | |
download | otp-f59e70ce61913356a67d58e03d6b68c29e983363.tar.gz otp-f59e70ce61913356a67d58e03d6b68c29e983363.tar.bz2 otp-f59e70ce61913356a67d58e03d6b68c29e983363.zip |
sys_core_fold: Fix unsafe optimization of non-variable apply
The sys_core_fold pass would do an unsafe "optimization" when an
apply operation did not have a variable in the function position
as in the following example:
> cat test1.core
module 'test1' ['test1'/2]
attributes []
'i'/1 =
fun (_f) -> _f
'test1'/2 =
fun (_f, _x) ->
apply apply 'i'/1 (_f) (_x)
end
> erlc test1.core
no_file: Warning: invalid function call
Reported-by: Mikael Pettersson
Diffstat (limited to 'lib/compiler/test/core_SUITE.erl')
-rw-r--r-- | lib/compiler/test/core_SUITE.erl | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/lib/compiler/test/core_SUITE.erl b/lib/compiler/test/core_SUITE.erl index f8839da42f..0e07e8dd2e 100644 --- a/lib/compiler/test/core_SUITE.erl +++ b/lib/compiler/test/core_SUITE.erl @@ -28,7 +28,8 @@ map_core_test/1,eval_case/1,bad_boolean_guard/1, bs_shadowed_size_var/1, cover_v3_kernel_1/1,cover_v3_kernel_2/1,cover_v3_kernel_3/1, - cover_v3_kernel_4/1,cover_v3_kernel_5/1]). + cover_v3_kernel_4/1,cover_v3_kernel_5/1, + non_variable_apply/1]). -include_lib("common_test/include/ct.hrl"). @@ -56,7 +57,8 @@ groups() -> map_core_test,eval_case,bad_boolean_guard, bs_shadowed_size_var, cover_v3_kernel_1,cover_v3_kernel_2,cover_v3_kernel_3, - cover_v3_kernel_4,cover_v3_kernel_5 + cover_v3_kernel_4,cover_v3_kernel_5, + non_variable_apply ]}]. @@ -90,7 +92,7 @@ end_per_group(_GroupName, Config) -> ?comp(cover_v3_kernel_3). ?comp(cover_v3_kernel_4). ?comp(cover_v3_kernel_5). - +?comp(non_variable_apply). try_it(Mod, Conf) -> Src = filename:join(proplists:get_value(data_dir, Conf), |