-// { dg-do run }
-
-// Copyright (C) 2001 Free Software Foundation, Inc.
-// Contributed by Nathan Sidwell 31 Jul 2001 <nathan@codesourcery.com>
-
-// Bug 3820. We were bit copying empty bases including the
-// padding. Which clobbers whatever they overlay.
-
-struct Empty {};
-
-struct Inter : Empty {};
-
-long now = 0;
-
-struct NonPod
-{
- long m;
-
- NonPod () {m = 0x12345678;}
- NonPod (long m_) {m = m_;}
- NonPod &operator= (NonPod const &src) {now = m; m = src.m; return *this;}
- NonPod (NonPod const &src) {m = src.m;}
-};
-
-struct A : Inter
-{
- A (long c) {m = c;}
-
- NonPod m;
-};
-
-struct B
-{
- Inter empty;
- NonPod m;
-
- B (long c) {m = c;}
-};
-
-struct C : NonPod, Inter
-{
- C (long c) : NonPod (c), Inter () {}
-};
-
-int main ()
-{
- A a (0x12131415);
-
- long was = a.m.m;
-
- a = 0x22232425;
-
- if (was != now)
- return 1; // we copied the empty base which clobbered a.m.m's
- // original value.
-
- A b (0x32333435);
- *(Inter *)&a = *(Inter *)&b;
-
- if (a.m.m != 0x22232425)
- return 2; // we copied padding, which clobbered a.m.m
-
- A b2 (0x32333435);
- (Inter &)b2 = Inter ();
- if (b2.m.m != 0x32333435)
- return 2; // we copied padding, which clobbered b2.m.m
-
- B c (0x12131415);
- was = c.m.m;
- c = 0x22232425;
- if (was != now)
- return 3;
-
- B d (0x32333435);
- c.empty = d.empty;
-
- if (c.m.m != 0x22232425)
- return 4;
-
- C e (0x32333435);
-
- if (e.m != 0x32333435)
- return 2; // we copied padding
-
- return 0;
-}