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