1f4a2713aSLionel Sambuc // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -O3 -o - | FileCheck %s 2*0a6a1f1dSLionel Sambuc // RUN: %clang_cc1 %s -triple=x86_64-windows-gnu -emit-llvm -o - | FileCheck %s -check-prefix MINGW64 3f4a2713aSLionel Sambuc struct A { vf1A4f4a2713aSLionel Sambuc virtual int vf1() { return 1; } vf2A5f4a2713aSLionel Sambuc virtual int vf2() { return 2; } 6f4a2713aSLionel Sambuc }; 7f4a2713aSLionel Sambuc f(A * a,int (A::* fp)())8f4a2713aSLionel Sambucint f(A* a, int (A::*fp)()) { 9f4a2713aSLionel Sambuc return (a->*fp)(); 10f4a2713aSLionel Sambuc } 11f4a2713aSLionel Sambuc 12f4a2713aSLionel Sambuc // CHECK-LABEL: define i32 @_Z2g1v() 13f4a2713aSLionel Sambuc // CHECK: ret i32 1 14*0a6a1f1dSLionel Sambuc // MINGW64-LABEL: define i32 @_Z2g1v() 15*0a6a1f1dSLionel Sambuc // MINGW64: call i32 @_Z1fP1AMS_FivE(%struct.A* %{{.*}}, { i64, i64 }* %{{.*}}) g1()16f4a2713aSLionel Sambucint g1() { 17f4a2713aSLionel Sambuc A a; 18f4a2713aSLionel Sambuc return f(&a, &A::vf1); 19f4a2713aSLionel Sambuc } 20f4a2713aSLionel Sambuc 21f4a2713aSLionel Sambuc // CHECK-LABEL: define i32 @_Z2g2v() 22f4a2713aSLionel Sambuc // CHECK: ret i32 2 23*0a6a1f1dSLionel Sambuc // MINGW64-LABEL: define i32 @_Z2g2v() 24*0a6a1f1dSLionel Sambuc // MINGW64: call i32 @_Z1fP1AMS_FivE(%struct.A* %{{.*}}, { i64, i64 }* %{{.*}}) g2()25f4a2713aSLionel Sambucint g2() { 26f4a2713aSLionel Sambuc A a; 27f4a2713aSLionel Sambuc return f(&a, &A::vf2); 28f4a2713aSLionel Sambuc } 29