================
@@ -5451,10 +5451,23 @@ bool Sema::SetCtorInitializers(CXXConstructorDecl 
*Constructor, bool AnyErrors,
            NumInitializers * sizeof(CXXCtorInitializer*));
     Constructor->setCtorInitializers(baseOrMemberInitializers);
 
+    SourceLocation Location = Constructor->getLocation();
+
+    for (CXXCtorInitializer *Initializer : Info.AllToInit) {
+      FieldDecl *Field = Initializer->getAnyMember();
+      if (!Field)
+        continue;
+
+      RecordDecl *FieldRecordDecl = Field->getParent();
+      if (!FieldRecordDecl->isUnion() ||
----------------
efriedma-quic wrote:

I think this isn't quite right.  Consider:

```
template <class T> struct VSX {
  ~VSX() { static_assert(sizeof(T) != 4, ""); }
};
struct VS {
  union {
    struct {
      VSX<int> _Tail;
    };
  };
  ~VS() { }
  VS(short);
};
VS::VS(short) : _Tail() { }
```

Also consider:

```
template <class T> struct VSX {
  ~VSX() { static_assert(sizeof(T) != 4, ""); }
};
union VS {
  VSX<int> _Tail;
  ~VS() { }
  VS(short);
};
VS::VS(short) : _Tail() { }
```

https://github.com/llvm/llvm-project/pull/128866
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to