1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm %s -o - 2651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -triple %ms_abi_triple -fno-rtti -emit-llvm %s -o - 32368b6af4a5f0c07c7b77f8900a956dce75bbf84Eric Christopher 42368b6af4a5f0c07c7b77f8900a956dce75bbf84Eric Christopherstruct A { 52368b6af4a5f0c07c7b77f8900a956dce75bbf84Eric Christopher virtual void Method() = 0; 62368b6af4a5f0c07c7b77f8900a956dce75bbf84Eric Christopher}; 72368b6af4a5f0c07c7b77f8900a956dce75bbf84Eric Christopher 82368b6af4a5f0c07c7b77f8900a956dce75bbf84Eric Christopherstruct B : public A { 92368b6af4a5f0c07c7b77f8900a956dce75bbf84Eric Christopher virtual void Method() { } 102368b6af4a5f0c07c7b77f8900a956dce75bbf84Eric Christopher}; 112368b6af4a5f0c07c7b77f8900a956dce75bbf84Eric Christopher 122368b6af4a5f0c07c7b77f8900a956dce75bbf84Eric Christophertypedef void (A::*fn_type_a)(void); 132368b6af4a5f0c07c7b77f8900a956dce75bbf84Eric Christophertypedef void (B::*fn_type_b)(void); 142368b6af4a5f0c07c7b77f8900a956dce75bbf84Eric Christopher 152368b6af4a5f0c07c7b77f8900a956dce75bbf84Eric Christopherint main(int argc, char **argv) 162368b6af4a5f0c07c7b77f8900a956dce75bbf84Eric Christopher{ 172368b6af4a5f0c07c7b77f8900a956dce75bbf84Eric Christopher fn_type_a f = reinterpret_cast<fn_type_a>(&B::Method); 182368b6af4a5f0c07c7b77f8900a956dce75bbf84Eric Christopher fn_type_b g = reinterpret_cast<fn_type_b>(f); 192368b6af4a5f0c07c7b77f8900a956dce75bbf84Eric Christopher B b; 202368b6af4a5f0c07c7b77f8900a956dce75bbf84Eric Christopher (b.*g)(); 212368b6af4a5f0c07c7b77f8900a956dce75bbf84Eric Christopher return 0; 222368b6af4a5f0c07c7b77f8900a956dce75bbf84Eric Christopher} 23