https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67278
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |ice-checking Target| |x86_64-*-* Status|NEW |ASSIGNED Component|middle-end |target Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot gnu.org --- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- Ok, looks like the ABI passes V1XF in 16bytes on the stack which means this is a verifier issue (works "correctly" w/o checking). On i?86 you'll get t.c:1:1: error: vector size not an integral multiple of component size typedef long double a __attribute__((vector_size (16))); ^~~~~~~ Changing the testcase to typedef long double a __attribute__((vector_size (32))); a sum (a first, a second) { return first + second; } and thus trying to create V2XF yields t.c: In function ?sum?: t.c:5:1: internal compiler error: in type_natural_mode, at config/i386/i386.c:7890 { ^ 0x1211845 type_natural_mode /space/rguenther/src/svn/trunk3/gcc/config/i386/i386.c:7890 0x1215c87 ix86_return_in_memory /space/rguenther/src/svn/trunk3/gcc/config/i386/i386.c:9765 0xaadcc7 aggregate_value_p(tree_node const*, tree_node const*) /space/rguenther/src/svn/trunk3/gcc/function.c:2081 0xab677c allocate_struct_function(tree_node*, bool) /space/rguenther/src/svn/trunk3/gcc/function.c:4914 0x76cc78 store_parm_decls() I'm going to fix the verifier and leave the above to target maintainers. Looks like we have no way of rejecting component types by the backend here btw.