aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/g++.dg/torture/pr60058.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/g++.dg/torture/pr60058.C')
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/torture/pr60058.C30
1 files changed, 30 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/torture/pr60058.C b/gcc-4.9/gcc/testsuite/g++.dg/torture/pr60058.C
new file mode 100644
index 000000000..1144137cb
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/torture/pr60058.C
@@ -0,0 +1,30 @@
+/* { dg-do compile } */
+/* { dg-require-visibility "" } */
+
+typedef enum {} UErrorCode;
+class A {
+public:
+ virtual A &m_fn1(A &, const A &, UErrorCode &) const;
+ void m_fn2();
+ A();
+ A(int);
+};
+class __attribute__((visibility("hidden"))) B : public A {
+public:
+ B(A &p1) : norm2(p1), set(0) {}
+ A &m_fn1(A &, const A &, UErrorCode &) const;
+ A &norm2;
+ const int &set;
+};
+
+UErrorCode a;
+A c;
+void fn1(A *p1) {
+ A b;
+ p1->m_fn1(b, 0, a).m_fn2();
+}
+
+void fn2() {
+ B d(c);
+ fn1(&d);
+}