On Tue, May 13, 2025 at 9:21 AM Andrew Pinski <quic_apin...@quicinc.com> wrote: > > The verification added in r12-1608-g2f1686ff70b25f, was incorrect > for PAREN_EXPR, pointer types should be valid for PAREN_EXPR. > Also for PAREN_EXPR, aggregate types don't make sense (currently > they ICE much earlier in the gimplifier rather than error message) so > we should disallow them here too. > > Bootstrapped and tested on x86_64-linux-gnu.
OK. > PR middle-end/118868 > > gcc/ChangeLog: > > * tree-cfg.cc (verify_gimple_assign_unary): Allow pointers > but disallow aggregate types for PAREN_EXPR. > > gcc/testsuite/ChangeLog: > > * c-c++-common/pr118868-1.c: New test. > > Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com> > --- > gcc/testsuite/c-c++-common/pr118868-1.c | 9 +++++++++ > gcc/tree-cfg.cc | 12 +++++++++++- > 2 files changed, 20 insertions(+), 1 deletion(-) > create mode 100644 gcc/testsuite/c-c++-common/pr118868-1.c > > diff --git a/gcc/testsuite/c-c++-common/pr118868-1.c > b/gcc/testsuite/c-c++-common/pr118868-1.c > new file mode 100644 > index 00000000000..d0a9e77f7e5 > --- /dev/null > +++ b/gcc/testsuite/c-c++-common/pr118868-1.c > @@ -0,0 +1,9 @@ > +/* { dg-do compile } */ > + > +/* PR middle-end/118868 */ > + > +/* __builtin_assoc_barrier should work on pointers without any ICE */ > +void *f(void *a) > +{ > + return __builtin_assoc_barrier(a); > +} > diff --git a/gcc/tree-cfg.cc b/gcc/tree-cfg.cc > index 712bda1f8ca..346ba4ab9f5 100644 > --- a/gcc/tree-cfg.cc > +++ b/gcc/tree-cfg.cc > @@ -3870,7 +3870,6 @@ verify_gimple_assign_unary (gassign *stmt) > case NEGATE_EXPR: > case ABS_EXPR: > case BIT_NOT_EXPR: > - case PAREN_EXPR: > case CONJ_EXPR: > /* Disallow pointer and offset types for many of the unary gimple. */ > if (POINTER_TYPE_P (lhs_type) > @@ -3883,6 +3882,17 @@ verify_gimple_assign_unary (gassign *stmt) > } > break; > > + case PAREN_EXPR: > + /* Disallow non arthmetic types on PAREN_EXPR. */ > + if (AGGREGATE_TYPE_P (lhs_type)) > + { > + error ("invalid types for %qs", code_name); > + debug_generic_expr (lhs_type); > + debug_generic_expr (rhs1_type); > + return true; > + } > + break; > + > case ABSU_EXPR: > if (!ANY_INTEGRAL_TYPE_P (lhs_type) > || !TYPE_UNSIGNED (lhs_type) > -- > 2.43.0 >