Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:26
erlang
1081-AArch64-Fix-is_function-2-for-arities-16.p...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 1081-AArch64-Fix-is_function-2-for-arities-16.patch of Package erlang
From 2ae8f55478e29cd9aecc3f5be8a2cf519c6c1724 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org> Date: Wed, 7 Jun 2023 08:50:15 +0200 Subject: [PATCH] AArch64: Fix is_function/2 for arities >= 16 --- erts/emulator/beam/jit/arm/instr_common.cpp | 2 +- erts/emulator/test/fun_SUITE.erl | 70 ++++++++++++++++++--- 2 files changed, 63 insertions(+), 9 deletions(-) diff --git a/erts/emulator/beam/jit/arm/instr_common.cpp b/erts/emulator/beam/jit/arm/instr_common.cpp index dc74eb27fe..0596f829c1 100644 --- a/erts/emulator/beam/jit/arm/instr_common.cpp +++ b/erts/emulator/beam/jit/arm/instr_common.cpp @@ -1059,7 +1059,7 @@ void BeamModuleAssembler::emit_is_function2(const ArgLabel &Fail, arm::Gp boxed_ptr = emit_ptr_val(TMP1, src.reg); a.ldurh(TMP2.w(), emit_boxed_val(boxed_ptr)); - a.cmp(TMP2, imm(MAKE_FUN_HEADER(arity, 0, 0) & 0xFFFF)); + cmp(TMP2, MAKE_FUN_HEADER(arity, 0, 0) & 0xFFFF); a.b_ne(resolve_beam_label(Fail, disp1MB)); } diff --git a/erts/emulator/test/fun_SUITE.erl b/erts/emulator/test/fun_SUITE.erl index 10cfc53a97..113ceb3690 100644 --- a/erts/emulator/test/fun_SUITE.erl +++ b/erts/emulator/test/fun_SUITE.erl @@ -698,20 +698,36 @@ t_arity(Config) when is_list(Config) -> t_is_function2(Config) when is_list(Config) -> false = is_function(id({a,b}), 0), false = is_function(id({a,b}), 234343434333433433), - true = is_function(fun() -> ok end, 0), - true = is_function(fun(_) -> ok end, 1), - false = is_function(fun(_) -> ok end, 0), + true = is_function(id(fun() -> ok end), 0), + true = is_function(id(fun(_) -> ok end), 1), + false = is_function(id(fun(_) -> ok end), 0), - true = is_function(fun erlang:abs/1, 1), - true = is_function(fun erlang:abs/99, 99), - false = is_function(fun erlang:abs/1, 0), - false = is_function(fun erlang:abs/99, 0), + true = is_function(id(fun erlang:abs/1), 1), + true = is_function(id(fun erlang:abs/99), 99), + false = is_function(id(fun erlang:abs/1), 0), + false = is_function(id(fun erlang:abs/99), 0), false = is_function(id(self()), 0), false = is_function(id({a,b,c}), 0), false = is_function(id({a}), 0), false = is_function(id([a,b,c]), 0), + %% Larger arities. + F16 = id(fun f/16), + F255 = id(fun f/255), + + false = is_function(id(self()), 16), + true = is_function(F16, 16), + ok = id(if is_function(F16, 16) -> ok; true -> error end), + false = is_function(F255, 16), + error = id(if is_function(F255, 16) -> ok; true -> error end), + + false = is_function(id(self()), 255), + true = is_function(F255, 255), + false = is_function(F16, 255), + error = id(if is_function(F16, 255) -> ok; true -> error end), + ok = id(if is_function(F255, 255) -> ok; true -> error end), + %% Bad arity argument. bad_arity(a), bad_arity(-1), @@ -723,7 +739,7 @@ t_is_function2(Config) when is_list(Config) -> bad_arity(self()), %% Bad arity argument in guard test. - Fun = fun erlang:abs/1, + Fun = id(fun erlang:abs/1), ok = if is_function(Fun, -1) -> error; is_function(Fun, 256) -> error; @@ -733,6 +749,44 @@ t_is_function2(Config) when is_list(Config) -> end, ok. +f(_A1, _A2, _A3, _A4, _A5, _A6, _A7, _A8, + _A9, _A10, _A11, _A12, _A13, _A14, _A15, _A16) -> + ok. + +f(_A1, _A2, _A3, _A4, _A5, _A6, _A7, _A8, + _A9, _A10, _A11, _A12, _A13, _A14, _A15, _A16, + _A17, _A18, _A19, _A20, _A21, _A22, _A23, _A24, + _A25, _A26, _A27, _A28, _A29, _A30, _A31, _A32, + _A33, _A34, _A35, _A36, _A37, _A38, _A39, _A40, + _A41, _A42, _A43, _A44, _A45, _A46, _A47, _A48, + _A49, _A50, _A51, _A52, _A53, _A54, _A55, _A56, + _A57, _A58, _A59, _A60, _A61, _A62, _A63, _A64, + _A65, _A66, _A67, _A68, _A69, _A70, _A71, _A72, + _A73, _A74, _A75, _A76, _A77, _A78, _A79, _A80, + _A81, _A82, _A83, _A84, _A85, _A86, _A87, _A88, + _A89, _A90, _A91, _A92, _A93, _A94, _A95, _A96, + _A97, _A98, _A99, _A100, _A101, _A102, _A103, _A104, + _A105, _A106, _A107, _A108, _A109, _A110, _A111, _A112, + _A113, _A114, _A115, _A116, _A117, _A118, _A119, _A120, + _A121, _A122, _A123, _A124, _A125, _A126, _A127, _A128, + _A129, _A130, _A131, _A132, _A133, _A134, _A135, _A136, + _A137, _A138, _A139, _A140, _A141, _A142, _A143, _A144, + _A145, _A146, _A147, _A148, _A149, _A150, _A151, _A152, + _A153, _A154, _A155, _A156, _A157, _A158, _A159, _A160, + _A161, _A162, _A163, _A164, _A165, _A166, _A167, _A168, + _A169, _A170, _A171, _A172, _A173, _A174, _A175, _A176, + _A177, _A178, _A179, _A180, _A181, _A182, _A183, _A184, + _A185, _A186, _A187, _A188, _A189, _A190, _A191, _A192, + _A193, _A194, _A195, _A196, _A197, _A198, _A199, _A200, + _A201, _A202, _A203, _A204, _A205, _A206, _A207, _A208, + _A209, _A210, _A211, _A212, _A213, _A214, _A215, _A216, + _A217, _A218, _A219, _A220, _A221, _A222, _A223, _A224, + _A225, _A226, _A227, _A228, _A229, _A230, _A231, _A232, + _A233, _A234, _A235, _A236, _A237, _A238, _A239, _A240, + _A241, _A242, _A243, _A244, _A245, _A246, _A247, _A248, + _A249, _A250, _A251, _A252, _A253, _A254, _A255) -> + ok. + bad_arity(A) -> {'EXIT',_} = (catch is_function(fun() -> ok end, A)), {'EXIT',_} = (catch is_function(no_fun, A)), -- 2.35.3
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor