Hi David.
I had a patch for this here: https://github.com/antoyo/libgccjit/pull/20
The fact that you removed the debug_tree (and abort) will make it harder
to figure out what the missing types to handle are.
This will also probably make it hard for people to understand why they
get a type error when calling a builtin function with an unsupported type.
And as you can see in my PR, at least a few types were missing that you
didn't add in your patch.
Do you have a better solution for this?
I just thought about this potential solution: perhaps if we get an
unsupported type, we could add the builtin to an array instead of the
hashmap: this way, we could tell the user that this builtin is not
currently supported.
What are your thoughts on this?
Thanks.
Le 2025-01-22 à 08 h 38, David Malcolm a écrit :
libgccjit fails on startup on aarch64 (and probably other archs).
The issues are that
(a) within jit_langhook_init the call to
targetm.init_builtins can use types that aren't representable
via jit::recording::type, and
(b) targetm.init_builtins can call lang_hooks.decls.pushdecl, which
although a no-op for libgccjit has a gcc_unreachable.
Fixed thusly.
Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu.
Pushed to trunk as r15-7126-g27470f9a818538.
gcc/jit/ChangeLog:
* dummy-frontend.cc (tree_type_to_jit_type): For POINTER_TYPE,
bail out if the inner call to tree_type_to_jit_type fails.
Don't abort on unknown types.
(jit_langhook_pushdecl): Replace gcc_unreachable with return of
NULL_TREE.
Signed-off-by: David Malcolm <dmalc...@redhat.com>
---
gcc/jit/dummy-frontend.cc | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/gcc/jit/dummy-frontend.cc b/gcc/jit/dummy-frontend.cc
index 574851696311..1d0080d6fecb 100644
--- a/gcc/jit/dummy-frontend.cc
+++ b/gcc/jit/dummy-frontend.cc
@@ -1278,6 +1278,8 @@ recording::type* tree_type_to_jit_type (tree type)
{
tree inner_type = TREE_TYPE (type);
recording::type* element_type = tree_type_to_jit_type (inner_type);
+ if (!element_type)
+ return nullptr;
return element_type->get_pointer ();
}
else
@@ -1299,10 +1301,6 @@ recording::type* tree_type_to_jit_type (tree type)
}
}
}
-
- fprintf (stderr, "Unknown type:\n");
- debug_tree (type);
- abort ();
}
return NULL;
@@ -1372,7 +1370,7 @@ jit_langhook_global_bindings_p (void)
static tree
jit_langhook_pushdecl (tree decl ATTRIBUTE_UNUSED)
{
- gcc_unreachable ();
+ return NULL_TREE;
}
static tree