1/* { dg-do run }  */
2/* { dg-require-ifunc "" } */
3/* { dg-options "-Wno-pmf-conversions" } */
4
5#include <stdio.h>
6
7struct Klass
8{
9  virtual int magic () = 0;
10};
11
12struct Klassier : Klass
13{
14  int implementation ();
15  int magic ();
16  static void *resolver ();
17};
18
19int Klassier::implementation (void)
20{
21  printf ("'ere I am JH\n");
22  return 0;
23}
24
25void *Klassier::resolver (void)
26{
27  int (Klassier::*pmf) () = &Klassier::implementation;
28
29  return (void *)(int (*)(Klassier *))(((Klassier *)0)->*pmf);
30}
31
32int Klassier::magic (void) __attribute__ ((ifunc ("_ZN8Klassier8resolverEv")));
33
34int __attribute__ ((weak)) Foo (Klass &base)
35{
36  return base.magic ();
37}
38
39int main ()
40{
41  Klassier obj;
42
43  return Foo (obj) != 0;
44}
45