Commit 2b3c0885 by Richard Guenther Committed by Richard Biener

re PR middle-end/50712 (invalid argument to gimple call)

2011-10-13  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/50712
	* ipa-split.c (split_function): Always re-gimplify parameters
	when they are not gimple vals before passing them.  Properly
	check for type compatibility.

	* gcc.target/i386/pr50712.c: New testcase.

From-SVN: r179919
parent 4c8933bc
2011-10-13 Richard Guenther <rguenther@suse.de>
PR tree-optimization/50712
* ipa-split.c (split_function): Always re-gimplify parameters
when they are not gimple vals before passing them. Properly
check for type compatibility.
2011-10-13 Tom de Vries <tom@codesourcery.com>
* function.c (gimplify_parameters): Set number of arguments of call to
......@@ -958,7 +958,6 @@ split_function (struct split_point *split_point)
tree retval = NULL, real_retval = NULL;
bool split_part_return_p = false;
gimple last_stmt = NULL;
bool conv_needed = false;
unsigned int i;
tree arg;
......@@ -1000,12 +999,8 @@ split_function (struct split_point *split_point)
else
arg = parm;
if (TYPE_MAIN_VARIANT (DECL_ARG_TYPE (parm))
!= TYPE_MAIN_VARIANT (TREE_TYPE (arg)))
{
conv_needed = true;
arg = fold_convert (DECL_ARG_TYPE (parm), arg);
}
if (!useless_type_conversion_p (DECL_ARG_TYPE (parm), TREE_TYPE (arg)))
arg = fold_convert (DECL_ARG_TYPE (parm), arg);
VEC_safe_push (tree, heap, args_to_pass, arg);
}
......@@ -1135,14 +1130,13 @@ split_function (struct split_point *split_point)
/* Produce the call statement. */
gsi = gsi_last_bb (call_bb);
if (conv_needed)
FOR_EACH_VEC_ELT (tree, args_to_pass, i, arg)
if (!is_gimple_val (arg))
{
arg = force_gimple_operand_gsi (&gsi, arg, true, NULL_TREE,
false, GSI_NEW_STMT);
VEC_replace (tree, args_to_pass, i, arg);
}
FOR_EACH_VEC_ELT (tree, args_to_pass, i, arg)
if (!is_gimple_val (arg))
{
arg = force_gimple_operand_gsi (&gsi, arg, true, NULL_TREE,
false, GSI_NEW_STMT);
VEC_replace (tree, args_to_pass, i, arg);
}
call = gimple_build_call_vec (node->decl, args_to_pass);
gimple_set_block (call, DECL_INITIAL (current_function_decl));
......
2011-10-13 Richard Guenther <rguenther@suse.de>
PR tree-optimization/50712
* gcc.target/i386/pr50712.c: New testcase.
2011-10-13 Tom de Vries <tom@codesourcery.com>
* gcc.dg/memcpy-4.c: New test.
......
/* { dg-do compile } */
/* { dg-require-effective-target ilp32 } */
/* { dg-options "-O2" } */
typedef __builtin_va_list __va_list;
typedef __va_list __gnuc_va_list;
typedef __gnuc_va_list va_list;
struct MSVCRT__iobuf { };
typedef struct MSVCRT__iobuf MSVCRT_FILE;
typedef union _printf_arg { } printf_arg;
MSVCRT_FILE MSVCRT__iob[20];
int pf_print_a (va_list *);
int __attribute__((__cdecl__))
MSVCRT_vfprintf_s(MSVCRT_FILE* file, const char *format, va_list valist)
{
if(!((file != ((void *)0))
|| (MSVCRT__invalid_parameter(((void *)0), ((void *)0),
((void *)0), 0, 0),0)))
return -1;
return pf_printf_a(&valist);
}
int __attribute__((__cdecl__))
MSVCRT_vprintf_s(const char *format, va_list valist)
{
return MSVCRT_vfprintf_s((MSVCRT__iob+1),format,valist);
}
int __attribute__((__cdecl__))
MSVCRT_fprintf_s(MSVCRT_FILE* file, const char *format, ...)
{
va_list valist;
va_start (valist, format);
return MSVCRT_vfprintf_s(file, format, valist);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment