summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/opt/ptrmem6.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.dg/opt/ptrmem6.C')
-rw-r--r--gcc/testsuite/g++.dg/opt/ptrmem6.C28
1 files changed, 28 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/opt/ptrmem6.C b/gcc/testsuite/g++.dg/opt/ptrmem6.C
new file mode 100644
index 000000000..891c4ff17
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/ptrmem6.C
@@ -0,0 +1,28 @@
+// PR tree-opt/18040
+// { dg-do compile }
+// { dg-options "-O3" }
+
+int PyObject_IsTrue();
+struct object_base
+{
+ void ptr() const;
+ void ptr1() const;
+};
+struct object : public object_base
+{
+ typedef void (object::*bool_type)() const;
+ inline operator bool_type() const
+ { return PyObject_IsTrue()
+ ? &object_base::ptr : &object::ptr1; }
+};
+void f();
+void g (void)
+{
+ for (unsigned n = 0; n < 100; ++n)
+ {
+ object kv;
+ if (kv)
+ f();
+ }
+}
+