https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108348

--- Comment #2 from Kewen Lin <linkw at gcc dot gnu.org> ---
This is a 32 bit specific issue, the function rs6000_pass_by_reference has:

  /* Allow -maltivec -mabi=no-altivec without warning.  Altivec vector
     modes only exist for GCC vector types if -maltivec.  */
  if (TARGET_32BIT && !TARGET_ALTIVEC_ABI && ALTIVEC_VECTOR_MODE (arg.mode))
    {
      if (TARGET_DEBUG_ARG)
        fprintf (stderr, "function_arg_pass_by_reference: AltiVec\n");
      return 1;
    }

It assumes that the altivec is on when we see those altivec vector modes, but
it doesn't hold with the option combination for this case. It returns true for
rs6000_pass_by_reference, then the following logic of generic code tries to
make a copy of the object and pass the address to the function being called, it
invokes store_expr for storing to the copy, then triggers ICE.

And targetm.calls.function_arg is too late to raise the errors.

Reply via email to