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