Fwd: [PATCH] Prevent crash when expand movstr fail when movstr pattern is defined

Kito Cheng kito@0xlab.org
Fri Jan 10 16:48:00 GMT 2014


expand_movstr is work fine when we don't define movstr pattern or
always expand it successfully, however it's will crash when if movstr
expand fail since expand_insn expect always expand successfully (it's
place a gcc_unreachable() when expand fail).

this patch use maybe_expand_insn instead of expand_insn, check it done
or not and just return NULL_RTX for generate a libcall if fail to
expand movstr.

2014-01-11  Kito Cheng  <kito@0xlab.org>

        * gcc/builtins.c (expand_movstr): Check movstr expand done or fail.

diff --git a/gcc/builtins.c b/gcc/builtins.c
index e3c32a9..fca51a1 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -3239,7 +3239,8 @@ expand_movstr (tree dest, tree src, rtx target, int endp)
   create_output_operand (&ops[0], endp ? target : NULL_RTX, Pmode);
   create_fixed_operand (&ops[1], dest_mem);
   create_fixed_operand (&ops[2], src_mem);
-  expand_insn (CODE_FOR_movstr, 3, ops);
+  if (!maybe_expand_insn (CODE_FOR_movstr, 3, ops))
+    return NULL_RTX;

   if (endp && target != const0_rtx)

More information about the Gcc-patches mailing list