Index: cfe/trunk/lib/CodeGen/CGExpr.cpp =================================================================== --- cfe/trunk/lib/CodeGen/CGExpr.cpp +++ cfe/trunk/lib/CodeGen/CGExpr.cpp @@ -2159,7 +2159,8 @@ const ReferenceType *RefTy) { LValueBaseInfo BaseInfo; Address Addr = EmitLoadOfReference(RefAddr, RefTy, &BaseInfo); - return MakeAddrLValue(Addr, RefTy->getPointeeType(), BaseInfo); + return MakeAddrLValue(Addr, RefTy->getPointeeType(), BaseInfo, + CGM.getTBAAAccessInfo(RefTy->getPointeeType())); } Address CodeGenFunction::EmitLoadOfPointer(Address Ptr, @@ -2175,7 +2176,8 @@ const PointerType *PtrTy) { LValueBaseInfo BaseInfo; Address Addr = EmitLoadOfPointer(PtrAddr, PtrTy, &BaseInfo); - return MakeAddrLValue(Addr, PtrTy->getPointeeType(), BaseInfo); + return MakeAddrLValue(Addr, PtrTy->getPointeeType(), BaseInfo, + CGM.getTBAAAccessInfo(PtrTy->getPointeeType())); } static LValue EmitGlobalVarDeclLValue(CodeGenFunction &CGF, @@ -2328,7 +2330,8 @@ bool MayAlias = CapLVal.getBaseInfo().getMayAlias(); return MakeAddrLValue( Address(CapLVal.getPointer(), getContext().getDeclAlign(VD)), - CapLVal.getType(), LValueBaseInfo(AlignmentSource::Decl, MayAlias)); + CapLVal.getType(), LValueBaseInfo(AlignmentSource::Decl, MayAlias), + CGM.getTBAAAccessInfo(CapLVal.getType())); } assert(isa(CurCodeDecl)); @@ -2440,7 +2443,7 @@ LValueBaseInfo BaseInfo; Address Addr = EmitPointerWithAlignment(E->getSubExpr(), &BaseInfo); - LValue LV = MakeAddrLValue(Addr, T, BaseInfo); + LValue LV = MakeAddrLValue(Addr, T, BaseInfo, CGM.getTBAAAccessInfo(T)); LV.getQuals().setAddressSpace(ExprTy.getAddressSpace()); // We should not generate __weak write barrier on indirect reference @@ -2472,7 +2475,8 @@ (E->getOpcode() == UO_Real ? emitAddrOfRealComponent(LV.getAddress(), LV.getType()) : emitAddrOfImagComponent(LV.getAddress(), LV.getType())); - LValue ElemLV = MakeAddrLValue(Component, T, LV.getBaseInfo()); + LValue ElemLV = MakeAddrLValue(Component, T, LV.getBaseInfo(), + CGM.getTBAAAccessInfo(T)); ElemLV.getQuals().addQualifiers(LV.getQuals()); return ElemLV; } @@ -3202,7 +3206,8 @@ QualType EltType = LV.getType()->castAs()->getElementType(); Addr = emitArraySubscriptGEP(*this, Addr, Idx, EltType, /*inbounds*/ true, SignedIndices, E->getExprLoc()); - return MakeAddrLValue(Addr, EltType, LV.getBaseInfo()); + return MakeAddrLValue(Addr, EltType, LV.getBaseInfo(), + CGM.getTBAAAccessInfo(EltType)); } LValueBaseInfo BaseInfo; @@ -3293,7 +3298,8 @@ SignedIndices, E->getExprLoc()); } - LValue LV = MakeAddrLValue(Addr, E->getType(), BaseInfo); + LValue LV = MakeAddrLValue(Addr, E->getType(), BaseInfo, + CGM.getTBAAAccessInfo(E->getType())); // TODO: Preserve/extend path TBAA metadata? @@ -3493,7 +3499,8 @@ /*SignedIndices=*/false, E->getExprLoc()); } - return MakeAddrLValue(EltPtr, ResultExprTy, BaseInfo); + return MakeAddrLValue(EltPtr, ResultExprTy, BaseInfo, + CGM.getTBAAAccessInfo(ResultExprTy)); } LValue CodeGenFunction:: @@ -3508,7 +3515,8 @@ LValueBaseInfo BaseInfo; Address Ptr = EmitPointerWithAlignment(E->getBase(), &BaseInfo); const PointerType *PT = E->getBase()->getType()->getAs(); - Base = MakeAddrLValue(Ptr, PT->getPointeeType(), BaseInfo); + Base = MakeAddrLValue(Ptr, PT->getPointeeType(), BaseInfo, + CGM.getTBAAAccessInfo(PT->getPointeeType())); Base.getQuals().removeObjCGCAttr(); } else if (E->getBase()->isGLValue()) { // Otherwise, if the base is an lvalue ( as in the case of foo.x.x), @@ -3574,7 +3582,8 @@ SkippedChecks.set(SanitizerKind::Null, true); EmitTypeCheck(TCK_MemberAccess, E->getExprLoc(), Addr.getPointer(), PtrTy, /*Alignment=*/CharUnits::Zero(), SkippedChecks); - BaseLV = MakeAddrLValue(Addr, PtrTy, BaseInfo); + BaseLV = MakeAddrLValue(Addr, PtrTy, BaseInfo, + CGM.getTBAAAccessInfo(PtrTy)); } else BaseLV = EmitCheckedLValue(BaseExpr, TCK_MemberAccess); @@ -3739,7 +3748,8 @@ if (field->hasAttr()) addr = EmitFieldAnnotations(field, addr); - LValue LV = MakeAddrLValue(addr, type, FieldBaseInfo); + LValue LV = MakeAddrLValue(addr, type, FieldBaseInfo, + CGM.getTBAAAccessInfo(type)); LV.getQuals().addCVRQualifiers(cvr); // Fields of may_alias structs act like 'char' for TBAA purposes. @@ -3797,7 +3807,8 @@ LValueBaseInfo FieldBaseInfo( getFieldAlignmentSource(BaseInfo.getAlignmentSource()), BaseInfo.getMayAlias()); - return MakeAddrLValue(V, FieldType, FieldBaseInfo); + return MakeAddrLValue(V, FieldType, FieldBaseInfo, + CGM.getTBAAAccessInfo(FieldType)); } LValue CodeGenFunction::EmitCompoundLiteralLValue(const CompoundLiteralExpr *E){ @@ -3913,7 +3924,8 @@ bool MayAlias = lhs->getBaseInfo().getMayAlias() || rhs->getBaseInfo().getMayAlias(); return MakeAddrLValue(result, expr->getType(), - LValueBaseInfo(alignSource, MayAlias)); + LValueBaseInfo(alignSource, MayAlias), + CGM.getTBAAAccessInfo(expr->getType())); } else { assert((lhs || rhs) && "both operands of glvalue conditional are throw-expressions?"); @@ -4011,7 +4023,8 @@ This, DerivedClassDecl, E->path_begin(), E->path_end(), /*NullCheckValue=*/false, E->getExprLoc()); - return MakeAddrLValue(Base, E->getType(), LV.getBaseInfo()); + return MakeAddrLValue(Base, E->getType(), LV.getBaseInfo(), + CGM.getTBAAAccessInfo(E->getType())); } case CK_ToUnion: return EmitAggExprToLValue(E); @@ -4038,7 +4051,8 @@ /*MayBeNull=*/false, CFITCK_DerivedCast, E->getLocStart()); - return MakeAddrLValue(Derived, E->getType(), LV.getBaseInfo()); + return MakeAddrLValue(Derived, E->getType(), LV.getBaseInfo(), + CGM.getTBAAAccessInfo(E->getType())); } case CK_LValueBitCast: { // This must be a reinterpret_cast (or c-style equivalent). @@ -4054,13 +4068,15 @@ /*MayBeNull=*/false, CFITCK_UnrelatedCast, E->getLocStart()); - return MakeAddrLValue(V, E->getType(), LV.getBaseInfo()); + return MakeAddrLValue(V, E->getType(), LV.getBaseInfo(), + CGM.getTBAAAccessInfo(E->getType())); } case CK_ObjCObjectLValueCast: { LValue LV = EmitLValue(E->getSubExpr()); Address V = Builder.CreateElementBitCast(LV.getAddress(), ConvertType(E->getType())); - return MakeAddrLValue(V, E->getType(), LV.getBaseInfo()); + return MakeAddrLValue(V, E->getType(), LV.getBaseInfo(), + CGM.getTBAAAccessInfo(E->getType())); } case CK_ZeroToOCLQueue: llvm_unreachable("NULL to OpenCL queue lvalue cast is not valid"); @@ -4558,7 +4574,8 @@ Address MemberAddr = EmitCXXMemberDataPointerAddress(E, BaseAddr, OffsetV, MPT, &BaseInfo); - return MakeAddrLValue(MemberAddr, MPT->getPointeeType(), BaseInfo); + return MakeAddrLValue(MemberAddr, MPT->getPointeeType(), BaseInfo, + CGM.getTBAAAccessInfo(MPT->getPointeeType())); } /// Given the address of a temporary variable, produce an r-value of Index: cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp =================================================================== --- cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp +++ cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp @@ -980,7 +980,8 @@ SharedLVal = CGF.MakeAddrLValue( CGF.Builder.CreateElementBitCast(SharedLVal.getAddress(), CGF.ConvertTypeForMem(SharedType)), - SharedType, SharedAddresses[N].first.getBaseInfo()); + SharedType, SharedAddresses[N].first.getBaseInfo(), + CGF.CGM.getTBAAAccessInfo(SharedType)); if (isa(ClausesData[N].Ref) || CGF.getContext().getAsArrayType(PrivateVD->getType())) { emitAggregateInitialization(CGF, N, PrivateAddr, SharedLVal, DRD); @@ -1033,7 +1034,8 @@ return CGF.MakeAddrLValue( CGF.Builder.CreateElementBitCast(BaseLV.getAddress(), CGF.ConvertTypeForMem(ElTy)), - BaseLV.getType(), BaseLV.getBaseInfo()); + BaseLV.getType(), BaseLV.getBaseInfo(), + CGF.CGM.getTBAAAccessInfo(BaseLV.getType())); } static Address castToBase(CodeGenFunction &CGF, QualType BaseTy, QualType ElTy, @@ -4072,7 +4074,8 @@ Address(SharedRefLValue.getPointer(), C.getDeclAlign(OriginalVD)), SharedRefLValue.getType(), LValueBaseInfo(AlignmentSource::Decl, - SharedRefLValue.getBaseInfo().getMayAlias())); + SharedRefLValue.getBaseInfo().getMayAlias()), + CGF.CGM.getTBAAAccessInfo(SharedRefLValue.getType())); QualType Type = OriginalVD->getType(); if (Type->isArrayType()) { // Initialize firstprivate array. Index: cfe/trunk/lib/CodeGen/CodeGenFunction.h =================================================================== --- cfe/trunk/lib/CodeGen/CodeGenFunction.h +++ cfe/trunk/lib/CodeGen/CodeGenFunction.h @@ -1917,9 +1917,9 @@ CGM.getTBAAAccessInfo(T)); } - LValue MakeAddrLValue(Address Addr, QualType T, LValueBaseInfo BaseInfo) { - return LValue::MakeAddr(Addr, T, getContext(), BaseInfo, - CGM.getTBAAAccessInfo(T)); + LValue MakeAddrLValue(Address Addr, QualType T, LValueBaseInfo BaseInfo, + TBAAAccessInfo TBAAInfo) { + return LValue::MakeAddr(Addr, T, getContext(), BaseInfo, TBAAInfo); } LValue MakeAddrLValue(llvm::Value *V, QualType T, CharUnits Alignment, @@ -1930,9 +1930,9 @@ } LValue MakeAddrLValue(llvm::Value *V, QualType T, CharUnits Alignment, - LValueBaseInfo BaseInfo) { + LValueBaseInfo BaseInfo, TBAAAccessInfo TBAAInfo) { return LValue::MakeAddr(Address(V, Alignment), T, getContext(), - BaseInfo, CGM.getTBAAAccessInfo(T)); + BaseInfo, TBAAInfo); } LValue MakeNaturalAlignPointeeAddrLValue(llvm::Value *V, QualType T); Index: cfe/trunk/lib/CodeGen/CodeGenFunction.cpp =================================================================== --- cfe/trunk/lib/CodeGen/CodeGenFunction.cpp +++ cfe/trunk/lib/CodeGen/CodeGenFunction.cpp @@ -180,7 +180,8 @@ CodeGenFunction::MakeNaturalAlignPointeeAddrLValue(llvm::Value *V, QualType T) { LValueBaseInfo BaseInfo; CharUnits Align = getNaturalTypeAlignment(T, &BaseInfo, /*pointee*/ true); - return MakeAddrLValue(Address(V, Align), T, BaseInfo); + return MakeAddrLValue(Address(V, Align), T, BaseInfo, + CGM.getTBAAAccessInfo(T)); }