]> granicus.if.org Git - clang/commitdiff
Add yet another vtordisp test
authorTimur Iskhodzhanov <timurrrr@google.com>
Wed, 23 Apr 2014 12:46:26 +0000 (12:46 +0000)
committerTimur Iskhodzhanov <timurrrr@google.com>
Wed, 23 Apr 2014 12:46:26 +0000 (12:46 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@206974 91177308-0d34-0410-b5e6-96231b3b80d8

test/CodeGenCXX/microsoft-abi-vtables-virtual-inheritance-vtordisps.cpp

index 066c8912fd624488cbc6381dca5c48c3e790ae06..f63808a89873495e0a2b45bd4cbf98119fa633bc 100644 (file)
@@ -535,3 +535,35 @@ struct X : C, virtual B {
 
 void build_vftable(X *obj) { obj->g(); }
 }
+
+namespace pr19519 {
+// VS2013 CL miscompiles this, just make sure we don't regress.
+
+struct A {
+  virtual void f();
+  virtual void g();
+};
+
+struct B : virtual A {
+  virtual void f();
+  B();
+};
+
+struct C : virtual A {
+  virtual void g();
+};
+
+struct X : B, C {
+  X();
+
+  // CHECK-LABEL: VFTable for 'pr19519::A' in 'pr19519::B' in 'pr19519::X' (2 entries).
+  // CHECK-NEXT:   0 | void pr19519::B::f()
+  // CHECK-NEXT:       [this adjustment: vtordisp at -4, -4 non-virtual]
+  // CHECK-NEXT:   1 | void pr19519::C::g()
+  // CHECK-NEXT:       [this adjustment: vtordisp at -4, -4 non-virtual]
+
+  // MANGLING-DAG: @"\01??_7X@pr19519@@6B@" = {{.*}}@"\01?g@C@pr19519@@$4PPPPPPPM@3AEXXZ"
+};
+
+X::X() {}
+}