// RUN: %clang_cc1 -no-opaque-pointers %s -fno-rtti -triple=i386-pc-win32 -emit-llvm -fdump-vtable-layouts -o %t.ll > %t
// RUN: FileCheck --check-prefix=EMITS-VFTABLE %s < %t.ll
// RUN: FileCheck --check-prefix=NO-VFTABLE %s < %t.ll
// RUN: FileCheck %s < %t
;
A a;
// EMITS-VFTABLE-DAG: @"??_7A@@6B@" = linkonce_odr unnamed_addr constant { [3 x i8*] }
void
;
B b;
// EMITS-VFTABLE-DAG: @"??_7B@@6B@" = linkonce_odr unnamed_addr constant { [5 x i8*] }
void
;
void
// NO-VFTABLE-NOT: @"??_7C@@6B@"
void
;
D d;
// EMITS-VFTABLE-DAG: @"??_7D@@6B@" = linkonce_odr unnamed_addr constant { [2 x i8*] }
void
;
void
// NO-VFTABLE-NOT: @"??_7E@@6B@"
void
;
F f;
// EMITS-VFTABLE-DAG: @"??_7F@@6B@" = linkonce_odr unnamed_addr constant { [5 x i8*] }
void
;
void
// NO-VFTABLE-NOT: @"??_7G@@6B@"
void
// Test that the usual Itanium-style key method does not emit a vtable.
;
void
// NO-VFTABLE-NOT: @"??_7H@@6B@"
;
;
I i;
void
;
J j;
void
;
K k;
void
;
L l;
void
;
M m;
void
;
N n;
void
;
;
P p;
void
void
// CHECK-LABEL: VFTable for 'O' (1 entry)
// CHECK-NEXT: 0 | A *O::f()
// CHECK-LABEL: VFTable for 'O' in 'P' (1 entry)
// CHECK-NEXT: 0 | B *P::f()
;
Q q;
void
// Inherited non-virtual overloads don't participate in the ordering.
;
R r;
void
;
;
;