HomePhabricator

[Sema][ObjC] Disallow non-trivial C struct fields in unions.

Description

[Sema][ObjC] Disallow non-trivial C struct fields in unions.

This patch fixes a bug where clang doesn’t reject union fields of
non-trivial C struct types. For example:

// This struct is non-trivial under ARC.
struct S0 {
  id x;
};

union U0 {
  struct S0 s0; // clang should reject this.
  struct S0 s1; // clang should reject this.
};

void test(union U0 a) {
  // Previously, both 'a.s0.x' and 'a.s1.x' were released in this
  // function.
}

rdar://problem/46677858

Differential Revision: https://reviews.llvm.org/D55659

Details

Committed
ahatanakFeb 7 2019, 12:21 PM
Differential Revision
D55659: [Sema][ObjC] Disallow non-trivial C struct fields in unions
Branches
Unknown
Tags
Unknown