> On Dec 16, 2017, at 9:08 AM, David Zarzycki via swift-dev > <swift-dev@swift.org> wrote: > > Hello, > > I’m trying to improve SILNode memory layout density by adopting the AST > bitfield macros. Unfortunately, multiple inheritance doesn’t seem to get > along with anonymous/unnamed unions. Here is a distillation of the problem: > > class B { > protected: > int i; > union { int j; }; > }; > > class X : public B { }; > class Y : public B { }; > > class Z : public X, public Y { > int a() { return X::i; } // works > int b() { return X::j; } // fails > }; > > Is this expected C++ behavior? I can certainly workaround this by naming the > unnamed union, but before I do, I thought that I should check here first.
This seems like a bug; anonymous unions are just supposed to inject their member names into the containing scope as if there was an ordinary member there, and the explicit scope-qualification should resolve which subobject is meant for such injected names the same it resolves them for ordinary fields. But if it's a bug in all existing clangs, it's a bug we're going to have to work around. John. _______________________________________________ swift-dev mailing list swift-dev@swift.org https://lists.swift.org/mailman/listinfo/swift-dev