clang currently disallows fields of non-trivial types (e.g., __strong) in unions in C mode since it's not possible for the compiler to determine how the unions should be initialized, destructed, or copied.
This patch adds support for a new attribute non_trivial_union_member, which causes fields annotated with the attribute to be trivial when computing the trivialness of the containing union. This means the users are responsible for patching up the code so that the union is initialized, destructed, and copied in a functionally correct way.
rdar://problem/50591731