aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/g++.dg/init/assign1.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/g++.dg/init/assign1.C')
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/init/assign1.C30
1 files changed, 30 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/init/assign1.C b/gcc-4.9/gcc/testsuite/g++.dg/init/assign1.C
new file mode 100644
index 000000000..690a48191
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/init/assign1.C
@@ -0,0 +1,30 @@
+// PR c++/13009
+// { dg-do run }
+
+struct A {
+ char a;
+};
+
+struct B: public virtual A {
+ #if 0 // this piece of code works around the problem
+ B& operator= (const B& other)
+ {
+ A::operator= (other);
+ }
+ #endif
+};
+
+struct C: public B {
+ char c;
+};
+
+int main() {
+ B b;
+ b.a = 'b';
+ C c;
+ c.a = c.c = 'c';
+
+ c.B::operator= (b);
+ if (c.a != 'b' || c.c != 'c')
+ return 1;
+}