Skip to content

Commit 3e3f966

Browse files
authored
Merge pull request #21467 from JuliaLang/yyc/codegen/cfunction
Try to loosen cfunction optimization type check
2 parents 85907b0 + 3660535 commit 3e3f966

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

src/ccall.cpp

+17-9
Original file line numberDiff line numberDiff line change
@@ -1787,18 +1787,26 @@ static jl_cgval_t emit_ccall(jl_value_t **args, size_t nargs, jl_codectx_t *ctx)
17871787
jl_value_t *frt = expr_type(args[6], ctx);
17881788
if (f && (jl_is_type_type((jl_value_t*)frt) && !jl_has_free_typevars(jl_tparam0(frt)))) {
17891789
fargt = static_eval(args[8], ctx, true, true);
1790-
if (fargt) {
1791-
if (jl_is_tuple(fargt)) {
1792-
// TODO: maybe deprecation warning, better checking
1793-
fargt = (jl_value_t*)jl_apply_tuple_type_v((jl_value_t**)jl_data_ptr(fargt), jl_nfields(fargt));
1794-
}
1795-
}
1796-
else {
1790+
if (!fargt) {
17971791
fargt = expr_type(args[8], ctx);
1798-
if (jl_is_type_type((jl_value_t*)fargt))
1792+
if (jl_is_type_type((jl_value_t*)fargt)) {
17991793
fargt = jl_tparam0(fargt);
1794+
if (jl_has_free_typevars(fargt) || !jl_is_tuple_type(fargt)) {
1795+
fargt = nullptr;
1796+
}
1797+
}
1798+
else {
1799+
fargt = nullptr;
1800+
}
1801+
}
1802+
else if (jl_is_tuple(fargt)) {
1803+
// TODO: maybe deprecation warning, better checking
1804+
fargt = (jl_value_t*)jl_apply_tuple_type_v((jl_value_t**)jl_data_ptr(fargt), jl_nfields(fargt));
18001805
}
1801-
if (jl_is_tuple_type(fargt) && jl_is_leaf_type(fargt)) {
1806+
else if (!jl_is_tuple_type(fargt)) {
1807+
fargt = nullptr;
1808+
}
1809+
if (fargt) {
18021810
frt = jl_tparam0(frt);
18031811
Value *llvmf = NULL;
18041812
JL_TRY {

0 commit comments

Comments
 (0)