ahatanak marked an inline comment as done.
ahatanak added inline comments.

================
Comment at: test/SemaObjCXX/arc-0x.mm:164
+    union {
+      union { // expected-note 2 {{'S1' is implicitly deleted because variant 
field '' has a non-trivial}} expected-note 4 {{'S1' is implicitly deleted 
because field '' has a deleted}}
+        id f0; // expected-note 2 {{'' is implicitly deleted because variant 
field 'f0' is an ObjC pointer}}
----------------
The diagnostic message here should say the special function is deleted because 
the anonymous union's corresponding special function is deleted, but when 
diagnosing a deleted copy assignment operator, it says the anonymous union's 
special function is non-trivial. I'm not sure this is a bug, but I see the same 
diagnostic message when I compile the following non-ObjC code:

```
struct S0 {
  S0(const S0 &);
  S0 &operator=(const S0 &);
  int *p;
};

struct S1 {
  union {
    union { // copy assignment operator of 'S1' is implicitly deleted because 
variant field '' has a non-trivial copy assignment operator
      S0 s10;
      int b;
    };
    int c;
  };
  ~S1();
};

S1 *x0;

void testC1(S1 *a0) {
  *a0 = *x0; // error: object of type 'S1' cannot be assigned because its copy 
assignment operator is implicitly deleted
  *a0 = static_cast<S1&&>(*x0); // error: object of type 'S1' cannot be 
assigned because its copy assignment operator is implicitly deleted
}
```

It seems that this happens because the following code in 
`Sema::ShouldDeleteSpecialMember` is preventing the method declaration from 
being marked as deleted:

```
  // For an anonymous struct or union, the copy and assignment special members
  // will never be used, so skip the check. For an anonymous union declared at
  // namespace scope, the constructor and destructor are used.
  if (CSM != CXXDefaultConstructor && CSM != CXXDestructor &&
      RD->isAnonymousStructOrUnion())
    return false;
```


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D57438/new/

https://reviews.llvm.org/D57438



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to