From 84ea983c67b3583eddba292715ef7f72e8dbd91a Mon Sep 17 00:00:00 2001 From: Timur Iskhodzhanov Date: Wed, 5 Mar 2014 13:54:07 +0000 Subject: [PATCH] Style fix: replace "1 entries" with "1 entry" in the vftable layout dumping code git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@202978 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/AST/VTableBuilder.cpp | 6 +- ...tables-multiple-nonvirtual-inheritance.cpp | 82 +++++++++---------- ...crosoft-abi-vtables-single-inheritance.cpp | 4 +- ...-vtables-virtual-inheritance-vtordisps.cpp | 2 +- ...rosoft-abi-vtables-virtual-inheritance.cpp | 56 ++++++------- 5 files changed, 76 insertions(+), 74 deletions(-) diff --git a/lib/AST/VTableBuilder.cpp b/lib/AST/VTableBuilder.cpp index e25fb38be2..db305ead62 100644 --- a/lib/AST/VTableBuilder.cpp +++ b/lib/AST/VTableBuilder.cpp @@ -3067,7 +3067,8 @@ void VFTableBuilder::dumpLayout(raw_ostream &Out) { PrintBasePath(WhichVFPtr.PathToBaseWithVPtr, Out); Out << "'"; MostDerivedClass->printQualifiedName(Out); - Out << "' (" << Components.size() << " entries).\n"; + Out << "' (" << Components.size() + << (Components.size() == 1 ? " entry" : " entries") << ").\n"; for (unsigned I = 0, E = Components.size(); I != E; ++I) { Out << llvm::format("%4d | ", I); @@ -3412,7 +3413,8 @@ void MicrosoftVTableContext::dumpMethodLocations( Out << "VFTable indices for "; Out << "'"; RD->printQualifiedName(Out); - Out << "' (" << IndicesMap.size() << " entries).\n"; + Out << "' (" << IndicesMap.size() + << (IndicesMap.size() == 1 ? " entry" : " entries") << ").\n"; CharUnits LastVFPtrOffset = CharUnits::fromQuantity(-1); uint64_t LastVBIndex = 0; diff --git a/test/CodeGenCXX/microsoft-abi-vtables-multiple-nonvirtual-inheritance.cpp b/test/CodeGenCXX/microsoft-abi-vtables-multiple-nonvirtual-inheritance.cpp index 21a5fb67d8..387190125b 100644 --- a/test/CodeGenCXX/microsoft-abi-vtables-multiple-nonvirtual-inheritance.cpp +++ b/test/CodeGenCXX/microsoft-abi-vtables-multiple-nonvirtual-inheritance.cpp @@ -48,14 +48,14 @@ struct C { namespace no_thunks { struct Test1: A, B { - // NO-THUNKS-Test1: VFTable for 'A' in 'no_thunks::Test1' (1 entries) + // NO-THUNKS-Test1: VFTable for 'A' in 'no_thunks::Test1' (1 entry) // NO-THUNKS-Test1-NEXT: 0 | void no_thunks::Test1::f() // NO-THUNKS-Test1: VFTable for 'B' in 'no_thunks::Test1' (2 entries) // NO-THUNKS-Test1-NEXT: 0 | void B::g() // NO-THUNKS-Test1-NEXT: 1 | void B::h() - // NO-THUNKS-Test1: VFTable indices for 'no_thunks::Test1' (1 entries) + // NO-THUNKS-Test1: VFTable indices for 'no_thunks::Test1' (1 entry) // NO-THUNKS-Test1-NEXT: 0 | void no_thunks::Test1::f() // MANGLING-DAG: @"\01??_7Test1@no_thunks@@6BA@@@" @@ -68,14 +68,14 @@ struct Test1: A, B { Test1 t1; struct Test2: A, B { - // NO-THUNKS-Test2: VFTable for 'A' in 'no_thunks::Test2' (1 entries) + // NO-THUNKS-Test2: VFTable for 'A' in 'no_thunks::Test2' (1 entry) // NO-THUNKS-Test2-NEXT: 0 | void A::f() // NO-THUNKS-Test2: VFTable for 'B' in 'no_thunks::Test2' (2 entries) // NO-THUNKS-Test2-NEXT: 0 | void no_thunks::Test2::g() // NO-THUNKS-Test2-NEXT: 1 | void B::h() - // NO-THUNKS-Test2: VFTable indices for 'no_thunks::Test2' (1 entries). + // NO-THUNKS-Test2: VFTable indices for 'no_thunks::Test2' (1 entry). // NO-THUNKS-Test2-NEXT: via vfptr at offset 4 // NO-THUNKS-Test2-NEXT: 0 | void no_thunks::Test2::g() @@ -95,7 +95,7 @@ struct Test3: A, B { // NO-THUNKS-Test3-NEXT: 0 | void B::g() // NO-THUNKS-Test3-NEXT: 1 | void B::h() - // NO-THUNKS-Test3: VFTable indices for 'no_thunks::Test3' (1 entries). + // NO-THUNKS-Test3: VFTable indices for 'no_thunks::Test3' (1 entry). // NO-THUNKS-Test3-NEXT: 1 | void no_thunks::Test3::i() // Only adds a new method. @@ -106,10 +106,10 @@ Test3 t3; // Only the right base has a vftable, so it's laid out before the left one! struct Test4 : Empty, A { - // NO-THUNKS-Test4: VFTable for 'A' in 'no_thunks::Test4' (1 entries) + // NO-THUNKS-Test4: VFTable for 'A' in 'no_thunks::Test4' (1 entry) // NO-THUNKS-Test4-NEXT: 0 | void no_thunks::Test4::f() - // NO-THUNKS-Test4: VFTable indices for 'no_thunks::Test4' (1 entries). + // NO-THUNKS-Test4: VFTable indices for 'no_thunks::Test4' (1 entry). // NO-THUNKS-Test4-NEXT: 0 | void no_thunks::Test4::f() // MANGLING-DAG: @"\01??_7Test4@no_thunks@@6B@" @@ -129,14 +129,14 @@ struct Test5: Test1, Test2 { // NO-THUNKS-Test5-NEXT: 0 | void B::g() // NO-THUNKS-Test5-NEXT: 1 | void B::h() - // NO-THUNKS-Test5: VFTable for 'A' in 'no_thunks::Test2' in 'no_thunks::Test5' (1 entries) + // NO-THUNKS-Test5: VFTable for 'A' in 'no_thunks::Test2' in 'no_thunks::Test5' (1 entry) // NO-THUNKS-Test5-NEXT: 0 | void A::f() // NO-THUNKS-Test5: VFTable for 'B' in 'no_thunks::Test2' in 'no_thunks::Test5' (2 entries) // NO-THUNKS-Test5-NEXT: 0 | void no_thunks::Test2::g() // NO-THUNKS-Test5-NEXT: 1 | void B::h() - // NO-THUNKS-Test5: VFTable indices for 'no_thunks::Test5' (1 entries). + // NO-THUNKS-Test5: VFTable indices for 'no_thunks::Test5' (1 entry). // NO-THUNKS-Test5-NEXT: 1 | void no_thunks::Test5::z() // MANGLING-DAG: @"\01??_7Test5@no_thunks@@6BA@@Test1@1@@" @@ -150,14 +150,14 @@ struct Test5: Test1, Test2 { Test5 t5; struct Test6: Test1 { - // NO-THUNKS-Test6: VFTable for 'A' in 'no_thunks::Test1' in 'no_thunks::Test6' (1 entries). + // NO-THUNKS-Test6: VFTable for 'A' in 'no_thunks::Test1' in 'no_thunks::Test6' (1 entry). // NO-THUNKS-Test6-NEXT: 0 | void no_thunks::Test6::f() // NO-THUNKS-Test6: VFTable for 'B' in 'no_thunks::Test1' in 'no_thunks::Test6' (2 entries). // NO-THUNKS-Test6-NEXT: 0 | void B::g() // NO-THUNKS-Test6-NEXT: 1 | void B::h() - // NO-THUNKS-Test6: VFTable indices for 'no_thunks::Test6' (1 entries). + // NO-THUNKS-Test6: VFTable indices for 'no_thunks::Test6' (1 entry). // NO-THUNKS-Test6-NEXT: 0 | void no_thunks::Test6::f() // MANGLING-DAG: @"\01??_7Test6@no_thunks@@6BA@@@" @@ -170,14 +170,14 @@ struct Test6: Test1 { Test6 t6; struct Test7: Test2 { - // NO-THUNKS-Test7: VFTable for 'A' in 'no_thunks::Test2' in 'no_thunks::Test7' (1 entries). + // NO-THUNKS-Test7: VFTable for 'A' in 'no_thunks::Test2' in 'no_thunks::Test7' (1 entry). // NO-THUNKS-Test7-NEXT: 0 | void A::f() // NO-THUNKS-Test7: VFTable for 'B' in 'no_thunks::Test2' in 'no_thunks::Test7' (2 entries). // NO-THUNKS-Test7-NEXT: 0 | void no_thunks::Test7::g() // NO-THUNKS-Test7-NEXT: 1 | void B::h() - // NO-THUNKS-Test7: VFTable indices for 'no_thunks::Test7' (1 entries). + // NO-THUNKS-Test7: VFTable indices for 'no_thunks::Test7' (1 entry). // NO-THUNKS-Test7-NEXT: via vfptr at offset 4 // NO-THUNKS-Test7-NEXT: 0 | void no_thunks::Test7::g() @@ -196,7 +196,7 @@ struct Test8: Test3 { // NO-THUNKS-Test8-NEXT: 0 | void no_thunks::Test8::g() // NO-THUNKS-Test8-NEXT: 1 | void B::h() - // NO-THUNKS-Test8: VFTable indices for 'no_thunks::Test8' (1 entries). + // NO-THUNKS-Test8: VFTable indices for 'no_thunks::Test8' (1 entry). // NO-THUNKS-Test8-NEXT: via vfptr at offset 4 // NO-THUNKS-Test8-NEXT: 0 | void no_thunks::Test8::g() @@ -220,7 +220,7 @@ struct Test9: A, D { // NO-THUNKS-Test9-NEXT: 0 | void A::f() // NO-THUNKS-Test9-NEXT: 1 | void no_thunks::D::g() - // NO-THUNKS-Test9: VFTable indices for 'no_thunks::Test9' (1 entries). + // NO-THUNKS-Test9: VFTable indices for 'no_thunks::Test9' (1 entry). // NO-THUNKS-Test9-NEXT: 1 | void no_thunks::Test9::h() // MANGLING-DAG: @"\01??_7Test9@no_thunks@@6BA@@@" @@ -240,14 +240,14 @@ struct D { struct Test1: A, D { - // PURE-VIRTUAL-Test1: VFTable for 'A' in 'pure_virtual::Test1' (1 entries) + // PURE-VIRTUAL-Test1: VFTable for 'A' in 'pure_virtual::Test1' (1 entry) // PURE-VIRTUAL-Test1-NEXT: 0 | void A::f() // PURE-VIRTUAL-Test1: VFTable for 'pure_virtual::D' in 'pure_virtual::Test1' (2 entries) // PURE-VIRTUAL-Test1-NEXT: 0 | void pure_virtual::Test1::g() // PURE-VIRTUAL-Test1-NEXT: 1 | void pure_virtual::D::h() - // PURE-VIRTUAL-Test1: VFTable indices for 'pure_virtual::Test1' (1 entries). + // PURE-VIRTUAL-Test1: VFTable indices for 'pure_virtual::Test1' (1 entry). // PURE-VIRTUAL-Test1-NEXT: via vfptr at offset 4 // PURE-VIRTUAL-Test1-NEXT: 0 | void pure_virtual::Test1::g() @@ -270,14 +270,14 @@ struct Test1 : B, C { // THIS-THUNKS-Test1-NEXT: 0 | void this_adjustment::Test1::g() // THIS-THUNKS-Test1-NEXT: 1 | void B::h() - // THIS-THUNKS-Test1: VFTable for 'C' in 'this_adjustment::Test1' (1 entries). + // THIS-THUNKS-Test1: VFTable for 'C' in 'this_adjustment::Test1' (1 entry). // THIS-THUNKS-Test1-NEXT: 0 | void this_adjustment::Test1::g() // THIS-THUNKS-Test1-NEXT: [this adjustment: -4 non-virtual] // THIS-THUNKS-Test1: Thunks for 'void this_adjustment::Test1::g()' (1 entry). // THIS-THUNKS-Test1-NEXT: 0 | [this adjustment: -4 non-virtual] - // THIS-THUNKS-Test1: VFTable indices for 'this_adjustment::Test1' (1 entries). + // THIS-THUNKS-Test1: VFTable indices for 'this_adjustment::Test1' (1 entry). // THIS-THUNKS-Test1-NEXT: 0 | void this_adjustment::Test1::g() // MANGLING-DAG: @"\01??_7Test1@this_adjustment@@6BB@@@" @@ -289,21 +289,21 @@ struct Test1 : B, C { Test1 t1; struct Test2 : A, B, C { - // THIS-THUNKS-Test2: VFTable for 'A' in 'this_adjustment::Test2' (1 entries). + // THIS-THUNKS-Test2: VFTable for 'A' in 'this_adjustment::Test2' (1 entry). // THIS-THUNKS-Test2-NEXT: 0 | void A::f() // THIS-THUNKS-Test2: VFTable for 'B' in 'this_adjustment::Test2' (2 entries). // THIS-THUNKS-Test2-NEXT: 0 | void this_adjustment::Test2::g() // THIS-THUNKS-Test2-NEXT: 1 | void B::h() - // THIS-THUNKS-Test2: VFTable for 'C' in 'this_adjustment::Test2' (1 entries). + // THIS-THUNKS-Test2: VFTable for 'C' in 'this_adjustment::Test2' (1 entry). // THIS-THUNKS-Test2-NEXT: 0 | void this_adjustment::Test2::g() // THIS-THUNKS-Test2-NEXT: [this adjustment: -4 non-virtual] // THIS-THUNKS-Test2: Thunks for 'void this_adjustment::Test2::g()' (1 entry). // THIS-THUNKS-Test2-NEXT: 0 | [this adjustment: -4 non-virtual] - // THIS-THUNKS-Test2: VFTable indices for 'this_adjustment::Test2' (1 entries). + // THIS-THUNKS-Test2: VFTable indices for 'this_adjustment::Test2' (1 entry). // THIS-THUNKS-Test2-NEXT: via vfptr at offset 4 // THIS-THUNKS-Test2-NEXT: 0 | void this_adjustment::Test2::g() @@ -318,14 +318,14 @@ Test2 t2; // Overrides methods of two bases at the same time, thus needing thunks. struct Test3: no_thunks::Test1, no_thunks::Test2 { - // THIS-THUNKS-Test3: VFTable for 'A' in 'no_thunks::Test1' in 'this_adjustment::Test3' (1 entries). + // THIS-THUNKS-Test3: VFTable for 'A' in 'no_thunks::Test1' in 'this_adjustment::Test3' (1 entry). // THIS-THUNKS-Test3-NEXT: 0 | void this_adjustment::Test3::f() // THIS-THUNKS-Test3: VFTable for 'B' in 'no_thunks::Test1' in 'this_adjustment::Test3' (2 entries). // THIS-THUNKS-Test3-NEXT: 0 | void this_adjustment::Test3::g() // THIS-THUNKS-Test3-NEXT: 1 | void B::h() - // THIS-THUNKS-Test3: VFTable for 'A' in 'no_thunks::Test2' in 'this_adjustment::Test3' (1 entries). + // THIS-THUNKS-Test3: VFTable for 'A' in 'no_thunks::Test2' in 'this_adjustment::Test3' (1 entry). // THIS-THUNKS-Test3-NEXT: 0 | void this_adjustment::Test3::f() // THIS-THUNKS-Test3-NEXT: [this adjustment: -8 non-virtual] @@ -368,14 +368,14 @@ struct Test3 : Test1, Test2 { // VDTOR-THUNKS-Test3-NEXT: 0 | vdtor::Test3::~Test3() [scalar deleting] // VDTOR-THUNKS-Test3-NEXT: 1 | void vdtor::Test1::z1() - // VDTOR-THUNKS-Test3: VFTable for 'vdtor::Test2' in 'vdtor::Test3' (1 entries). + // VDTOR-THUNKS-Test3: VFTable for 'vdtor::Test2' in 'vdtor::Test3' (1 entry). // VDTOR-THUNKS-Test3-NEXT: 0 | vdtor::Test3::~Test3() [scalar deleting] // VDTOR-THUNKS-Test3-NEXT: [this adjustment: -4 non-virtual] // VDTOR-THUNKS-Test3: Thunks for 'vdtor::Test3::~Test3()' (1 entry). // VDTOR-THUNKS-Test3-NEXT: 0 | [this adjustment: -4 non-virtual] - // VDTOR-THUNKS-Test3: VFTable indices for 'vdtor::Test3' (1 entries). + // VDTOR-THUNKS-Test3: VFTable indices for 'vdtor::Test3' (1 entry). // VDTOR-THUNKS-Test3-NEXT: 0 | vdtor::Test3::~Test3() [scalar deleting] virtual ~Test3(); }; @@ -390,17 +390,17 @@ struct Test4 { struct Test5 : Test4, Test2 { // Implicit virtual dtor here! - // VDTOR-THUNKS-Test5: VFTable for 'vdtor::Test4' in 'vdtor::Test5' (1 entries). + // VDTOR-THUNKS-Test5: VFTable for 'vdtor::Test4' in 'vdtor::Test5' (1 entry). // VDTOR-THUNKS-Test5-NEXT: 0 | void vdtor::Test4::z4() - // VDTOR-THUNKS-Test5: VFTable for 'vdtor::Test2' in 'vdtor::Test5' (1 entries). + // VDTOR-THUNKS-Test5: VFTable for 'vdtor::Test2' in 'vdtor::Test5' (1 entry). // VDTOR-THUNKS-Test5-NEXT: 0 | vdtor::Test5::~Test5() [scalar deleting] // VDTOR-THUNKS-Test5-NEXT: [this adjustment: -4 non-virtual] // VDTOR-THUNKS-Test5: Thunks for 'vdtor::Test5::~Test5()' (1 entry). // VDTOR-THUNKS-Test5-NEXT: 0 | [this adjustment: -4 non-virtual] - // VDTOR-THUNKS-Test5: VFTable indices for 'vdtor::Test5' (1 entries). + // VDTOR-THUNKS-Test5: VFTable indices for 'vdtor::Test5' (1 entry). // VDTOR-THUNKS-Test5-NEXT: -- accessible via vfptr at offset 4 -- // VDTOR-THUNKS-Test5-NEXT: 0 | vdtor::Test5::~Test5() [scalar deleting] }; @@ -410,17 +410,17 @@ Test5 t5; struct Test6 : Test4, Test2 { // Implicit virtual dtor here! - // VDTOR-THUNKS-Test6: VFTable for 'vdtor::Test4' in 'vdtor::Test6' (1 entries). + // VDTOR-THUNKS-Test6: VFTable for 'vdtor::Test4' in 'vdtor::Test6' (1 entry). // VDTOR-THUNKS-Test6-NEXT: 0 | void vdtor::Test4::z4() - // VDTOR-THUNKS-Test6: VFTable for 'vdtor::Test2' in 'vdtor::Test6' (1 entries). + // VDTOR-THUNKS-Test6: VFTable for 'vdtor::Test2' in 'vdtor::Test6' (1 entry). // VDTOR-THUNKS-Test6-NEXT: 0 | vdtor::Test6::~Test6() [scalar deleting] // VDTOR-THUNKS-Test6-NEXT: [this adjustment: -4 non-virtual] // VDTOR-THUNKS-Test6: Thunks for 'vdtor::Test6::~Test6()' (1 entry). // VDTOR-THUNKS-Test6-NEXT: 0 | [this adjustment: -4 non-virtual] - // VDTOR-THUNKS-Test6: VFTable indices for 'vdtor::Test6' (1 entries). + // VDTOR-THUNKS-Test6: VFTable indices for 'vdtor::Test6' (1 entry). // VDTOR-THUNKS-Test6-NEXT: -- accessible via vfptr at offset 4 -- // VDTOR-THUNKS-Test6-NEXT: 0 | vdtor::Test6::~Test6() [scalar deleting] }; @@ -428,17 +428,17 @@ struct Test6 : Test4, Test2 { Test6 t6; struct Test7 : Test5 { - // VDTOR-THUNKS-Test7: VFTable for 'vdtor::Test4' in 'vdtor::Test5' in 'vdtor::Test7' (1 entries). + // VDTOR-THUNKS-Test7: VFTable for 'vdtor::Test4' in 'vdtor::Test5' in 'vdtor::Test7' (1 entry). // VDTOR-THUNKS-Test7-NEXT: 0 | void vdtor::Test4::z4() - // VDTOR-THUNKS-Test7: VFTable for 'vdtor::Test2' in 'vdtor::Test5' in 'vdtor::Test7' (1 entries). + // VDTOR-THUNKS-Test7: VFTable for 'vdtor::Test2' in 'vdtor::Test5' in 'vdtor::Test7' (1 entry). // VDTOR-THUNKS-Test7-NEXT: 0 | vdtor::Test7::~Test7() [scalar deleting] // VDTOR-THUNKS-Test7-NEXT: [this adjustment: -4 non-virtual] // VDTOR-THUNKS-Test7: Thunks for 'vdtor::Test7::~Test7()' (1 entry). // VDTOR-THUNKS-Test7-NEXT: 0 | [this adjustment: -4 non-virtual] - // VDTOR-THUNKS-Test7: VFTable indices for 'vdtor::Test7' (1 entries). + // VDTOR-THUNKS-Test7: VFTable indices for 'vdtor::Test7' (1 entry). // VDTOR-THUNKS-Test7-NEXT: -- accessible via vfptr at offset 4 -- // VDTOR-THUNKS-Test7-NEXT: 0 | vdtor::Test7::~Test7() [scalar deleting] virtual ~Test7(); @@ -462,7 +462,7 @@ struct Test1 : Ret1 { // RET-THUNKS-Test1-NEXT: 1 | void return_adjustment::Ret1::z() // RET-THUNKS-Test1-NEXT: 2 | this_adjustment::Test1 *return_adjustment::Test1::foo() - // RET-THUNKS-Test1: VFTable indices for 'return_adjustment::Test1' (1 entries). + // RET-THUNKS-Test1: VFTable indices for 'return_adjustment::Test1' (1 entry). // RET-THUNKS-Test1-NEXT: 2 | this_adjustment::Test1 *return_adjustment::Test1::foo() // MANGLING-DAG: @"\01??_7Test1@return_adjustment@@6B@" @@ -483,7 +483,7 @@ struct Test2 : Test1 { // RET-THUNKS-Test2-NEXT: [return adjustment: 4 non-virtual] // RET-THUNKS-Test2-NEXT: 3 | return_adjustment::Ret2 *return_adjustment::Test2::foo() - // RET-THUNKS-Test2: VFTable indices for 'return_adjustment::Test2' (1 entries). + // RET-THUNKS-Test2: VFTable indices for 'return_adjustment::Test2' (1 entry). // RET-THUNKS-Test2-NEXT: 3 | return_adjustment::Ret2 *return_adjustment::Test2::foo() virtual Ret2* foo(); @@ -502,7 +502,7 @@ struct Test3: B, Ret1 { // RET-THUNKS-Test3-NEXT: 1 | void return_adjustment::Ret1::z() // RET-THUNKS-Test3-NEXT: 2 | this_adjustment::Test1 *return_adjustment::Test3::foo() - // RET-THUNKS-Test3: VFTable indices for 'return_adjustment::Test3' (1 entries). + // RET-THUNKS-Test3: VFTable indices for 'return_adjustment::Test3' (1 entry). // RET-THUNKS-Test3-NEXT: via vfptr at offset 4 // RET-THUNKS-Test3-NEXT: 2 | this_adjustment::Test1 *return_adjustment::Test3::foo() @@ -524,7 +524,7 @@ struct Test4 : Test3 { // RET-THUNKS-Test4-NEXT: [return adjustment: 4 non-virtual] // RET-THUNKS-Test4-NEXT: 3 | return_adjustment::Ret2 *return_adjustment::Test4::foo() - // RET-THUNKS-Test4: VFTable indices for 'return_adjustment::Test4' (1 entries). + // RET-THUNKS-Test4: VFTable indices for 'return_adjustment::Test4' (1 entry). // RET-THUNKS-Test4-NEXT: -- accessible via vfptr at offset 4 -- // RET-THUNKS-Test4-NEXT: 3 | return_adjustment::Ret2 *return_adjustment::Test4::foo() @@ -551,7 +551,7 @@ struct Test5 : Ret1, Test1 { // RET-THUNKS-Test5-NEXT: 3 | return_adjustment::Ret2 *return_adjustment::Test5::foo() // RET-THUNKS-Test5-NEXT: [this adjustment: -4 non-virtual] - // RET-THUNKS-Test5: VFTable indices for 'return_adjustment::Test5' (1 entries). + // RET-THUNKS-Test5: VFTable indices for 'return_adjustment::Test5' (1 entry). // RET-THUNKS-Test5-NEXT: 2 | return_adjustment::Ret2 *return_adjustment::Test5::foo() virtual Ret2* foo(); @@ -570,7 +570,7 @@ struct Test6 : Test1 { // RET-THUNKS-Test6-NEXT: 2 | return_adjustment::Ret3 *return_adjustment::Test6::foo() // RET-THUNKS-Test6-NEXT: 3 | return_adjustment::Ret3 *return_adjustment::Test6::foo() - // RET-THUNKS-Test6: VFTable indices for 'return_adjustment::Test6' (1 entries). + // RET-THUNKS-Test6: VFTable indices for 'return_adjustment::Test6' (1 entry). // RET-THUNKS-Test6-NEXT: 3 | return_adjustment::Ret3 *return_adjustment::Test6::foo() }; diff --git a/test/CodeGenCXX/microsoft-abi-vtables-single-inheritance.cpp b/test/CodeGenCXX/microsoft-abi-vtables-single-inheritance.cpp index ff99f0b072..92c9f86815 100644 --- a/test/CodeGenCXX/microsoft-abi-vtables-single-inheritance.cpp +++ b/test/CodeGenCXX/microsoft-abi-vtables-single-inheritance.cpp @@ -257,10 +257,10 @@ N n; struct O { virtual A *f(); }; struct P : O { virtual B *f(); }; P p; -// CHECK-O: VFTable for 'O' (1 entries) +// CHECK-O: VFTable for 'O' (1 entry) // CHECK-O-NEXT: 0 | A *O::f() -// CHECK-O: VFTable for 'O' in 'P' (1 entries) +// CHECK-O: VFTable for 'O' in 'P' (1 entry) // CHECK-O-NEXT: 0 | B *P::f() struct Q { diff --git a/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance-vtordisps.cpp b/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance-vtordisps.cpp index 93494c2fd9..f0cfa1fed4 100644 --- a/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance-vtordisps.cpp +++ b/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance-vtordisps.cpp @@ -237,7 +237,7 @@ struct F : virtual Z, virtual D { F f; struct G : virtual simple::A { - // VTABLE-EXTENDED-G: VFTable for 'extended::G' (1 entries). + // VTABLE-EXTENDED-G: VFTable for 'extended::G' (1 entry). // VTABLE-EXTENDED-G-NEXT: 0 | void extended::G::g() // VTABLE-EXTENDED-G: VFTable for 'V1' in 'simple::A' in 'extended::G' (2 entries). diff --git a/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp b/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp index e40606f98b..d6f8bc8408 100644 --- a/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp +++ b/test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp @@ -42,7 +42,7 @@ struct C: virtual A { // VTABLE-C-NEXT: 0 | void C::f() // VTABLE-C-NEXT: 1 | void A::z() - // VTABLE-C: VFTable indices for 'C' (1 entries) + // VTABLE-C: VFTable indices for 'C' (1 entry) // VTABLE-C-NEXT: vbtable index 1, vfptr at offset 0 // VTABLE-C-NEXT: 0 | void C::f() @@ -54,7 +54,7 @@ struct C: virtual A { C c; struct D: virtual A { - // VTABLE-D: VFTable for 'D' (1 entries). + // VTABLE-D: VFTable for 'D' (1 entry). // VTABLE-D-NEXT: 0 | void D::h() // VTABLE-D: VFTable for 'A' in 'D' (2 entries). @@ -101,17 +101,17 @@ Z z; namespace Test2 { struct X: virtual A, virtual B { - // TEST2: VFTable for 'Test2::X' (1 entries). + // TEST2: VFTable for 'Test2::X' (1 entry). // TEST2-NEXT: 0 | void Test2::X::h() // TEST2: VFTable for 'A' in 'Test2::X' (2 entries). // TEST2-NEXT: 0 | void A::f() // TEST2-NEXT: 1 | void A::z() - // TEST2: VFTable for 'B' in 'Test2::X' (1 entries). + // TEST2: VFTable for 'B' in 'Test2::X' (1 entry). // TEST2-NEXT: 0 | void B::g() - // TEST2: VFTable indices for 'Test2::X' (1 entries). + // TEST2: VFTable indices for 'Test2::X' (1 entry). // TEST2-NEXT: 0 | void Test2::X::h() // MANGLING-DAG: @"\01??_7X@Test2@@6B01@@" @@ -176,7 +176,7 @@ struct X : A { }; struct Y : virtual X { - // TEST5: VFTable for 'Test5::Y' (1 entries). + // TEST5: VFTable for 'Test5::Y' (1 entry). // TEST5-NEXT: 0 | void Test5::Y::h() // TEST5: VFTable for 'A' in 'Test5::X' in 'Test5::Y' (3 entries). @@ -184,7 +184,7 @@ struct Y : virtual X { // TEST5-NEXT: 1 | void A::z() // TEST5-NEXT: 2 | void Test5::X::g() - // TEST5: VFTable indices for 'Test5::Y' (1 entries). + // TEST5: VFTable indices for 'Test5::Y' (1 entry). // TEST5-NEXT: 0 | void Test5::Y::h() // MANGLING-DAG: @"\01??_7Y@Test5@@6B01@@" @@ -238,14 +238,14 @@ namespace Test8 { // This is a typical diamond inheritance with a shared 'A' vbase. struct X : D, C { - // TEST8-X: VFTable for 'D' in 'Test8::X' (1 entries). + // TEST8-X: VFTable for 'D' in 'Test8::X' (1 entry). // TEST8-X-NEXT: 0 | void D::h() // TEST8-X: VFTable for 'A' in 'D' in 'Test8::X' (2 entries). // TEST8-X-NEXT: 0 | void Test8::X::f() // TEST8-X-NEXT: 1 | void A::z() - // TEST8-X: VFTable indices for 'Test8::X' (1 entries). + // TEST8-X: VFTable indices for 'Test8::X' (1 entry). // TEST8-X-NEXT: via vbtable index 1, vfptr at offset 0 // TEST8-X-NEXT: 0 | void Test8::X::f() @@ -265,7 +265,7 @@ class Z : Y, C { // TEST8-Z-NEXT: 0 | void Test8::Z::f() // TEST8-Z-NEXT: 1 | void A::z() - // TEST8-Z: VFTable indices for 'Test8::Z' (1 entries). + // TEST8-Z: VFTable indices for 'Test8::Z' (1 entry). // TEST8-Z-NEXT: via vbtable index 1, vfptr at offset 0 // TEST8-Z-NEXT: 0 | void Test8::Z::f() virtual void f(); @@ -278,14 +278,14 @@ namespace Test9 { struct X : A { }; struct Y : virtual X { - // TEST9-Y: VFTable for 'Test9::Y' (1 entries). + // TEST9-Y: VFTable for 'Test9::Y' (1 entry). // TEST9-Y-NEXT: 0 | void Test9::Y::h() // TEST9-Y: VFTable for 'A' in 'Test9::X' in 'Test9::Y' (2 entries). // TEST9-Y-NEXT: 0 | void A::f() // TEST9-Y-NEXT: 1 | void A::z() - // TEST9-Y: VFTable indices for 'Test9::Y' (1 entries). + // TEST9-Y: VFTable indices for 'Test9::Y' (1 entry). // TEST9-Y-NEXT: 0 | void Test9::Y::h() // MANGLING-DAG: @"\01??_7Y@Test9@@6B01@@" @@ -297,14 +297,14 @@ struct Y : virtual X { Y y; struct Z : Y, virtual B { - // TEST9-Z: VFTable for 'Test9::Y' in 'Test9::Z' (1 entries). + // TEST9-Z: VFTable for 'Test9::Y' in 'Test9::Z' (1 entry). // TEST9-Z-NEXT: 0 | void Test9::Y::h() // TEST9-Z: VFTable for 'A' in 'Test9::X' in 'Test9::Y' in 'Test9::Z' (2 entries). // TEST9-Z-NEXT: 0 | void A::f() // TEST9-Z-NEXT: 1 | void A::z() - // TEST9-Z: VFTable for 'B' in 'Test9::Z' (1 entries). + // TEST9-Z: VFTable for 'B' in 'Test9::Z' (1 entry). // TEST9-Z-NEXT: 0 | void B::g() // TEST9-Z-NOT: VFTable indices for 'Test9::Z' @@ -318,17 +318,17 @@ struct Z : Y, virtual B { Z z; struct W : Z, D, virtual A, virtual B { - // TEST9-W: VFTable for 'Test9::Y' in 'Test9::Z' in 'Test9::W' (1 entries). + // TEST9-W: VFTable for 'Test9::Y' in 'Test9::Z' in 'Test9::W' (1 entry). // TEST9-W-NEXT: 0 | void Test9::Y::h() // TEST9-W: VFTable for 'A' in 'Test9::X' in 'Test9::Y' in 'Test9::Z' in 'Test9::W' (2 entries). // TEST9-W-NEXT: 0 | void A::f() // TEST9-W-NEXT: 1 | void A::z() - // TEST9-W: VFTable for 'B' in 'Test9::Z' in 'Test9::W' (1 entries). + // TEST9-W: VFTable for 'B' in 'Test9::Z' in 'Test9::W' (1 entry). // TEST9-W-NEXT: 0 | void B::g() - // TEST9-W: VFTable for 'D' in 'Test9::W' (1 entries). + // TEST9-W: VFTable for 'D' in 'Test9::W' (1 entry). // TEST9-W-NEXT: 0 | void D::h() // TEST9-W: VFTable for 'A' in 'D' in 'Test9::W' (2 entries). @@ -352,17 +352,17 @@ struct W : Z, D, virtual A, virtual B { W w; struct T : Z, D, virtual A, virtual B { - // TEST9-T: VFTable for 'Test9::Y' in 'Test9::Z' in 'Test9::T' (1 entries). + // TEST9-T: VFTable for 'Test9::Y' in 'Test9::Z' in 'Test9::T' (1 entry). // TEST9-T-NEXT: 0 | void Test9::T::h() // TEST9-T: VFTable for 'A' in 'Test9::X' in 'Test9::Y' in 'Test9::Z' in 'Test9::T' (2 entries). // TEST9-T-NEXT: 0 | void Test9::T::f() // TEST9-T-NEXT: 1 | void Test9::T::z() - // TEST9-T: VFTable for 'B' in 'Test9::Z' in 'Test9::T' (1 entries). + // TEST9-T: VFTable for 'B' in 'Test9::Z' in 'Test9::T' (1 entry). // TEST9-T-NEXT: 0 | void Test9::T::g() - // TEST9-T: VFTable for 'D' in 'Test9::T' (1 entries). + // TEST9-T: VFTable for 'D' in 'Test9::T' (1 entry). // TEST9-T-NEXT: 0 | void Test9::T::h() // TEST9-T-NEXT: [this adjustment: -8 non-virtual] @@ -412,7 +412,7 @@ struct X : virtual C, virtual A { // TEST10-NEXT: 0 | void Test10::X::f() // TEST10-NEXT: 1 | void A::z() - // TEST10: VFTable indices for 'Test10::X' (1 entries). + // TEST10: VFTable indices for 'Test10::X' (1 entry). // TEST10-NEXT: via vbtable index 1, vfptr at offset 0 // TEST10-NEXT: 0 | void Test10::X::f() virtual void f(); @@ -465,7 +465,7 @@ struct W : Z, X { }; struct U : virtual W { - // VDTORS-U: VFTable for 'vdtors::Z' in 'vdtors::W' in 'vdtors::U' (1 entries). + // VDTORS-U: VFTable for 'vdtors::Z' in 'vdtors::W' in 'vdtors::U' (1 entry). // VDTORS-U-NEXT: 0 | void vdtors::Z::z() // VDTORS-U: VFTable for 'vdtors::X' in 'vdtors::W' in 'vdtors::U' (2 entries). @@ -476,7 +476,7 @@ struct U : virtual W { // VDTORS-U: Thunks for 'vdtors::W::~W()' (1 entry). // VDTORS-U-NEXT: 0 | [this adjustment: -4 non-virtual] - // VDTORS-U: VFTable indices for 'vdtors::U' (1 entries). + // VDTORS-U: VFTable indices for 'vdtors::U' (1 entry). // VDTORS-U-NEXT: -- accessible via vbtable index 1, vfptr at offset 4 -- // VDTORS-U-NEXT: 0 | vdtors::U::~U() [scalar deleting] virtual ~U(); @@ -485,7 +485,7 @@ struct U : virtual W { U u; struct V : virtual W { - // VDTORS-V: VFTable for 'vdtors::Z' in 'vdtors::W' in 'vdtors::V' (1 entries). + // VDTORS-V: VFTable for 'vdtors::Z' in 'vdtors::W' in 'vdtors::V' (1 entry). // VDTORS-V-NEXT: 0 | void vdtors::Z::z() // VDTORS-V: VFTable for 'vdtors::X' in 'vdtors::W' in 'vdtors::V' (2 entries). @@ -496,7 +496,7 @@ struct V : virtual W { // VDTORS-V: Thunks for 'vdtors::W::~W()' (1 entry). // VDTORS-V-NEXT: 0 | [this adjustment: -4 non-virtual] - // VDTORS-V: VFTable indices for 'vdtors::V' (1 entries). + // VDTORS-V: VFTable indices for 'vdtors::V' (1 entry). // VDTORS-V-NEXT: -- accessible via vbtable index 1, vfptr at offset 4 -- // VDTORS-V-NEXT: 0 | vdtors::V::~V() [scalar deleting] }; @@ -540,7 +540,7 @@ struct W : Z { // RET-W-NEXT: [return adjustment: vbase #1, 0 non-virtual] // RET-W-NEXT: 1 | return_adjustment::X *return_adjustment::W::foo() - // RET-W: VFTable indices for 'return_adjustment::W' (1 entries). + // RET-W: VFTable indices for 'return_adjustment::W' (1 entry). // RET-W-NEXT: 1 | return_adjustment::X *return_adjustment::W::foo() virtual X* foo(); @@ -556,7 +556,7 @@ struct T : W { // RET-T-NEXT: [return adjustment: vbase #2, 0 non-virtual] // RET-T-NEXT: 2 | return_adjustment::Y *return_adjustment::T::foo() - // RET-T: VFTable indices for 'return_adjustment::T' (1 entries). + // RET-T: VFTable indices for 'return_adjustment::T' (1 entry). // RET-T-NEXT: 2 | return_adjustment::Y *return_adjustment::T::foo() virtual Y* foo(); @@ -574,7 +574,7 @@ struct V : Z { // RET-V-NEXT: [return adjustment: vbptr at offset 4, vbase #1, 0 non-virtual] // RET-V-NEXT: 1 | return_adjustment::U *return_adjustment::V::foo() - // RET-V: VFTable indices for 'return_adjustment::V' (1 entries). + // RET-V: VFTable indices for 'return_adjustment::V' (1 entry). // RET-V-NEXT: 1 | return_adjustment::U *return_adjustment::V::foo() virtual U* foo(); -- 2.40.0