]> granicus.if.org Git - clang/commitdiff
[CodeGen] EmitCXXMemberDataPointerAddress() to generate TBAA info along with LValue...
authorIvan A. Kosarev <ikosarev@accesssoftek.com>
Fri, 13 Oct 2017 16:38:32 +0000 (16:38 +0000)
committerIvan A. Kosarev <ikosarev@accesssoftek.com>
Fri, 13 Oct 2017 16:38:32 +0000 (16:38 +0000)
This patch should not bring in any functional changes.

Differential Revision: https://reviews.llvm.org/D38788

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@315702 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGClass.cpp
lib/CodeGen/CGExpr.cpp
lib/CodeGen/CodeGenFunction.h

index 3b8209f06406488175b3959d9bf44aa297c35097..674a75696db5a0fc88f10b234c7a943d27c03060 100644 (file)
@@ -129,13 +129,16 @@ Address
 CodeGenFunction::EmitCXXMemberDataPointerAddress(const Expr *E, Address base,
                                                  llvm::Value *memberPtr,
                                       const MemberPointerType *memberPtrType,
-                                                 LValueBaseInfo *BaseInfo) {
+                                                 LValueBaseInfo *BaseInfo,
+                                                 TBAAAccessInfo *TBAAInfo) {
   // Ask the ABI to compute the actual address.
   llvm::Value *ptr =
     CGM.getCXXABI().EmitMemberDataPointerAddress(*this, E, base,
                                                  memberPtr, memberPtrType);
 
   QualType memberType = memberPtrType->getPointeeType();
+  if (TBAAInfo)
+    *TBAAInfo = CGM.getTBAAAccessInfo(memberType);
   CharUnits memberAlign = getNaturalTypeAlignment(memberType, BaseInfo);
   memberAlign =
     CGM.getDynamicOffsetAlignment(base.getAlignment(),
index 0f2e328effc5aa4cc1ceba9f30ebc8bf07e98ca1..ec1f30084e88b3bc43cf1d57313ac14e537a3b34 100644 (file)
@@ -4566,11 +4566,12 @@ EmitPointerToDataMemberBinaryExpr(const BinaryOperator *E) {
     = E->getRHS()->getType()->getAs<MemberPointerType>();
 
   LValueBaseInfo BaseInfo;
+  TBAAAccessInfo TBAAInfo;
   Address MemberAddr =
-    EmitCXXMemberDataPointerAddress(E, BaseAddr, OffsetV, MPT, &BaseInfo);
+    EmitCXXMemberDataPointerAddress(E, BaseAddr, OffsetV, MPT, &BaseInfo,
+                                    &TBAAInfo);
 
-  return MakeAddrLValue(MemberAddr, MPT->getPointeeType(), BaseInfo,
-                        CGM.getTBAAAccessInfo(MPT->getPointeeType()));
+  return MakeAddrLValue(MemberAddr, MPT->getPointeeType(), BaseInfo, TBAAInfo);
 }
 
 /// Given the address of a temporary variable, produce an r-value of
index 68684033ce3732c8077bb6d2b1e20ab57d5fa285..71adc4a9deead2d700b9e0a856e61e4c3317cd0c 100644 (file)
@@ -3327,7 +3327,8 @@ public:
   Address EmitCXXMemberDataPointerAddress(const Expr *E, Address base,
                                           llvm::Value *memberPtr,
                                           const MemberPointerType *memberPtrType,
-                                          LValueBaseInfo *BaseInfo = nullptr);
+                                          LValueBaseInfo *BaseInfo = nullptr,
+                                          TBAAAccessInfo *TBAAInfo = nullptr);
   RValue EmitCXXMemberPointerCallExpr(const CXXMemberCallExpr *E,
                                       ReturnValueSlot ReturnValue);