On 11/07/17 16:51, Andreas Schwab wrote:
On Jul 10 2017, Maxim Ostapenko <m.ostape...@samsung.com> wrote:

diff --git a/gcc/asan.c b/gcc/asan.c
index 95004d7..89c2731 100644
--- a/gcc/asan.c
+++ b/gcc/asan.c
@@ -1567,9 +1567,10 @@ asan_emit_allocas_unpoison (rtx top, rtx bot, rtx_insn 
*before)
    else
      start_sequence ();
    rtx ret = init_one_libfunc ("__asan_allocas_unpoison");
+  top = convert_memory_address (ptr_mode, top);
+  bot = convert_memory_address (ptr_mode, bot);
    ret = emit_library_call_value (ret, NULL_RTX, LCT_NORMAL, ptr_mode, 2, top,
-                                TYPE_MODE (pointer_sized_int_node), bot,
-                                TYPE_MODE (pointer_sized_int_node));
+                                ptr_mode, bot, ptr_mode);
There is another similar occurence:

/opt/gcc/gcc-20170711/gcc/testsuite/gcc.dg/asan/pr80168.c:7:1: internal 
compiler error: in emit_library_call_value_1, at calls.c:4555
0x701577 emit_library_call_value_1
        ../../gcc/calls.c:4554
0x7068d7 emit_library_call_value(rtx_def*, rtx_def*, libcall_type, 
machine_mode, int, ...)
        ../../gcc/calls.c:5159
0x6f2307 expand_asan_emit_allocas_unpoison
        ../../gcc/builtins.c:4978
0x6f2307 expand_builtin(tree_node*, rtx_def*, rtx_def*, machine_mode, int)
        ../../gcc/builtins.c:6787
0x81fa6f expand_expr_real_1(tree_node*, rtx_def*, machine_mode, 
expand_modifier, rtx_def**, bool)
        ../../gcc/expr.c:10841
0x716517 expand_expr
        ../../gcc/expr.h:276
0x716517 expand_call_stmt
        ../../gcc/cfgexpand.c:2664
0x716517 expand_gimple_stmt_1
        ../../gcc/cfgexpand.c:3583
0x716517 expand_gimple_stmt
        ../../gcc/cfgexpand.c:3749
0x719077 expand_gimple_basic_block
        ../../gcc/cfgexpand.c:5753
0x71dfc7 execute
        ../../gcc/cfgexpand.c:6360

Oh, I see. Does attached patch fix the issue?

-Maxim


Andreas.


gcc/ChangeLog:

2017-07-11  Maxim Ostapenko  <m.ostape...@samsung.com>

	* asan.c (asan_emit_allocas_unpoison): Use ptr_mode for arguments
	during expansion.
	* builtins.c (expand_asan_emit_allocas_unpoison): Likewise.

diff --git a/gcc/asan.c b/gcc/asan.c
index 95004d7..89c2731 100644
--- a/gcc/asan.c
+++ b/gcc/asan.c
@@ -1567,9 +1567,10 @@ asan_emit_allocas_unpoison (rtx top, rtx bot, rtx_insn *before)
   else
     start_sequence ();
   rtx ret = init_one_libfunc ("__asan_allocas_unpoison");
+  top = convert_memory_address (ptr_mode, top);
+  bot = convert_memory_address (ptr_mode, bot);
   ret = emit_library_call_value (ret, NULL_RTX, LCT_NORMAL, ptr_mode, 2, top,
-				 TYPE_MODE (pointer_sized_int_node), bot,
-				 TYPE_MODE (pointer_sized_int_node));
+				 ptr_mode, bot, ptr_mode);
 
   do_pending_stack_adjust ();
   rtx_insn *insns = get_insns ();
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 608993a..6437979 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -4976,9 +4976,7 @@ expand_asan_emit_allocas_unpoison (tree exp)
 			 EXPAND_NORMAL);
   rtx ret = init_one_libfunc ("__asan_allocas_unpoison");
   ret = emit_library_call_value (ret, NULL_RTX, LCT_NORMAL, ptr_mode, 2, top,
-				 TYPE_MODE (pointer_sized_int_node),
-				 virtual_stack_dynamic_rtx,
-				 TYPE_MODE (pointer_sized_int_node));
+				 ptr_mode, virtual_stack_dynamic_rtx, ptr_mode);
   return ret;
 }
 

Reply via email to