diff options
author | Björn Gustavsson <[email protected]> | 2019-05-22 13:01:10 +0200 |
---|---|---|
committer | GitHub <[email protected]> | 2019-05-22 13:01:10 +0200 |
commit | 500f4f6b01efc215aa46455e82b8addbbd25f4b1 (patch) | |
tree | 60ae7400edc182c97f4f33293e2f74146c01b793 /lib/compiler/test | |
parent | c8230dde231c3d7cc6807714eb46741006f792b8 (diff) | |
parent | 119e72d3e766089dc7347b75d0530b0c626cff93 (diff) | |
download | otp-500f4f6b01efc215aa46455e82b8addbbd25f4b1.tar.gz otp-500f4f6b01efc215aa46455e82b8addbbd25f4b1.tar.bz2 otp-500f4f6b01efc215aa46455e82b8addbbd25f4b1.zip |
Merge pull request #2236 from bjorng/bjorn/compiler/fix-fun-duplication
Fix compiler crash when funs were matched
OTP-15833
Diffstat (limited to 'lib/compiler/test')
-rw-r--r-- | lib/compiler/test/fun_SUITE.erl | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/lib/compiler/test/fun_SUITE.erl b/lib/compiler/test/fun_SUITE.erl index 1df0a05275..7fc6195e31 100644 --- a/lib/compiler/test/fun_SUITE.erl +++ b/lib/compiler/test/fun_SUITE.erl @@ -22,7 +22,8 @@ -export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, init_per_group/2,end_per_group/2, test1/1,overwritten_fun/1,otp_7202/1,bif_fun/1, - external/1,eep37/1,eep37_dup/1,badarity/1,badfun/1]). + external/1,eep37/1,eep37_dup/1,badarity/1,badfun/1, + duplicated_fun/1]). %% Internal exports. -export([call_me/1,dup1/0,dup2/0]). @@ -37,7 +38,7 @@ all() -> groups() -> [{p,[parallel], [test1,overwritten_fun,otp_7202,bif_fun,external,eep37, - eep37_dup,badarity,badfun]}]. + eep37_dup,badarity,badfun,duplicated_fun]}]. init_per_suite(Config) -> test_lib:recompile(?MODULE), @@ -261,5 +262,20 @@ badfun(_Config) -> expect_badfun(Term, Exit) -> {'EXIT',{{badfun,Term},_}} = Exit. +duplicated_fun(_Config) -> + try + %% The following code used to crash the compiler before + %% v3_core:is_safe/1 was corrected to consider fun variables + %% unsafe. + id([print_result_paths_fun = fun duplicated_fun_helper/1]), + ct:error(should_fail) + catch + error:{badmatch,F} when is_function(F, 1) -> + ok + end. + +duplicated_fun_helper(_) -> + ok. + id(I) -> I. |