Hi! Not just params, but return values as well. "Error on MMA types in function prototype"?
On Sun, Aug 09, 2020 at 10:03:35PM -0500, Peter Bergner wrote: > --- a/gcc/config/rs6000/rs6000-call.c > +++ b/gcc/config/rs6000/rs6000-call.c > @@ -6444,8 +6444,23 @@ machine_mode > rs6000_promote_function_mode (const_tree type ATTRIBUTE_UNUSED, > machine_mode mode, > int *punsignedp ATTRIBUTE_UNUSED, > - const_tree, int) > + const_tree, int for_return) > { > + static struct function *fn = NULL; > + > + /* We do not allow MMA types being used as return values. Only report > + the invalid return value usage the first time we encounter it. */ > + if (for_return > + && fn != cfun > + && (mode == POImode || mode == PXImode)) "fn" is always zero here. > + { > + fn = cfun; And what you set here is unused. So just remove fn? > + if (TYPE_CANONICAL (type) != NULL_TREE) != NULL_TREE != false != 0 (sorry sorry) > --- /dev/null > +++ b/gcc/testsuite/gcc.target/powerpc/pr96506.c > @@ -0,0 +1,61 @@ > +/* PR target/96506 */ > +/* { dg-do compile } */ > +/* { dg-require-effective-target power10_ok } */ > +/* { dg-options "-mdejagnu-cpu=power10 -O2 -w" } */ Do you need -w or could a less heavy hammer work as well? Okay for trunk (and backports after some simmering) with those things looked at. Thanks! Segher