/* 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);
}
  
