// RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm %s -o - | |
// RUN: %clang_cc1 -triple %ms_abi_triple -fno-rtti -emit-llvm %s -o - | |
struct A { | |
virtual void Method() = 0; | |
}; | |
struct B : public A { | |
virtual void Method() { } | |
}; | |
typedef void (A::*fn_type_a)(void); | |
typedef void (B::*fn_type_b)(void); | |
int main(int argc, char **argv) | |
{ | |
fn_type_a f = reinterpret_cast<fn_type_a>(&B::Method); | |
fn_type_b g = reinterpret_cast<fn_type_b>(f); | |
B b; | |
(b.*g)(); | |
return 0; | |
} |