]> granicus.if.org Git - clang/commitdiff
Style fix: replace "1 entries" with "1 entry" in the vftable layout dumping code
authorTimur Iskhodzhanov <timurrrr@google.com>
Wed, 5 Mar 2014 13:54:07 +0000 (13:54 +0000)
committerTimur Iskhodzhanov <timurrrr@google.com>
Wed, 5 Mar 2014 13:54:07 +0000 (13:54 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@202978 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/VTableBuilder.cpp
test/CodeGenCXX/microsoft-abi-vtables-multiple-nonvirtual-inheritance.cpp
test/CodeGenCXX/microsoft-abi-vtables-single-inheritance.cpp
test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance-vtordisps.cpp
test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance.cpp

index e25fb38be2e9f5b4249d1a6965c292c85e953112..db305ead626a1c7697348e105bc93e42b5d7ced5 100644 (file)
@@ -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;
index 21a5fb67d80a92b5c9e5e351714cce4a66b9541e..387190125b14e428225b928088f627ad9a1b4c64 100644 (file)
@@ -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()
 };
 
index ff99f0b0728e4d5810987bb0ea884be598b6d2c8..92c9f868154d2059b753f644c262424697161993 100644 (file)
@@ -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 {
index 93494c2fd942afc86f7c5760bfd284abf8a3fe39..f0cfa1fed45ce62749d02cadd28cb177d41181ff 100644 (file)
@@ -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).
index e40606f98b1a0ee90832a350be04ff53d1be6f4b..d6f8bc8408c17654c12e58cd0e4c2d33fd3190e9 100644 (file)
@@ -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();