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

Bill Schmidt <wschmidt at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |rguenth at gcc dot gnu.org

--- Comment #5 from Bill Schmidt <wschmidt at gcc dot gnu.org> ---
OK, confirmed with a ppc64le->aarch64 cross.

The expression presented to force_gimple_operand is a complicated one. 
Simplified representation:

mem_ref (cond_expr (ge_expr (D.16523, 0),
                    modify_expr (iftmp.394, D.16524),
                    modify_expr (iftmp.394, X)),
         0)

where X is a very complicated compound_expr with plenty of things marked as
having side effects (as are the two modify_exprs above).  There's a reference
to __gnuc_va_list buried in there, but we never get that far with the
gimplification before we blow up.

The issue is that the gimplification code doesn't expect to see any var_decls
at this point; since we're in SSA form, it wants to see ssa_vars instead. 
However, all of D.16523, D.16524, and iftmp.394 are var_decls.  While
processing the first modify_expr, we eventually hit this assert in
gimplify_modify_expr:

  if (gimplify_ctxp->into_ssa && is_gimple_reg (*to_p))
    {
      /* We should have got an SSA name from the start.  */
      gcc_assert (TREE_CODE (*to_p) == SSA_NAME
                  || ! gimple_in_ssa_p (cfun));
    }

Reply via email to