Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.dg/ext/attr-ifunc-3.C @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
/* { dg-do run } */ /* { dg-require-ifunc "" } */ /* { dg-options "-Wno-pmf-conversions" } */ #include <stdio.h> struct Klass { int a[4]; int implementation (); int magic (); typedef int Func (Klass*); static Func* resolver (); }; int Klass::implementation (void) { printf ("'ere I am JH\n"); return a[0] + a[1] + a[2] + a[3]; } Klass::Func* Klass::resolver () { /* GCC guarantees this conversion to be safe and the resulting pointer usable to call the member function using ordinary (i.e., non-member) function call syntax. */ return reinterpret_cast<Func*>(&Klass::implementation); } int Klass::magic (void) __attribute__ ((ifunc ("_ZN5Klass8resolverEv"))); int Foo (Klass &obj, int (Klass::*pmf) ()) { return (obj.*pmf) (); } int main () { Klass obj; obj.a[0] = 1; obj.a[1] = 2; obj.a[2] = 3; obj.a[3] = 4; return Foo (obj, &Klass::magic) != 10; }