http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47409
--- Comment #15 from joseph at codesourcery dot com <joseph at codesourcery dot com> 2013-02-07 01:42:21 UTC --- I think the most obvious way to handle volatile and unions for C would be to follow the handling of const (set C_TYPE_FIELDS_VOLATILE in the same way as C_TYPE_FIELDS_READONLY - that is, checking for fields whose types have C_TYPE_FIELDS_VOLATILE rather than just fields that are directly volatile - and use it to determine whether the struct or union is at least in part volatile for assignment). Though for unions the best you can do might be a copying loop; without knowing the active union member you can hardly respect access sizes for individual members, even if you wanted to.