 
 // public class
 public class Derived1 : Base1 {
-  override func inner() { println("Derived1") }
+  override func inner() { action(2) }
   @inline(never) final override func middle() { inner() }
 }
 
 // private class
 private class Base2 {
-  @inline(never) func inner() { println("Base")}
+  @inline(never) func inner() { action(3)}
   func middle() { inner() }
   func outer() { middle() }
 }
 
 // private class
 private class Derived2 : Base2 {
-  override func inner() { println("Derived1") }
+  override func inner() { action(4) }
   @inline(never) final override func middle() { inner() }
 }
 

  return a.f()
}

println("foo(E()) = \(foo(E2()))")

class A3 { @inline(never) func f() -> Int { return 0 } }
class B3 : A3 { @inline(never) override func f() -> Int { return 1 }}


// internl class
class Base3 {
  @inline(never) func inner() { action(5)}
  @inline(never) func middle() { inner() }
// Check that call to Base3.middle can be devirtualized
// 
