rsmith added a comment. In http://reviews.llvm.org/D17407#385208, @hintonda wrote:
> I'm probably missing something, but isn't > InitListChecker::CheckStructUnionTypes() called recursively, if indirectly? > In which case we'd want to start from the Field iterator we were given, not > the look at all the fields. No: if `CheckDesignatedInitializer` finds a top-level designator (denoting a field in the same struct for which it was called, rather than a subobject of that field), it just returns. `CheckStructUnionTypes` should never recursively re-enter the same subobject. However, you do make a good point: we *can* enter `CheckStructUnionTypes` multiple times for the same subobject, in a case like struct Q { Q(int); } struct A { Q x, y; }; struct B { A a; int k; }; B b = { .a.y = 0, 0, .a.x = 0 }; ... and we should not `CheckEmptyInitializable` in that case, nor warn that an initializer for `a.x` is missing. (But we should do so if the final initializer for `a.x` is not present.) It looks like we need to do all this checking as a separate pass after checking the initialization, even in `VerifyOnly` mode. http://reviews.llvm.org/D17407 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits