1*67e74705SXin Li // RUN: %clang_cc1 -Wno-microsoft -fms-extensions -fno-rtti -std=c++11 -emit-llvm %s -o - -triple=i386-pc-win32 | FileCheck %s 2*67e74705SXin Li 3*67e74705SXin Li template <typename T, int (T::*)() = nullptr> 4*67e74705SXin Li struct J {}; 5*67e74705SXin Li 6*67e74705SXin Li template <typename T, int T::* = nullptr> 7*67e74705SXin Li struct K {}; 8*67e74705SXin Li 9*67e74705SXin Li struct __single_inheritance M; 10*67e74705SXin Li J<M> m; 11*67e74705SXin Li // CHECK-DAG: @"\01?m@@3U?$J@UM@@$0A@@@A" 12*67e74705SXin Li 13*67e74705SXin Li K<M> m2; 14*67e74705SXin Li // CHECK-DAG: @"\01?m2@@3U?$K@UM@@$0?0@@A" 15*67e74705SXin Li 16*67e74705SXin Li struct __multiple_inheritance N; 17*67e74705SXin Li J<N> n; 18*67e74705SXin Li // CHECK-DAG: @"\01?n@@3U?$J@UN@@$HA@@@A" 19*67e74705SXin Li 20*67e74705SXin Li K<N> n2; 21*67e74705SXin Li // CHECK-DAG: @"\01?n2@@3U?$K@UN@@$0?0@@A" 22*67e74705SXin Li 23*67e74705SXin Li struct __virtual_inheritance O; 24*67e74705SXin Li J<O> o; 25*67e74705SXin Li // CHECK-DAG: @"\01?o@@3U?$J@UO@@$IA@A@@@A" 26*67e74705SXin Li 27*67e74705SXin Li K<O> o2; 28*67e74705SXin Li // CHECK-DAG: @"\01?o2@@3U?$K@UO@@$FA@?0@@A" 29*67e74705SXin Li 30*67e74705SXin Li struct P; 31*67e74705SXin Li J<P> p; 32*67e74705SXin Li // CHECK-DAG: @"\01?p@@3U?$J@UP@@$JA@A@?0@@A" 33*67e74705SXin Li 34*67e74705SXin Li K<P> p2; 35*67e74705SXin Li // CHECK-DAG: @"\01?p2@@3U?$K@UP@@$GA@A@?0@@A" 36*67e74705SXin Li 37*67e74705SXin Li #pragma pointers_to_members(full_generality, virtual_inheritance) 38*67e74705SXin Li 39*67e74705SXin Li struct S { 40*67e74705SXin Li int a, b; 41*67e74705SXin Li void f(); 42*67e74705SXin Li virtual void g(); 43*67e74705SXin Li }; 44*67e74705SXin Li 45*67e74705SXin Li struct GeneralBase { 46*67e74705SXin Li virtual void h(); 47*67e74705SXin Li }; 48*67e74705SXin Li struct MostGeneral : S, virtual GeneralBase { 49*67e74705SXin Li virtual void h(); 50*67e74705SXin Li }; 51*67e74705SXin Li template <void (MostGeneral::*MP)()> 52*67e74705SXin Li struct ClassTemplate { ClassTemplateClassTemplate53*67e74705SXin Li ClassTemplate() {} 54*67e74705SXin Li }; 55*67e74705SXin Li 56*67e74705SXin Li template struct ClassTemplate<&MostGeneral::h>; 57*67e74705SXin Li 58*67e74705SXin Li // Test that we mangle in the vbptr offset, which is 12 here. 59*67e74705SXin Li // 60*67e74705SXin Li // CHECK: define weak_odr x86_thiscallcc %struct.ClassTemplate* @"\01??0?$ClassTemplate@$J??_9MostGeneral@@$BA@AEA@M@3@@QAE@XZ" 61