[swift-dev] SILNode versus C++
John McCall
rjmccall at apple.com
Sat Dec 16 12:31:48 CST 2017
> On Dec 16, 2017, at 9:08 AM, David Zarzycki via swift-dev <swift-dev at 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.
More information about the swift-dev
mailing list