50 lines
960 B
C
50 lines
960 B
C
/* 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;
|
|
}
|
|
|
|
int docalling (int (String::* f)(int delim) const)
|
|
{
|
|
String S ("muhehehe");
|
|
|
|
return (S.*f)(4);
|
|
}
|
|
|
|
int main (int argc, char *argv[])
|
|
{
|
|
int i = 0;
|
|
while (i < 1000)
|
|
i += docalling (&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" } } */
|