2015-03-24 Paolo Carlini <paolo.carlini@oracle.com>
[official-gcc.git] / gcc / testsuite / g++.dg / ipa / ivinline-1.C
blobbc4dfea5cfbd4ea2c7b7a66b9e24066aa3460746
1 /* Verify that simple virtual calls are inlined even without early
2    inlining.  */
3 /* { dg-do run { target nonpic } } */
4 /* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp"  } */
6 extern "C" void abort (void);
8 class A
10 public:
11   int data;
12   virtual int foo (int i);
15 class B : public A
17 public:
18   virtual int foo (int i);
21 class C : public A
23 public:
24   virtual int foo (int i);
27 int A::foo (int i)
29   return i + 1;
32 int B::foo (int i)
34   return i + 2;
37 int C::foo (int i)
39   return i + 3;
42 int middleman (class A *obj, int i)
44   return obj->foo (i);
47 int __attribute__ ((noinline,noclone)) get_input(void)
49   return 1;
52 int main (int argc, char *argv[])
54   class B b;
55   int i;
57   for (i = 0; i < get_input (); i++)
58     if (middleman (&b, get_input ()) != 3)
59       abort ();
60   return 0;
63 /* { dg-final { scan-ipa-dump "B::foo\[^\\n\]*inline copy in int main"  "inline"  } } */
64 /* { dg-final { cleanup-ipa-dump "inline" } } */