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:
parent
df0a668b78
commit
2c74d5c0a0
2 changed files with 21 additions and 12 deletions
|
@ -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");
|
||||
|
|
14
gcc/testsuite/gcc.dg/bitint-70.c
Normal file
14
gcc/testsuite/gcc.dg/bitint-70.c
Normal 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;
|
||||
}
|
Loading…
Add table
Reference in a new issue