ipa-strub: Fix handling of _BitInt returns [PR113406]

Seems pass_ipa_strub::execute contains a copy of the expand_thunk
code I've changed for _BitInt in r14-6805 PR112941 - larger _BitInts
are aggregate_value_p even when they are is_gimple_reg_type.

2024-01-17  Jakub Jelinek  <jakub@redhat.com>

	PR middle-end/113406
	* ipa-strub.cc (pass_ipa_strub::execute): Check aggregate_value_p
	regardless of whether is_gimple_reg_type (restype) or not.

	* gcc.dg/bitint-70.c: New test.
This commit is contained in:
Jakub Jelinek 2024-01-17 13:54:44 +01:00
parent df0a668b78
commit 2c74d5c0a0
2 changed files with 21 additions and 12 deletions

View file

@ -3174,21 +3174,16 @@ pass_ipa_strub::execute (function *)
resdecl,
build_int_cst (TREE_TYPE (resdecl), 0));
}
else if (!is_gimple_reg_type (restype))
else if (aggregate_value_p (resdecl, TREE_TYPE (thunk_fndecl)))
{
if (aggregate_value_p (resdecl, TREE_TYPE (thunk_fndecl)))
{
restmp = resdecl;
restmp = resdecl;
if (VAR_P (restmp))
{
add_local_decl (cfun, restmp);
BLOCK_VARS (DECL_INITIAL (current_function_decl))
= restmp;
}
if (VAR_P (restmp))
{
add_local_decl (cfun, restmp);
BLOCK_VARS (DECL_INITIAL (current_function_decl))
= restmp;
}
else
restmp = create_tmp_var (restype, "retval");
}
else
restmp = create_tmp_reg (restype, "retval");

View file

@ -0,0 +1,14 @@
/* PR middle-end/113406 */
/* { dg-do compile { target bitint } } */
/* { dg-options "-std=c23 -fstrub=internal" } */
/* { dg-require-effective-target strub } */
#if __BITINT_MAXWIDTH__ >= 146
_BitInt(146)
#else
_BitInt(16)
#endif
foo (void)
{
return 0;
}