diff options
Diffstat (limited to 'gcc/testsuite/g++.old-deja/g++.other/mutable1.C')
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.other/mutable1.C | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.old-deja/g++.other/mutable1.C b/gcc/testsuite/g++.old-deja/g++.other/mutable1.C new file mode 100644 index 000000000..0b2dd8d8e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/mutable1.C @@ -0,0 +1,44 @@ +// { dg-do run } +// Copyright (C) 1999 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 14 Jan 1999 <nathan@acm.org> + +// Make sure objects with mutable members are never placed in a read only +// section. + +// All these are POD structs, and hence do not need ctors +struct A { mutable int i; }; +struct B { A a; }; +struct C { A a[1]; }; +struct D { static A const a; }; + +// all these are static consts and hence naively suitable for a read only +// section. But they contain a mutable, so must be in a writable section. +static int const i = 0; +static A const a = {0}; +static B const b = {{0}}; +static C const c = {{{0}}}; +static A const aa[] = {{0}}; +static B const bb[] = {{{0}}}; +static C const cc[] = {{{{0}}}}; +A const D::a = {0}; + +int main() +{ + a.i = 05; + b.a.i = 05; + c.a[0].i = 05; + aa[0].i = 05; + bb[0].a.i = 05; + cc[0].a[0].i = 05; + D::a.i = 05; + + if(!a.i) return 1; + if(!b.a.i) return 1; + if(!c.a[0].i) return 1; + if(!aa[0].i) return 1; + if(!bb[0].a.i) return 1; + if(!cc[0].a[0].i) return 1; + if(!D::a.i) return 1; + + return 0; +} |