summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGExpr.cpp
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2010-08-21 03:37:02 +0000
committerDaniel Dunbar <daniel@zuster.org>2010-08-21 03:37:02 +0000
commite8b6cda15ae27f7f2d6a445f0f226c9681daedf7 (patch)
tree00fb80cda040c8ca13ef1d3157800b3e0ff4f7dd /clang/lib/CodeGen/CGExpr.cpp
parentb657ac51cf3e1b3e9ab0b154a74cd688ee09f10f (diff)
downloadbcm5719-llvm-e8b6cda15ae27f7f2d6a445f0f226c9681daedf7.tar.gz
bcm5719-llvm-e8b6cda15ae27f7f2d6a445f0f226c9681daedf7.zip
IRgen: The CVR qualifiers in a subobject adjustment should just come from the
field (I think). - Doug, please check. llvm-svn: 111720
Diffstat (limited to 'clang/lib/CodeGen/CGExpr.cpp')
-rw-r--r--clang/lib/CodeGen/CGExpr.cpp26
1 files changed, 10 insertions, 16 deletions
diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp
index da42af39dcb..e95e9f9b2b6 100644
--- a/clang/lib/CodeGen/CGExpr.cpp
+++ b/clang/lib/CodeGen/CGExpr.cpp
@@ -146,10 +146,7 @@ struct SubobjectAdjustment {
const CXXRecordDecl *DerivedClass;
} DerivedToBase;
- struct {
- FieldDecl *Field;
- unsigned CVRQualifiers;
- } Field;
+ FieldDecl *Field;
};
SubobjectAdjustment(const CastExpr *BasePath,
@@ -160,11 +157,10 @@ struct SubobjectAdjustment {
DerivedToBase.DerivedClass = DerivedClass;
}
- SubobjectAdjustment(FieldDecl *Field, unsigned CVRQualifiers)
- : Kind(FieldAdjustment)
+ SubobjectAdjustment(FieldDecl *Field)
+ : Kind(FieldAdjustment)
{
- this->Field.Field = Field;
- this->Field.CVRQualifiers = CVRQualifiers;
+ this->Field = Field;
}
};
@@ -249,8 +245,7 @@ EmitExprForReferenceBinding(CodeGenFunction& CGF, const Expr* E,
ME->getBase()->getType()->isRecordType()) {
if (FieldDecl *Field = dyn_cast<FieldDecl>(ME->getMemberDecl())) {
E = ME->getBase();
- Adjustments.push_back(SubobjectAdjustment(Field,
- E->getType().getCVRQualifiers()));
+ Adjustments.push_back(SubobjectAdjustment(Field));
continue;
}
}
@@ -296,9 +291,8 @@ EmitExprForReferenceBinding(CodeGenFunction& CGF, const Expr* E,
break;
case SubobjectAdjustment::FieldAdjustment: {
- unsigned CVR = Adjustment.Field.CVRQualifiers;
LValue LV =
- CGF.EmitLValueForField(Object, Adjustment.Field.Field, CVR);
+ CGF.EmitLValueForField(Object, Adjustment.Field, 0);
if (LV.isSimple()) {
Object = LV.getAddress();
break;
@@ -306,11 +300,11 @@ EmitExprForReferenceBinding(CodeGenFunction& CGF, const Expr* E,
// For non-simple lvalues, we actually have to create a copy of
// the object we're binding to.
- QualType T = Adjustment.Field.Field->getType().getNonReferenceType()
- .getUnqualifiedType();
+ QualType T = Adjustment.Field->getType().getNonReferenceType()
+ .getUnqualifiedType();
Object = CreateReferenceTemporary(CGF, T, InitializedDecl);
- LValue TempLV = LValue::MakeAddr(Object,
- Qualifiers::fromCVRMask(CVR));
+ LValue TempLV = CGF.MakeAddrLValue(Object,
+ Adjustment.Field->getType());
CGF.EmitStoreThroughLValue(CGF.EmitLoadOfLValue(LV, T), TempLV, T);
break;
}
OpenPOWER on IntegriCloud