summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/init/vbase1.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.dg/init/vbase1.C')
-rw-r--r--gcc/testsuite/g++.dg/init/vbase1.C39
1 files changed, 39 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/init/vbase1.C b/gcc/testsuite/g++.dg/init/vbase1.C
new file mode 100644
index 000000000..bbfd58f5c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/vbase1.C
@@ -0,0 +1,39 @@
+// PR c++/50618
+// { dg-do run }
+
+struct Base
+{
+ const int text;
+ Base():text(1) {}
+ Base(int aText)
+ : text(aText) {}
+};
+struct SubA : public virtual Base
+{
+protected:
+ int x;
+public:
+ SubA(int aX)
+ : x(aX) {}
+};
+class SubB : public virtual Base
+{};
+struct Diamond : public SubA, public SubB
+{
+ Diamond(int text)
+ : Base(text), SubA(5), SubB() {}
+
+ void printText()
+ {
+ if(text != 2)
+ __builtin_abort();
+ if(x!=5)
+ __builtin_abort();
+ }
+};
+
+int main(int, char**)
+{
+ Diamond x(2);
+ x.printText();
+}