| // C has no key function, so its primary vtable and construction vtables have | |
| // weak (vague) linkage. On a target that may duplicate vtables (Apple Mach-O) | |
| // such weak vtables are marked unnamed_addr; on other targets they are not. | |
| // RUN: %clang_cc1 %s -triple x86_64-apple-darwin10 -std=c++11 -emit-llvm -o - | FileCheck %s --check-prefix=DARWIN | |
| // RUN: %clang_cc1 %s -triple x86_64-unknown-linux-gnu -std=c++11 -emit-llvm -o - | FileCheck %s --check-prefix=LINUX | |
| struct V { virtual void f() {} virtual ~V() {} }; | |
| struct A : virtual V { virtual void a() {} }; | |
| struct B : virtual V { virtual void b() {} }; | |
| struct C : A, B { virtual void c() {} }; | |
| C *make() { return new C(); } | |
| // C's primary vtable and the construction vtables for its A and B bases are | |
| // weak, so they are marked unnamed_addr on Mach-O but not on Linux. | |
| // DARWIN-DAG: @_ZTV1C = linkonce_odr unnamed_addr constant | |
| // DARWIN-DAG: @_ZTC1C0_1A = linkonce_odr unnamed_addr constant | |
| // DARWIN-DAG: @_ZTC1C8_1B = linkonce_odr unnamed_addr constant | |
| // LINUX-DAG: @_ZTV1C = linkonce_odr constant | |
| // LINUX-DAG: @_ZTC1C0_1A = linkonce_odr constant | |
| // LINUX-DAG: @_ZTC1C8_1B = linkonce_odr constant |