Notice that the last specified argument 'union U' has no name. when
compiled for ia64-hp-hpux11.23 with -mlp64 this ICEs because of this
bit of code in assign_parm_find_data_types
/* Set LAST_NAMED if this is last named arg before last anonymous
args. */
if (current_function_stdarg)
{
tree tem;
for (tem = TREE_CHAIN (parm); tem; tem = TREE_CHAIN (tem))
if (DECL_NAME (tem))
break;
if (tem == 0)
data->last_named = true;
}
That triggers on the float argument, not union. Naming the union
makes it trigger on the union, and compilation succeeds. This is
clearly wrong.
The comment doesn't make sense, arguments with and without names can
be freely intermixed (in C++), and should not affect the ABI. As this
is to do with varadic parameters, is this really talking about the
last typed argument before the varadic ones?