blob: 7e62f01653520a6525ecc2e332e8919776137f4f [file] [log] [blame]
/* Verify that the inliner makes good decisions and the example
is optimized to 3 printf()s in main(). */
// { dg-do compile }
// { dg-options "-O2 -fdump-tree-optimized" }
#include <stdio.h>
class Calculable
{
public:
virtual unsigned char calculate() const = 0;
virtual ~Calculable() {}
};
class X : public Calculable
{
public:
virtual unsigned char calculate() const { return 0; }
};
class Y : public Calculable
{
public:
virtual unsigned char calculate() const { return 3; }
};
static void print(const Calculable& c)
{
for (int i = 0; i < c.calculate(); i++)
{
printf("%d\n", c.calculate());
}
}
int main()
{
X x;
Y y;
print(x);
print(y);
return 0;
}
// { dg-final { scan-tree-dump "printf \\(\"%d\\\\n\", 3\\);" "optimized" } }
// { dg-final { scan-tree-dump "printf \\(\"%d\\\\n\", 3\\);" "optimized" } }
// { dg-final { scan-tree-dump "printf \\(\"%d\\\\n\", 3\\);" "optimized" } }
// { dg-final { cleanup-tree-dump "optimized" } }