1// { dg-do assemble } 2// PRMS Id: 9127 3// Bug: members of anonymous unions are not access-controlled. 4 5#include <stdio.h> 6 7struct Foo { 8public: 9 union { 10 long A; 11 void *pX; 12 }; 13 union X { 14 long A; 15 void *pX; 16 } PUB ; 17 int PUB_A; 18protected: 19 union { 20 long B; // { dg-error "" } protected 21 void *pY; // { dg-error "" } protected 22 } ; 23 union Y { 24 long B; 25 void *pY; 26 } PRT; // { dg-error "" } protected 27 int PRT_A; // { dg-error "" } protected 28private: 29 union { 30 long C; // { dg-error "" } private 31 void *pZ; // { dg-error "" } private 32 }; 33 union Z { 34 long C; 35 void *pZ; 36 } PRV; // { dg-error "" } private 37 int PRV_A; // { dg-error "" } private 38}; 39 40struct Bar : public Foo { 41public: 42 void DoSomething() { 43 PUB_A = 0; 44 Foo::A = 0; 45 printf("%x\n",pX); 46 Foo::PUB.A = 0; 47 printf("%x\n",PUB.pX); 48 B = 0; 49 printf("%x\n",Foo::pY); 50 PRT_A = 0; 51 PRT.B = 0; 52 printf("%x\n",Foo::PRT.pY); 53 PRV_A = 0; // { dg-error "" } 54 Foo::C = 0; // { dg-error "" } 55 printf("%x\n",pZ); // { dg-error "" } 56 Foo::PRV.C = 0; // { dg-error "" } 57 printf("%x\n",PRV.pZ); // { dg-error "" } 58 } 59}; 60 61int main() 62{ 63 Foo a; 64 65 a.PUB_A = 0; 66 a.A = 0; 67 printf("%x\n",a.pX); 68 a.PRT_A = 0; // { dg-error "" } 69 a.B = 0; // { dg-error "" } 70 printf("%x\n",a.pY); // { dg-error "" } 71 a.PRV_A = 0; // { dg-error "" } 72 a.C = 0; // { dg-error "" } 73 printf("%x\n",a.pZ); // { dg-error "" } 74 a.PUB.A = 0; 75 printf("%x\n",a.PUB.pX); 76 a.PRT.B = 0; // { dg-error "" } 77 printf("%x\n",a.PRT.pY); // { dg-error "" } 78 a.PRV.C = 0; // { dg-error "" } 79 printf("%x\n",a.PRV.pZ); // { dg-error "" } 80} 81