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

Reply via email to