/* APPLE LOCAL file ptmf casts --bowdidge */ /* In gcc-4.0 and beyond, kexts are not permitted to cast pointer-to-member- functions into pointer-to-functions. These casts should be flagged as a hard error if -fapple-kext is an option for the compile. -fpermissive shouldn't permit this, either. This checks for OSMemberFunctionCast in the error message because the error advises developers to use that function to replace these casts. Radar 4025923, gcc-4.0 should ban kexts from doing ptmf to ptf conversions without OSMemberFunctionCast */ /* { dg-do compile { target powerpc*-apple-darwin* } } */ /* { dg-options "-S -static -fapple-kext -fpermissive -fno-exceptions" } */ typedef int(*INT_FUNC_INT)(int); class Superclass { public: /* In 3.3, this would get the foo function for the class of "this". In 4.0, it gets the foo function for Superclass. */ virtual int init(void) {_myFunc = (INT_FUNC_INT)&Superclass::foo;}; /* { dg-error "OSMemberFunctionCast" } */ INT_FUNC_INT _myFunc; virtual int foo(int i) { return 2;}; }; class Subclass : public Superclass { public: virtual int foo(int) { return 1;}; }; main(int argc, char **argv) { Superclass sup; Subclass sub; sup.init(); sup.foo(1); sub.init(); sub.foo(1); }