[PATCH] D63753: [Sema] Instead of rejecting C unions with non-trivial fields, detect attempts to destruct/initialize/copy them.

John McCall via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Jul 10 16:18:35 PDT 2019


rjmccall added inline comments.


================
Comment at: lib/Sema/SemaExpr.cpp:6097
+      // non-trivial to copy or default-initialize.
+      checkNonTrivialCUnionInInitList(ILE);
+  }
----------------
ahatanak wrote:
> rjmccall wrote:
> > Can we extract a common function that checks the initializer expression of a non-trivial C union?  I think there are at least three separate places that do that in this patch, and it's not too hard to imagine that we might want to add more cases to the common analysis.
> Do you mean we should have something like `bool checkNonTrivialCUnionInInitList(const Expr *Init)` so that we don't have to call `dyn_cast`? If `Init` is an `InitListExpr`, the function diagnoses non-trivial C unions types and returns true, otherwise it returns false.
Well, the goal is not to eliminate a `dyn_cast`, it's to generally perform whatever checking is necessary for an initializer.  Currently all of our checking is specific to `InitListExpr`, but there might be other cases we'll want to care about, in which case we'll probably care about them in all three of these places.


Repository:
  rC Clang

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

https://reviews.llvm.org/D63753





More information about the cfe-commits mailing list