From fa1704829dcffb01eff7339e16b758b811c88b0c Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Mon, 5 Jan 2004 10:15:07 +0000 Subject: [PATCH] re PR c++/13387 (assignment to base class corrupts subclass) PR c++/13387 * g++.dg/opt/alias3.C: New test. Co-Authored-By: Richard Sandiford From-SVN: r75427 --- gcc/testsuite/ChangeLog | 6 +++++ gcc/testsuite/g++.dg/opt/alias3.C | 45 +++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 gcc/testsuite/g++.dg/opt/alias3.C diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9b161c459b9..7e34508659c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2004-01-05 Nathan Sidwell + Richard Sandiford + + PR c++/13387 + * g++.dg/opt/alias3.C: New test. + 2004-01-04 Mark Mitchell PR c++/13157 diff --git a/gcc/testsuite/g++.dg/opt/alias3.C b/gcc/testsuite/g++.dg/opt/alias3.C new file mode 100644 index 00000000000..dc8accd4f06 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/alias3.C @@ -0,0 +1,45 @@ +// { dg-options "-O2" } + +// Contributed by Nathan Sidwell 22 Dec 2003 +// Origin: rsandifo@redhat.com + +// PR c++/13387. Alias sets were incorrect + +struct C { + C(short *p = 0, int i = 0) : ptr (p), index (i) {} + short operator*() { return ptr[index]; } + short *ptr; + int index; +}; + +C f1 (C) __attribute__ ((noinline)); +C f1 (C x) +{ + return x; +} + +void f2 (short)__attribute__ ((noinline));; +short s; + +void f2 (short s_) +{ + s = s_; +} + +C g (C x)__attribute__ ((noinline)); +C g (C x) +{ + x = f1 (x); + f2 (*x); + return x; +} + +int main () +{ + short p[2] = { 0x1234, 0x5678 }; + C x (p, 1); + + g (x); + + return s != p[1]; +} -- 2.30.2