diff options
author | Ben Cheng <bccheng@google.com> | 2014-03-25 22:37:19 -0700 |
---|---|---|
committer | Ben Cheng <bccheng@google.com> | 2014-03-25 22:37:19 -0700 |
commit | 1bc5aee63eb72b341f506ad058502cd0361f0d10 (patch) | |
tree | c607e8252f3405424ff15bc2d00aa38dadbb2518 /gcc-4.9/gcc/testsuite/g++.old-deja/g++.jason/access23.C | |
parent | 283a0bf58fcf333c58a2a92c3ebbc41fb9eb1fdb (diff) | |
download | toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.gz toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.bz2 toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.zip |
Initial checkin of GCC 4.9.0 from trunk (r208799).
Change-Id: I48a3c08bb98542aa215912a75f03c0890e497dba
Diffstat (limited to 'gcc-4.9/gcc/testsuite/g++.old-deja/g++.jason/access23.C')
-rw-r--r-- | gcc-4.9/gcc/testsuite/g++.old-deja/g++.jason/access23.C | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/g++.old-deja/g++.jason/access23.C b/gcc-4.9/gcc/testsuite/g++.old-deja/g++.jason/access23.C new file mode 100644 index 000000000..ff2c8e8bc --- /dev/null +++ b/gcc-4.9/gcc/testsuite/g++.old-deja/g++.jason/access23.C @@ -0,0 +1,80 @@ +// { dg-do assemble } +// PRMS Id: 9127 +// Bug: members of anonymous unions are not access-controlled. + +#include <stdio.h> + +struct Foo { +public: + union { + long A; + void *pX; + }; + union X { + long A; + void *pX; + } PUB ; + int PUB_A; +protected: + union { + long B; // { dg-error "" } protected + void *pY; // { dg-error "" } protected + } ; + union Y { + long B; + void *pY; + } PRT; // { dg-error "" } protected + int PRT_A; // { dg-error "" } protected +private: + union { + long C; // { dg-error "" } private + void *pZ; // { dg-error "" } private + }; + union Z { + long C; + void *pZ; + } PRV; // { dg-error "" } private + int PRV_A; // { dg-error "" } private +}; + +struct Bar : public Foo { +public: + void DoSomething() { + PUB_A = 0; + Foo::A = 0; + printf("%x\n",pX); + Foo::PUB.A = 0; + printf("%x\n",PUB.pX); + B = 0; + printf("%x\n",Foo::pY); + PRT_A = 0; + PRT.B = 0; + printf("%x\n",Foo::PRT.pY); + PRV_A = 0; // { dg-error "" } + Foo::C = 0; // { dg-error "" } + printf("%x\n",pZ); // { dg-error "" } + Foo::PRV.C = 0; // { dg-error "" } + printf("%x\n",PRV.pZ); // { dg-error "" } + } +}; + +int main() +{ + Foo a; + + a.PUB_A = 0; + a.A = 0; + printf("%x\n",a.pX); + a.PRT_A = 0; // { dg-error "" } + a.B = 0; // { dg-error "" } + printf("%x\n",a.pY); // { dg-error "" } + a.PRV_A = 0; // { dg-error "" } + a.C = 0; // { dg-error "" } + printf("%x\n",a.pZ); // { dg-error "" } + a.PUB.A = 0; + printf("%x\n",a.PUB.pX); + a.PRT.B = 0; // { dg-error "" } + printf("%x\n",a.PRT.pY); // { dg-error "" } + a.PRV.C = 0; // { dg-error "" } + printf("%x\n",a.PRV.pZ); // { dg-error "" } +} |