diff options
author | Reid Kleckner <reid@kleckner.net> | 2014-04-07 18:07:03 +0000 |
---|---|---|
committer | Reid Kleckner <reid@kleckner.net> | 2014-04-07 18:07:03 +0000 |
commit | bf94e6e14dd97a86a1ea53d782532b65cabd9d54 (patch) | |
tree | 96e22584253b3830add4e37345eb73ccfe373fbd /clang/test/CodeGenCXX | |
parent | 851dbd560236cb225cc88828c7b7534f372a9294 (diff) | |
download | bcm5719-llvm-bf94e6e14dd97a86a1ea53d782532b65cabd9d54.tar.gz bcm5719-llvm-bf94e6e14dd97a86a1ea53d782532b65cabd9d54.zip |
Mangle the vbptr offset into pointers to member functions
This can actually be non-zero if you override a function from a virtual
base and you have forced the most_general pointer to member
representation.
llvm-svn: 205727
Diffstat (limited to 'clang/test/CodeGenCXX')
-rw-r--r-- | clang/test/CodeGenCXX/mangle-ms-templates-memptrs-2.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/mangle-ms-templates-memptrs-2.cpp b/clang/test/CodeGenCXX/mangle-ms-templates-memptrs-2.cpp new file mode 100644 index 00000000000..993199acfdb --- /dev/null +++ b/clang/test/CodeGenCXX/mangle-ms-templates-memptrs-2.cpp @@ -0,0 +1,26 @@ +// RUN: %clang_cc1 -Wno-microsoft -fms-extensions -fno-rtti -std=c++11 -emit-llvm %s -o - -triple=i386-pc-win32 | FileCheck %s + +#pragma pointers_to_members(full_generality, virtual_inheritance) + +struct S { + int a, b; + void f(); + virtual void g(); +}; + +struct GeneralBase { + virtual void h(); +}; +struct MostGeneral : S, virtual GeneralBase { + virtual void h(); +}; +template <void (MostGeneral::*MP)()> +struct ClassTemplate { + ClassTemplate() {} +}; + +template struct ClassTemplate<&MostGeneral::h>; + +// Test that we mangle in the vbptr offset, which is 12 here. +// +// CHECK: define weak_odr x86_thiscallcc %struct.ClassTemplate* @"\01??0?$ClassTemplate@$J??_9MostGeneral@@$BA@AEA@M@3@@QAE@XZ" |