Index: cfe/trunk/test/CodeGenCXX/vtable-layout.cpp =================================================================== --- cfe/trunk/test/CodeGenCXX/vtable-layout.cpp +++ cfe/trunk/test/CodeGenCXX/vtable-layout.cpp @@ -1919,6 +1919,8 @@ virtual int i(int); virtual int i(); }; + // Force C's vtable to be generated. + int C::f() { return 1; } class D : C {}; Index: cfe/trunk/test/CodeGenCXX/vtable-linkage.cpp =================================================================== --- cfe/trunk/test/CodeGenCXX/vtable-linkage.cpp +++ cfe/trunk/test/CodeGenCXX/vtable-linkage.cpp @@ -1,6 +1,10 @@ // RUN: %clang_cc1 %s -triple=x86_64-pc-linux -emit-llvm -o %t +// RUN: %clang_cc1 %s -triple=x86_64-pc-linux -emit-llvm -std=c++03 -o %t.03 +// RUN: %clang_cc1 %s -triple=x86_64-pc-linux -emit-llvm -std=c++11 -o %t.11 // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -disable-llvm-optzns -O3 -emit-llvm -o %t.opt // RUN: FileCheck %s < %t +// RUN: FileCheck %s < %t.03 +// RUN: FileCheck %s < %t.11 // RUN: FileCheck --check-prefix=CHECK-OPT %s < %t.opt namespace { @@ -33,6 +37,11 @@ static struct : D { } e; +// Force 'e' to be constructed and therefore have a vtable defined. +void use_e() { + e.f(); +} + // The destructor is the key function. template struct E {