r236381 - [MS ABI] Add testcase which was missing from r236354

David Majnemer david.majnemer at gmail.com
Fri May 1 22:12:53 PDT 2015


Author: majnemer
Date: Sat May  2 00:12:53 2015
New Revision: 236381

URL: http://llvm.org/viewvc/llvm-project?rev=236381&view=rev
Log:
[MS ABI] Add testcase which was missing from r236354

This test verifies that we can detect when the inheritance paths are
ambiguous due to covariant thunks, ensuring we don't regress PR16759.

Added:
    cfe/trunk/test/CodeGenCXX/microsoft-abi-vtables-ambiguous.cpp

Added: cfe/trunk/test/CodeGenCXX/microsoft-abi-vtables-ambiguous.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/microsoft-abi-vtables-ambiguous.cpp?rev=236381&view=auto
==============================================================================
--- cfe/trunk/test/CodeGenCXX/microsoft-abi-vtables-ambiguous.cpp (added)
+++ cfe/trunk/test/CodeGenCXX/microsoft-abi-vtables-ambiguous.cpp Sat May  2 00:12:53 2015
@@ -0,0 +1,44 @@
+// RUN: %clang_cc1 %s -emit-llvm-only -triple=i386-pc-win32 -verify -DTEST1
+// RUN: %clang_cc1 %s -emit-llvm-only -triple=i386-pc-win32 -verify -DTEST2
+
+#ifdef TEST1
+struct A {
+  virtual A *foo();  // in vftable slot #0.
+  virtual A *bar();  // in vftable slot #1.
+};
+
+struct B : virtual A {
+  // appended to the A subobject's vftable in slot #2.
+  virtual B *foo(); // expected-note{{covariant thunk required by 'foo'}}
+};
+
+struct C : virtual A {
+  // appended to the A subobject's vftable in slot #2.
+  virtual C *bar(); // expected-note{{covariant thunk required by 'bar'}}
+};
+
+struct D : B, C { D(); }; // expected-error{{ambiguous vftable component}}
+D::D() {}
+#endif
+
+#ifdef TEST2
+struct A {
+  virtual A *foo(); // in vftable slot #0
+};
+
+struct B : virtual A {
+  // appended to the A subobject's vftable in slot #1.
+  virtual B *foo(); // expected-note{{covariant thunk required by 'foo'}}
+};
+
+struct C : virtual A {
+  // appended to the A subobject's vftable in slot #1.
+  virtual C *foo(); // expected-note{{covariant thunk required by 'foo'}}
+};
+
+struct D : B, C { // expected-error{{ambiguous vftable component}}
+  virtual D *foo();
+  D();
+};
+D::D() {}
+#endif





More information about the cfe-commits mailing list