/* 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" } } */ /* { dg-final { cleanup-ipa-dump "inline" } } */