/* Verify that simple indirect calls are inlined even without early
   inlining..  */
/* { dg-do compile } */
/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining"  } */
/* { dg-add-options bind_pic_locally } */

extern void non_existent (const char *, int);

class String
{
private:
  const char *data;

public:
  String (const char *d) : data(d)
  {}

  int funcOne (int delim) const;
  int printStuffTwice (int delim) const;
};


int String::funcOne (int delim) const
{
  int i;
  for (i = 0; i < delim; i++)
    non_existent(data, i);

  return 1;
}

extern int global;

int docalling (int c, int (String::* f)(int delim) const)
{
  String S ("muhehehe");

  if (c > 2)
    global = 3;
  else
    global = 5;

  return (S.*f)(4);
}

int __attribute__ ((noinline,noclone)) get_input (void)
{
  return 1;
}

int main (int argc, char *argv[])
{
  int i = 0;
  while (i < 1000)
    i += docalling (get_input (), &String::funcOne);
  non_existent ("done", i);
  return 0;
}

/* { dg-final { scan-ipa-dump "String::funcOne\[^\\n\]*inline copy in int main"  "inline"  } } */
