r203691 - PR19113: Emit 'vtable' TBAA metadata when loading a vptr in a pointer-to-member-function call.

Richard Smith richard-llvm at metafoo.co.uk
Wed Mar 12 11:26:14 PDT 2014


Author: rsmith
Date: Wed Mar 12 13:26:14 2014
New Revision: 203691

URL: http://llvm.org/viewvc/llvm-project?rev=203691&view=rev
Log:
PR19113: Emit 'vtable' TBAA metadata when loading a vptr in a pointer-to-member-function call.

Modified:
    cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp
    cfe/trunk/test/CodeGen/tbaa-for-vptr.cpp

Modified: cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp?rev=203691&r1=203690&r2=203691&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp (original)
+++ cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp Wed Mar 12 13:26:14 2014
@@ -359,8 +359,7 @@ llvm::Value *ItaniumCXXABI::EmitLoadOfMe
 
   // Cast the adjusted this to a pointer to vtable pointer and load.
   llvm::Type *VTableTy = Builder.getInt8PtrTy();
-  llvm::Value *VTable = Builder.CreateBitCast(This, VTableTy->getPointerTo());
-  VTable = Builder.CreateLoad(VTable, "memptr.vtable");
+  llvm::Value *VTable = CGF.GetVTablePtr(This, VTableTy);
 
   // Apply the offset.
   llvm::Value *VTableOffset = FnAsInt;

Modified: cfe/trunk/test/CodeGen/tbaa-for-vptr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/tbaa-for-vptr.cpp?rev=203691&r1=203690&r2=203691&view=diff
==============================================================================
--- cfe/trunk/test/CodeGen/tbaa-for-vptr.cpp (original)
+++ cfe/trunk/test/CodeGen/tbaa-for-vptr.cpp Wed Mar 12 13:26:14 2014
@@ -17,12 +17,19 @@ void CreateA() {
   new A;
 }
 
-void CallFoo(A *a) {
+void CallFoo(A *a, int (A::*fp)() const) {
   a->foo();
+  (a->*fp)();
 }
 
+// CHECK-LABEL: @_Z7CallFoo
 // CHECK: %{{.*}} = load {{.*}} !tbaa ![[NUM:[0-9]+]]
+// CHECK: br i1
+// CHECK: load {{.*}}, !tbaa ![[NUM]]
+//
+// CHECK-LABEL: @_ZN1AC2Ev
 // CHECK: store {{.*}} !tbaa ![[NUM]]
+//
 // CHECK: [[NUM]] = metadata !{metadata [[TYPE:!.*]], metadata [[TYPE]], i64 0}
 // CHECK: [[TYPE]] = metadata !{metadata !"vtable pointer", metadata !{{.*}}
 // NOTBAA-NOT: = metadata !{metadata !"Simple C/C++ TBAA"}





More information about the cfe-commits mailing list