https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118561

--- Comment #4 from chenglulu <chenglulu at loongson dot cn> ---
In the above test cases, target is always NULL_RTX. When an illegal built-in
call occurs, we return this NULL_RTX, but after returning, do not check whether
the returned value is NULL(eg:expr.cc +9858), which leads to ICE.
Therefore, when an illegal built-in function call occurs, returning const0_rtx
can solve the problem.

I'm not sure if this modification is correct.

diff --git a/gcc/config/loongarch/loongarch-builtins.cc
b/gcc/config/loongarch/loongarch-builtins.cc
index 92d995a916a..6dd7201e6b9 100644
--- a/gcc/config/loongarch/loongarch-builtins.cc
+++ b/gcc/config/loongarch/loongarch-builtins.cc
@@ -3036,7 +3036,7 @@ loongarch_expand_builtin (tree exp, rtx target, rtx
subtarget ATTRIBUTE_UNUSED,
     {
       error_at (EXPR_LOCATION (exp),
                "built-in function %qD is not enabled", fndecl);
-      return target;
+      return target ? target : const0_rtx;
     }

Reply via email to