From 9e3685d5f463193242bece7e381f467165adf66c Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Sat, 16 Jan 1999 11:34:32 -0500 Subject: [PATCH] new From-SVN: r24702 --- .../g++.old-deja/g++.other/mutable1.C | 43 +++++++++++++++++++ gcc/testsuite/g++.old-deja/g++.pt/memtemp82.C | 13 ++++++ 2 files changed, 56 insertions(+) create mode 100644 gcc/testsuite/g++.old-deja/g++.other/mutable1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/memtemp82.C 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 00000000000..3fd0c3e6b7c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/mutable1.C @@ -0,0 +1,43 @@ +// Copyright (C) 1999 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 14 Jan 1999 + +// 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; +} diff --git a/gcc/testsuite/g++.old-deja/g++.pt/memtemp82.C b/gcc/testsuite/g++.old-deja/g++.pt/memtemp82.C new file mode 100644 index 00000000000..9abd390f8b6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/memtemp82.C @@ -0,0 +1,13 @@ +// Build don't link: +// excess errors test - XFAIL *-*-* + +struct foo { + template T bar() { return staticbar( this ); } + template static T staticbar( foo* ) { return 0; } +}; + +void f() +{ + foo t; + int k = t.bar(); +} -- 2.30.2