https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79671
--- Comment #84 from Bernd Edlinger <bernd.edlinger at hotmail dot de> ---
I think the patch should also handle
arrays of unions like:
union BB {
unsigned char x[10];
};
struct B {
BB x[16];
};
struct A {
B b;
};
A a1, a2;
void test()
{
a1.b = a2.b;
}
compiles to:
; Function void test() (_Z4testv, funcdef_no=0, decl_uid=2384, cgraph_uid=0,
symbol_order=2)
void test() ()
{
<bb 2> [0.00%]:
a1.b = a2.b;
return;
}
while in this example
struct B {
unsigned char x[16];
};
struct A {
B b;
};
A a1, a2;
void test()
{
a1.b = a2.b;
}
compiles to:
;; Function void test() (_Z4testv, funcdef_no=0, decl_uid=2348, cgraph_uid=0,
symbol_order=2)
void test() ()
{
<bb 2> [0.00%]:
MEM[(void *)&a1] = MEM[(void *)&a2];
return;
}
which is probably unnecessary, because all valid examples
used a union with an array of unsigned char. Right?