diff --git a/lib/SIL/IR/SILDeclRef.cpp b/lib/SIL/IR/SILDeclRef.cpp index 0af0f064e60a2..6989994303775 100644 --- a/lib/SIL/IR/SILDeclRef.cpp +++ b/lib/SIL/IR/SILDeclRef.cpp @@ -814,7 +814,12 @@ bool SILDeclRef::requiresNewVTableEntry() const { if (derivativeFunctionIdentifier) if (derivativeFunctionRequiresNewVTableEntry(*this)) return true; - if (cast(getDecl())->needsNewVTableEntry()) + if (!hasDecl()) + return false; + auto fnDecl = dyn_cast(getDecl()); + if (!fnDecl) + return false; + if (fnDecl->needsNewVTableEntry()) return true; return false; } diff --git a/lib/SIL/Verifier/SILVerifier.cpp b/lib/SIL/Verifier/SILVerifier.cpp index 9ff86c7a2b419..63d0f0c4cfb21 100644 --- a/lib/SIL/Verifier/SILVerifier.cpp +++ b/lib/SIL/Verifier/SILVerifier.cpp @@ -5360,8 +5360,22 @@ void SILProperty::verify(const SILModule &M) const { void SILVTable::verify(const SILModule &M) const { if (!verificationEnabled(M)) return; - - for (auto &entry : getEntries()) { + + // Compare against the base class vtable if there is one. + const SILVTable *superVTable = nullptr; + auto superclass = getClass()->getSuperclassDecl(); + if (superclass) { + for (auto &vt : M.getVTables()) { + if (vt.getClass() == superclass) { + superVTable = &vt; + break; + } + } + } + + for (unsigned i : indices(getEntries())) { + auto &entry = getEntries()[i]; + // All vtable entries must be decls in a class context. assert(entry.Method.hasDecl() && "vtable entry is not a decl"); auto baseInfo = @@ -5403,6 +5417,55 @@ void SILVTable::verify(const SILModule &M) const { "vtable entry for " + baseName + " must be ABI-compatible", *entry.Implementation); } + + // Validate the entry against its superclass vtable. + if (!superclass) { + // Root methods should not have inherited or overridden entries. + bool validKind; + switch (entry.TheKind) { + case Entry::Normal: + case Entry::NormalNonOverridden: + validKind = true; + break; + + case Entry::Inherited: + case Entry::Override: + validKind = false; + break; + } + assert(validKind && "vtable entry in root class must not be inherited or override"); + } else if (superVTable) { + // Validate the entry against the matching entry from the superclass + // vtable. + + const Entry *superEntry = nullptr; + for (auto &se : superVTable->getEntries()) { + if (se.Method.getOverriddenVTableEntry() == entry.Method.getOverriddenVTableEntry()) { + superEntry = &se; + break; + } + } + + switch (entry.TheKind) { + case Entry::Normal: + case Entry::NormalNonOverridden: + assert(!superEntry && "non-root vtable entry must be inherited or override"); + break; + + case Entry::Inherited: + break; + + case Entry::Override: + if (!superEntry) + break; + + // The superclass entry must not prohibit overrides. + assert(superEntry->TheKind != Entry::NormalNonOverridden + && "vtable entry overrides an entry that claims to have no overrides"); + // TODO: Check the root vtable entry for the method too. + break; + } + } } } diff --git a/lib/Sema/TypeCheckDecl.cpp b/lib/Sema/TypeCheckDecl.cpp index 0b3c87267419f..6529f0ca38818 100644 --- a/lib/Sema/TypeCheckDecl.cpp +++ b/lib/Sema/TypeCheckDecl.cpp @@ -830,6 +830,10 @@ NeedsNewVTableEntryRequest::evaluate(Evaluator &evaluator, if (!isa(dc)) return true; + // Destructors always use a fixed vtable entry. + if (isa(decl)) + return false; + assert(isa(decl) || isa(decl)); // Final members are always be called directly. diff --git a/test/SIL/Parser/basic.sil b/test/SIL/Parser/basic.sil index ccc691560c6b8..b144a203448b2 100644 --- a/test/SIL/Parser/basic.sil +++ b/test/SIL/Parser/basic.sil @@ -1688,11 +1688,22 @@ bb0: return %1 : $() } +class Foo2: Foo {} + // CHECK-LABEL: sil_vtable Foo { -// CHECK: #Foo.subscript!getter: {{.*}} : @Foo_subscript_getter -// CHECK: #Foo.subscript!setter: {{.*}} : @Foo_subscript_setter [override] +// CHECK: #Foo.subscript!getter: {{.*}} : @Foo_subscript_getter [nonoverridden] +// CHECK: #Foo.subscript!setter: {{.*}} : @Foo_subscript_setter // CHECK: } sil_vtable Foo { - #Foo.subscript!getter: @Foo_subscript_getter + #Foo.subscript!getter: @Foo_subscript_getter [nonoverridden] + #Foo.subscript!setter: @Foo_subscript_setter +} + +// CHECK-LABEL: sil_vtable Foo2 { +// CHECK: #Foo.subscript!getter: {{.*}} : @Foo_subscript_getter [inherited] +// CHECK: #Foo.subscript!setter: {{.*}} : @Foo_subscript_setter [override] +// CHECK: } +sil_vtable Foo2 { + #Foo.subscript!getter: @Foo_subscript_getter [inherited] #Foo.subscript!setter: @Foo_subscript_setter [override] } diff --git a/test/SILOptimizer/basic-callee-printer.sil b/test/SILOptimizer/basic-callee-printer.sil index 7b922899c3e6a..d4afd330fabcf 100644 --- a/test/SILOptimizer/basic-callee-printer.sil +++ b/test/SILOptimizer/basic-callee-printer.sil @@ -340,7 +340,7 @@ sil_vtable private_base { } sil_vtable private_derived { - #private_base.foo: @private_derived_foo + #private_base.foo: @private_derived_foo [override] } sil_vtable internal_base { @@ -349,8 +349,8 @@ sil_vtable internal_base { } sil_vtable internal_derived { - #internal_base.foo: @internal_derived_foo - #internal_base.bar: @internal_derived_bar + #internal_base.foo: @internal_derived_foo [override] + #internal_base.bar: @internal_derived_bar [override] } sil_vtable public_base { @@ -360,9 +360,9 @@ sil_vtable public_base { } sil_vtable public_derived { - #public_base.foo: @public_derived_foo - #public_base.bar: @public_derived_bar - #public_base.baz: @public_derived_baz + #public_base.foo: @public_derived_foo [override] + #public_base.bar: @public_derived_bar [override] + #public_base.baz: @public_derived_baz [override] } private protocol private_proto_1 { @@ -659,8 +659,8 @@ sil_vtable SomeItem { } sil_vtable SomeChildItem { - #SomeItem.init!allocator: @SomeChildItem_allocator - #SomeItem.init!initializer: @SomeChildItem_initializer + #SomeItem.init!allocator: @SomeChildItem_allocator [override] + #SomeItem.init!initializer: @SomeChildItem_initializer [override] #SomeChildItem.deinit!deallocator: @SomeChildItem_destructor } diff --git a/test/SILOptimizer/dead_func_init_method.sil b/test/SILOptimizer/dead_func_init_method.sil index 5777044b30567..41d203027d410 100644 --- a/test/SILOptimizer/dead_func_init_method.sil +++ b/test/SILOptimizer/dead_func_init_method.sil @@ -36,7 +36,7 @@ sil_vtable Base { } sil_vtable Derived { - #Base.init!allocator: @DerivedInit + #Base.init!allocator: @DerivedInit [override] } diff --git a/test/SILOptimizer/devirt_access.sil b/test/SILOptimizer/devirt_access.sil index b310d00b947a4..9efd7bc38e7e8 100644 --- a/test/SILOptimizer/devirt_access.sil +++ b/test/SILOptimizer/devirt_access.sil @@ -151,8 +151,8 @@ sil_vtable X { } sil_vtable Y { - #X.ping: @_TFC14devirt_access21X4pingfS0_FT_Si // devirt_access2.X.ping (devirt_access2.X)() -> Swift.Int - #X.init!initializer: @_TFC14devirt_access21YcfMS0_FT_S0_ // devirt_access2.Y.init (devirt_access2.Y.Type)() -> devirt_access2.Y + #X.ping: @_TFC14devirt_access21X4pingfS0_FT_Si [inherited] + #X.init!initializer: @_TFC14devirt_access21YcfMS0_FT_S0_ [override] } sil_vtable A { @@ -161,6 +161,6 @@ sil_vtable A { } sil_vtable B { - #A.ping: @_TFC14devirt_access21B4pingfS0_FT_Si // devirt_access2.B.ping (devirt_access2.B)() -> Swift.Int - #A.init!initializer: @_TFC14devirt_access21BcfMS0_FT_S0_ // devirt_access2.B.init (devirt_access2.B.Type)() -> devirt_access2.B + #A.ping: @_TFC14devirt_access21B4pingfS0_FT_Si [override] + #A.init!initializer: @_TFC14devirt_access21BcfMS0_FT_S0_ [override] } diff --git a/test/SILOptimizer/devirt_access_ownership.sil b/test/SILOptimizer/devirt_access_ownership.sil index 3d4c8a844fd73..73acc56fb2972 100644 --- a/test/SILOptimizer/devirt_access_ownership.sil +++ b/test/SILOptimizer/devirt_access_ownership.sil @@ -147,8 +147,8 @@ sil_vtable X { } sil_vtable Y { - #X.ping: @_TFC14devirt_access21X4pingfS0_FT_Si // devirt_access2.X.ping (devirt_access2.X)() -> Swift.Int - #X.init!initializer: @_TFC14devirt_access21YcfMS0_FT_S0_ // devirt_access2.Y.init (devirt_access2.Y.Type)() -> devirt_access2.Y + #X.ping: @_TFC14devirt_access21X4pingfS0_FT_Si [inherited] + #X.init!initializer: @_TFC14devirt_access21YcfMS0_FT_S0_ [override] } sil_vtable A { @@ -157,6 +157,6 @@ sil_vtable A { } sil_vtable B { - #A.ping: @_TFC14devirt_access21B4pingfS0_FT_Si // devirt_access2.B.ping (devirt_access2.B)() -> Swift.Int - #A.init!initializer: @_TFC14devirt_access21BcfMS0_FT_S0_ // devirt_access2.B.init (devirt_access2.B.Type)() -> devirt_access2.B + #A.ping: @_TFC14devirt_access21B4pingfS0_FT_Si [override] + #A.init!initializer: @_TFC14devirt_access21BcfMS0_FT_S0_ [override] } diff --git a/test/SILOptimizer/devirt_access_serialized.sil b/test/SILOptimizer/devirt_access_serialized.sil index 740c05c525065..88c787254af88 100644 --- a/test/SILOptimizer/devirt_access_serialized.sil +++ b/test/SILOptimizer/devirt_access_serialized.sil @@ -52,6 +52,6 @@ sil_vtable X { } sil_vtable Y { - #X.ping: @_TFC14devirt_access21X4pingfS0_FT_Si // devirt_access2.X.ping (devirt_access2.X)() -> Swift.Int - #X.init!initializer: @_TFC14devirt_access21YcfMS0_FT_S0_ // devirt_access2.Y.init (devirt_access2.Y.Type)() -> devirt_access2.Y + #X.ping: @_TFC14devirt_access21X4pingfS0_FT_Si [inherited] + #X.init!initializer: @_TFC14devirt_access21YcfMS0_FT_S0_ [inherited] } diff --git a/test/SILOptimizer/devirt_access_serialized_ownership.sil b/test/SILOptimizer/devirt_access_serialized_ownership.sil index 96dce13801b74..b2ecc2e1685cb 100644 --- a/test/SILOptimizer/devirt_access_serialized_ownership.sil +++ b/test/SILOptimizer/devirt_access_serialized_ownership.sil @@ -50,6 +50,6 @@ sil_vtable X { } sil_vtable Y { - #X.ping: @_TFC14devirt_access21X4pingfS0_FT_Si // devirt_access2.X.ping (devirt_access2.X)() -> Swift.Int - #X.init!initializer: @_TFC14devirt_access21YcfMS0_FT_S0_ // devirt_access2.Y.init (devirt_access2.Y.Type)() -> devirt_access2.Y + #X.ping: @_TFC14devirt_access21X4pingfS0_FT_Si [inherited] + #X.init!initializer: @_TFC14devirt_access21YcfMS0_FT_S0_ [override] } diff --git a/test/SILOptimizer/devirt_override.sil b/test/SILOptimizer/devirt_override.sil index a8f8dd307194a..1c3ed84419dbd 100644 --- a/test/SILOptimizer/devirt_override.sil +++ b/test/SILOptimizer/devirt_override.sil @@ -16,6 +16,8 @@ class MD5 : Hash { } +sil @_TFC4test4HashcfMS0_FT_S0_ : $@convention(method) (@owned Hash) -> @owned Hash + sil @_TFC4test3MD5cfMS0_FT_S0_ : $@convention(method) (@owned MD5) -> @owned MD5 { bb0(%0 : $MD5): release_value %0 : $MD5 @@ -64,14 +66,15 @@ bb0: sil_vtable Hash { #Hash.update: @_TFC9hash2_new4Hash6updatefS0_FT3MsgVs5UInt83CntSi_T_ #Hash.hash: @_TFC4test4Hash4hashfS0_FT3MsgVs5UInt8_T_ + #Hash.init!initializer: @_TFC4test4HashcfMS0_FT_S0_ } sil_vtable MD5 { // vtable should be keyed with the least-derived method, otherwise // devirtualizer will choose the wrong function ref. - #Hash.hash: @_TFC4test3MD54hashfS0_FT3MsgVs5UInt8_T_ - #MD5.init!initializer: @_TFC4test3MD5cfMS0_FT_S0_ - #Hash.update: @_TFC9hash2_new4Hash6updatefS0_FT3MsgVs5UInt83CntSi_T_ + #Hash.hash: @_TFC4test3MD54hashfS0_FT3MsgVs5UInt8_T_ [override] + #Hash.init!initializer: @_TFC4test3MD5cfMS0_FT_S0_ [override] + #Hash.update: @_TFC9hash2_new4Hash6updatefS0_FT3MsgVs5UInt83CntSi_T_ [override] } class C { @@ -127,9 +130,9 @@ sil_vtable C { } sil_vtable D { - #C.doIt: @_TFC1b1D4doItfS0_FT_T_ + #C.doIt: @_TFC1b1D4doItfS0_FT_T_ [override] } sil_vtable E { - #C.doIt: @_TFC1b1E4doItfS0_FT_T_ + #C.doIt: @_TFC1b1E4doItfS0_FT_T_ [override] } diff --git a/test/SILOptimizer/devirt_override_ownership.sil b/test/SILOptimizer/devirt_override_ownership.sil index 8b4502d1bb319..e7f4b612d3c53 100644 --- a/test/SILOptimizer/devirt_override_ownership.sil +++ b/test/SILOptimizer/devirt_override_ownership.sil @@ -70,9 +70,9 @@ sil_vtable Hash { sil_vtable MD5 { // vtable should be keyed with the least-derived method, otherwise // devirtualizer will choose the wrong function ref. - #Hash.hash: @_TFC4test3MD54hashfS0_FT3MsgVs5UInt8_T_ + #Hash.hash: @_TFC4test3MD54hashfS0_FT3MsgVs5UInt8_T_ [override] #MD5.init!initializer: @_TFC4test3MD5cfMS0_FT_S0_ - #Hash.update: @_TFC9hash2_new4Hash6updatefS0_FT3MsgVs5UInt83CntSi_T_ + #Hash.update: @_TFC9hash2_new4Hash6updatefS0_FT3MsgVs5UInt83CntSi_T_ [override] } class C { @@ -129,9 +129,9 @@ sil_vtable C { } sil_vtable D { - #C.doIt: @_TFC1b1D4doItfS0_FT_T_ + #C.doIt: @_TFC1b1D4doItfS0_FT_T_ [override] } sil_vtable E { - #C.doIt: @_TFC1b1E4doItfS0_FT_T_ + #C.doIt: @_TFC1b1E4doItfS0_FT_T_ [override] } diff --git a/test/SILOptimizer/devirt_speculative.sil b/test/SILOptimizer/devirt_speculative.sil index 5d30b50e980dc..a6aca304276be 100644 --- a/test/SILOptimizer/devirt_speculative.sil +++ b/test/SILOptimizer/devirt_speculative.sil @@ -41,8 +41,8 @@ sil_vtable Base { } sil_vtable Sub { - #Base.foo: @_TSubFooFun - #Base.exit: @Sub_exit + #Base.foo: @_TSubFooFun [override] + #Base.exit: @Sub_exit [override] } sil @test_objc_ancestry : $@convention(thin) (@guaranteed Base) -> () { @@ -97,7 +97,7 @@ sil_vtable Base2 { } sil_vtable Sub2 { - #Base2.foo: @_TSub2FooFun + #Base2.foo: @_TSub2FooFun [override] } sil @test_objc_ancestry2 : $@convention(thin) (@guaranteed Base2) -> () { diff --git a/test/SILOptimizer/devirt_try_apply.sil b/test/SILOptimizer/devirt_try_apply.sil index 9f6e0f46b9a62..acb692b403658 100644 --- a/test/SILOptimizer/devirt_try_apply.sil +++ b/test/SILOptimizer/devirt_try_apply.sil @@ -848,7 +848,7 @@ sil_vtable D1 { } sil_vtable D3 { - #D1.f1: @_TFC16devirt_try_apply2D32f1fzT_CS_1A// devirt_try_apply.D3.f1 () throws -> devirt_try_apply.A + #D1.f1: @_TFC16devirt_try_apply2D32f1fzT_CS_1A [override] // devirt_try_apply.D3.f1 () throws -> devirt_try_apply.A } @@ -856,35 +856,35 @@ sil_vtable Base { #Base.foo: @_TFC16devirt_try_apply4Base3foofS0_FzT_GSqVs5Int32_ #Base.boo1: @_TFC16devirt_try_apply4Base4boo1fS0_FzT_S0_ #Base.boo2: @_TFC16devirt_try_apply4Base4boo2fS0_FzT_GSqS0__ - #Base.deinit!deallocator: @_TFC16devirt_try_apply4BaseD #Base.init!initializer: @_TFC16devirt_try_apply4BasecfMS0_FT_S0_ + #Base.deinit!deallocator: @_TFC16devirt_try_apply4BaseD } sil_vtable Derived1 { - #Base.foo: @_TFC16devirt_try_apply8Derived13foofS0_FzT_GSqVs5Int32_ - #Base.boo1: @_TFC16devirt_try_apply8Derived14boo1fS0_FzT_S0_ - #Base.boo2: @_TFC16devirt_try_apply8Derived14boo2fS0_FzT_GSqS0__ - #Base.init!initializer: @_TFC16devirt_try_apply8Derived1cfMS0_FT_S0_ + #Base.foo: @_TFC16devirt_try_apply8Derived13foofS0_FzT_GSqVs5Int32_ [override] + #Base.boo1: @_TFC16devirt_try_apply8Derived14boo1fS0_FzT_S0_ [override] + #Base.boo2: @_TFC16devirt_try_apply8Derived14boo2fS0_FzT_GSqS0__ [override] + #Base.init!initializer: @_TFC16devirt_try_apply8Derived1cfMS0_FT_S0_ [override] #Derived1.deinit!deallocator: @_TFC16devirt_try_apply8Derived1D } sil_vtable Derived2 { - #Base.foo: @_TTVFC16devirt_try_apply8Derived23foofS0_FzT_Vs5Int32 - #Base.boo1: @_TFC16devirt_try_apply8Derived24boo1fS0_FzT_S0_ - #Base.boo2: @_TFC16devirt_try_apply8Derived24boo2fS0_FzT_S0_ - #Base.init!initializer: @_TFC16devirt_try_apply8Derived2cfMS0_FT_S0_ + #Base.foo: @_TTVFC16devirt_try_apply8Derived23foofS0_FzT_Vs5Int32 [override] + #Base.boo1: @_TFC16devirt_try_apply8Derived24boo1fS0_FzT_S0_ [override] + #Base.boo2: @_TFC16devirt_try_apply8Derived24boo2fS0_FzT_S0_ [override] + #Base.init!initializer: @_TFC16devirt_try_apply8Derived2cfMS0_FT_S0_ [override] #Derived2.deinit!deallocator: @_TFC16devirt_try_apply8Derived2D } sil_vtable CP1 { #CP1.foo: @_TFC16devirt_try_apply3CP13foofS0_FzT_Vs5Int32 - #CP1.deinit!deallocator: @_TFC16devirt_try_apply3CP1D #CP1.init!initializer: @_TFC16devirt_try_apply3CP1cfMS0_FT_S0_ + #CP1.deinit!deallocator: @_TFC16devirt_try_apply3CP1D } sil_vtable CP2 { - #CP1.foo: @_TFC16devirt_try_apply3CP23foofS0_FzT_Vs5Int32 - #CP1.init!initializer: @_TFC16devirt_try_apply3CP2cfMS0_FT_S0_ + #CP1.foo: @_TFC16devirt_try_apply3CP23foofS0_FzT_Vs5Int32 [override] + #CP1.init!initializer: @_TFC16devirt_try_apply3CP2cfMS0_FT_S0_ [override] #CP2.deinit!deallocator: @_TFC16devirt_try_apply3CP2D } diff --git a/test/SILOptimizer/devirt_try_apply_ownership.sil b/test/SILOptimizer/devirt_try_apply_ownership.sil index 8484ebf278fff..dbafa34e9d331 100644 --- a/test/SILOptimizer/devirt_try_apply_ownership.sil +++ b/test/SILOptimizer/devirt_try_apply_ownership.sil @@ -800,11 +800,11 @@ sil_vtable A { } sil_vtable D1 { - #D1.f1: @_TFC16devirt_try_apply2D12f1fzT_GSqCS_1A_// devirt_try_apply.D1.f1 () throws -> Swift.Optional + #D1.f1: @_TFC16devirt_try_apply2D12f1fzT_GSqCS_1A_ } sil_vtable D3 { - #D1.f1: @_TFC16devirt_try_apply2D32f1fzT_CS_1A// devirt_try_apply.D3.f1 () throws -> devirt_try_apply.A + #D1.f1: @_TFC16devirt_try_apply2D32f1fzT_CS_1A [override] } @@ -812,35 +812,35 @@ sil_vtable Base { #Base.foo: @_TFC16devirt_try_apply4Base3foofS0_FzT_GSqVs5Int32_ #Base.boo1: @_TFC16devirt_try_apply4Base4boo1fS0_FzT_S0_ #Base.boo2: @_TFC16devirt_try_apply4Base4boo2fS0_FzT_GSqS0__ - #Base.deinit!deallocator: @_TFC16devirt_try_apply4BaseD #Base.init!initializer: @_TFC16devirt_try_apply4BasecfMS0_FT_S0_ + #Base.deinit!deallocator: @_TFC16devirt_try_apply4BaseD } sil_vtable Derived1 { - #Base.foo: @_TFC16devirt_try_apply8Derived13foofS0_FzT_GSqVs5Int32_ - #Base.boo1: @_TFC16devirt_try_apply8Derived14boo1fS0_FzT_S0_ - #Base.boo2: @_TFC16devirt_try_apply8Derived14boo2fS0_FzT_GSqS0__ - #Base.init!initializer: @_TFC16devirt_try_apply8Derived1cfMS0_FT_S0_ + #Base.foo: @_TFC16devirt_try_apply8Derived13foofS0_FzT_GSqVs5Int32_ [override] + #Base.boo1: @_TFC16devirt_try_apply8Derived14boo1fS0_FzT_S0_ [override] + #Base.boo2: @_TFC16devirt_try_apply8Derived14boo2fS0_FzT_GSqS0__ [override] + #Base.init!initializer: @_TFC16devirt_try_apply8Derived1cfMS0_FT_S0_ [override] #Derived1.deinit!deallocator: @_TFC16devirt_try_apply8Derived1D } sil_vtable Derived2 { - #Base.foo: @_TTVFC16devirt_try_apply8Derived23foofS0_FzT_Vs5Int32 - #Base.boo1: @_TFC16devirt_try_apply8Derived24boo1fS0_FzT_S0_ - #Base.boo2: @_TFC16devirt_try_apply8Derived24boo2fS0_FzT_S0_ - #Base.init!initializer: @_TFC16devirt_try_apply8Derived2cfMS0_FT_S0_ + #Base.foo: @_TTVFC16devirt_try_apply8Derived23foofS0_FzT_Vs5Int32 [override] + #Base.boo1: @_TFC16devirt_try_apply8Derived24boo1fS0_FzT_S0_ [override] + #Base.boo2: @_TFC16devirt_try_apply8Derived24boo2fS0_FzT_S0_ [override] + #Base.init!initializer: @_TFC16devirt_try_apply8Derived2cfMS0_FT_S0_ [override] #Derived2.deinit!deallocator: @_TFC16devirt_try_apply8Derived2D } sil_vtable CP1 { #CP1.foo: @_TFC16devirt_try_apply3CP13foofS0_FzT_Vs5Int32 - #CP1.deinit!deallocator: @_TFC16devirt_try_apply3CP1D #CP1.init!initializer: @_TFC16devirt_try_apply3CP1cfMS0_FT_S0_ + #CP1.deinit!deallocator: @_TFC16devirt_try_apply3CP1D } sil_vtable CP2 { - #CP1.foo: @_TFC16devirt_try_apply3CP23foofS0_FzT_Vs5Int32 - #CP1.init!initializer: @_TFC16devirt_try_apply3CP2cfMS0_FT_S0_ + #CP1.foo: @_TFC16devirt_try_apply3CP23foofS0_FzT_Vs5Int32 [override] + #CP1.init!initializer: @_TFC16devirt_try_apply3CP2cfMS0_FT_S0_ [override] #CP2.deinit!deallocator: @_TFC16devirt_try_apply3CP2D } diff --git a/test/SILOptimizer/devirtualize.sil b/test/SILOptimizer/devirtualize.sil index 5b5aec40dc770..ea1404073dcae 100644 --- a/test/SILOptimizer/devirtualize.sil +++ b/test/SILOptimizer/devirtualize.sil @@ -152,5 +152,5 @@ sil_vtable B { } sil_vtable C { - #B.foo: @_TZFC4metaP33_7026FC13D35FB9700BACF693F51A99011B3foofMS0_FT_Si + #B.foo: @_TZFC4metaP33_7026FC13D35FB9700BACF693F51A99011B3foofMS0_FT_Si [inherited] } diff --git a/test/SILOptimizer/devirtualize2.sil b/test/SILOptimizer/devirtualize2.sil index f541edd1433f8..ccece5b436105 100644 --- a/test/SILOptimizer/devirtualize2.sil +++ b/test/SILOptimizer/devirtualize2.sil @@ -119,7 +119,7 @@ sil_vtable Bar { } sil_vtable Foo { - #Bar.ping: @_TFC4main3Foo4pingfS0_FT_T_ + #Bar.ping: @_TFC4main3Foo4pingfS0_FT_T_ [override] } diff --git a/test/SILOptimizer/devirtualize2_ownership.sil b/test/SILOptimizer/devirtualize2_ownership.sil index 72a9ced481dfb..4bec04b9738db 100644 --- a/test/SILOptimizer/devirtualize2_ownership.sil +++ b/test/SILOptimizer/devirtualize2_ownership.sil @@ -122,7 +122,7 @@ sil_vtable Bar { } sil_vtable Foo { - #Bar.ping: @_TFC4main3Foo4pingfS0_FT_T_ + #Bar.ping: @_TFC4main3Foo4pingfS0_FT_T_ [override] } diff --git a/test/SILOptimizer/devirtualize_ownership.sil b/test/SILOptimizer/devirtualize_ownership.sil index 7cbd0ed2e43a1..9003178eed2c2 100644 --- a/test/SILOptimizer/devirtualize_ownership.sil +++ b/test/SILOptimizer/devirtualize_ownership.sil @@ -153,5 +153,5 @@ sil_vtable B { } sil_vtable C { - #B.foo: @_TZFC4metaP33_7026FC13D35FB9700BACF693F51A99011B3foofMS0_FT_Si + #B.foo: @_TZFC4metaP33_7026FC13D35FB9700BACF693F51A99011B3foofMS0_FT_Si [inherited] } diff --git a/test/SILOptimizer/function_order.sil b/test/SILOptimizer/function_order.sil index a1a1aa8838027..b441f8c23ba15 100644 --- a/test/SILOptimizer/function_order.sil +++ b/test/SILOptimizer/function_order.sil @@ -280,7 +280,7 @@ sil_vtable private_base { } sil_vtable private_derived { - #private_base.foo: @private_derived_foo + #private_base.foo: @private_derived_foo [override] } sil_vtable internal_base { @@ -289,8 +289,8 @@ sil_vtable internal_base { } sil_vtable internal_derived { - #internal_base.foo: @internal_derived_foo - #internal_base.bar: @internal_derived_bar + #internal_base.foo: @internal_derived_foo [override] + #internal_base.bar: @internal_derived_bar [override] } sil_vtable public_base { @@ -300,9 +300,9 @@ sil_vtable public_base { } sil_vtable public_derived { - #public_base.foo: @public_derived_foo - #public_base.bar: @public_derived_bar - #public_base.baz: @public_derived_baz + #public_base.foo: @public_derived_foo [override] + #public_base.bar: @public_derived_bar [override] + #public_base.baz: @public_derived_baz [override] } private protocol private_proto_1 { diff --git a/test/SILOptimizer/mm_inlinecaches_multiple.sil b/test/SILOptimizer/mm_inlinecaches_multiple.sil index 434dbdac54e3f..df60e6f834f39 100644 --- a/test/SILOptimizer/mm_inlinecaches_multiple.sil +++ b/test/SILOptimizer/mm_inlinecaches_multiple.sil @@ -53,6 +53,6 @@ sil_vtable Foo { } sil_vtable Bar { - #Foo.ping: @_TFC8testcase3Foo4pingfS0_FT_T_ // testcase.Foo.ping (testcase.Foo)() -> () - #Foo.init!initializer: @_TFC8testcase3FoocfMS0_FT_S0_ // testcase.Foo.init (testcase.Foo.Type)() -> testcase.Foo + #Foo.ping: @_TFC8testcase3Foo4pingfS0_FT_T_ [inherited] + #Foo.init!initializer: @_TFC8testcase3FoocfMS0_FT_S0_ [inherited] } diff --git a/test/SILOptimizer/optimize_never.sil b/test/SILOptimizer/optimize_never.sil index f2ec719295843..2bcad7ba5011c 100644 --- a/test/SILOptimizer/optimize_never.sil +++ b/test/SILOptimizer/optimize_never.sil @@ -469,13 +469,13 @@ bb0(%0 : $Base): sil_vtable C { #C.foo: @$s14optimize_never1CC3foos5Int32VyF - #C.deinit!deallocator: @$s14optimize_never1CCfD #C.init!initializer: @$s14optimize_never1CCACycfc + #C.deinit!deallocator: @$s14optimize_never1CCfD } sil_vtable D { - #C.foo: @$s14optimize_never1DC3foos5Int32VyF - #C.init!initializer: @$s14optimize_never1DCACycfc + #C.foo: @$s14optimize_never1DC3foos5Int32VyF [override] + #C.init!initializer: @$s14optimize_never1DCACycfc [override] #D.deinit!deallocator: @$s14optimize_never1DCfD } @@ -485,12 +485,12 @@ sil_vtable Base { } sil_vtable Derived1 { - #Base.foo: @$s14optimize_never8Derived1C3foos5Int32VyF - #Base.boo: @$s14optimize_never8Derived1C3boos5Int32VyF + #Base.foo: @$s14optimize_never8Derived1C3foos5Int32VyF [override] + #Base.boo: @$s14optimize_never8Derived1C3boos5Int32VyF [override] } sil_vtable Derived2 { - #Base.foo: @$s14optimize_never8Derived2C3foos5Int32VyF - #Base.boo: @$s14optimize_never8Derived2C3boos5Int32VyF + #Base.foo: @$s14optimize_never8Derived2C3foos5Int32VyF [override] + #Base.boo: @$s14optimize_never8Derived2C3boos5Int32VyF [override] } diff --git a/test/SILOptimizer/polymorphic_inline_caches.sil b/test/SILOptimizer/polymorphic_inline_caches.sil index 86e6b2b509324..27750c07b4752 100644 --- a/test/SILOptimizer/polymorphic_inline_caches.sil +++ b/test/SILOptimizer/polymorphic_inline_caches.sil @@ -112,15 +112,15 @@ sil_vtable A { } sil_vtable B { - #A.ping: @_TFC25polymorphic_inline_caches1B4pingfS0_FBi32_Bi32_ + #A.ping: @_TFC25polymorphic_inline_caches1B4pingfS0_FBi32_Bi32_ [override] } sil_vtable C { - #A.ping: @_TFC25polymorphic_inline_caches1C4pingfS0_FBi32_Bi32_ + #A.ping: @_TFC25polymorphic_inline_caches1C4pingfS0_FBi32_Bi32_ [override] } sil_vtable D { - #A.ping: @_TFC25polymorphic_inline_caches1D4pingfS0_FBi32_Bi32_ + #A.ping: @_TFC25polymorphic_inline_caches1D4pingfS0_FBi32_Bi32_ [override] } protocol P { @@ -223,9 +223,9 @@ sil_vtable E { } sil_vtable F { - #E.foo: @_TFC5casts1F3foofS0_FT_T_ + #E.foo: @_TFC5casts1F3foofS0_FT_T_ [override] } sil_vtable G { - #E.foo: @_TFC5casts1G3foofS0_FT_T_ + #E.foo: @_TFC5casts1G3foofS0_FT_T_ [override] } diff --git a/test/SILOptimizer/sink.sil b/test/SILOptimizer/sink.sil index 56480b29be310..0774c50fdc1f8 100644 --- a/test/SILOptimizer/sink.sil +++ b/test/SILOptimizer/sink.sil @@ -244,7 +244,7 @@ sil_vtable X { } sil_vtable Y { - #X.ping: @_TFC14devirt_access21X4pingfS0_FT_Si // devirt_access2.X.ping (devirt_access2.X)() -> Swift.Int - #X.init!initializer: @_TFC14devirt_access21YcfMS0_FT_S0_ // devirt_access2.Y.init (devirt_access2.Y.Type)() -> devirt_access2.Y + #X.ping: @_TFC14devirt_access21X4pingfS0_FT_Si [inherited] + #X.init!initializer: @_TFC14devirt_access21YcfMS0_FT_S0_ [override] }