summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGExpr.cpp
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2009-02-19 00:48:05 +0000
committerFariborz Jahanian <fjahanian@apple.com>2009-02-19 00:48:05 +0000
commit83e3eea5fc8a14bae22a5b5a80fe96b7e6b91e55 (patch)
tree22f0e4dd28c08fa314b93ab236aa27bcf9b8fa10 /clang/lib/CodeGen/CGExpr.cpp
parent9c788c081cbda71d65a4fc32b339718cd9ade52e (diff)
downloadbcm5719-llvm-83e3eea5fc8a14bae22a5b5a80fe96b7e6b91e55.tar.gz
bcm5719-llvm-83e3eea5fc8a14bae22a5b5a80fe96b7e6b91e55.zip
Some code simplification. ir gen for gc'able array
of objects in objc. llvm-svn: 64992
Diffstat (limited to 'clang/lib/CodeGen/CGExpr.cpp')
-rw-r--r--clang/lib/CodeGen/CGExpr.cpp20
1 files changed, 11 insertions, 9 deletions
diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp
index 69429e08e67..6e7d936c7e2 100644
--- a/clang/lib/CodeGen/CGExpr.cpp
+++ b/clang/lib/CodeGen/CGExpr.cpp
@@ -610,9 +610,7 @@ static void SetDeclObjCGCAttrInLvalue(ASTContext &Ctx, const QualType &Ty,
LValue &LV)
{
QualType::GCAttrTypes attr = Ctx.getObjCGCAttrKind(Ty);
- if (attr != QualType::GCNone)
- LValue::SetObjCType(attr == QualType::Weak,
- attr == QualType::Strong, LV);
+ LValue::SetObjCType(attr, LV);
}
LValue CodeGenFunction::EmitDeclRefLValue(const DeclRefExpr *E) {
@@ -767,11 +765,13 @@ LValue CodeGenFunction::EmitArraySubscriptExpr(const ArraySubscriptExpr *E) {
BaseTypeSize));
}
- QualType ExprTy = getContext().getCanonicalType(E->getBase()->getType());
+ QualType T = E->getBase()->getType();
+ QualType ExprTy = getContext().getCanonicalType(T);
+ T = T->getAsPointerType()->getPointeeType();
return LValue::MakeAddr(Builder.CreateGEP(Base, Idx, "arrayidx"),
- ExprTy->getAsPointerType()->getPointeeType()
- .getCVRQualifiers());
+ ExprTy->getAsPointerType()->getPointeeType().getCVRQualifiers(),
+ getContext().getObjCGCAttrKind(T));
}
static
@@ -921,11 +921,13 @@ LValue CodeGenFunction::EmitLValueForField(llvm::Value* BaseValue,
CGM.getLangOptions().getGCMode() != LangOptions::NonGC) {
QualType Ty = Field->getType();
QualType::GCAttrTypes attr = Ty.getObjCGCAttr();
- if (attr != QualType::GCNone)
+ if (attr != QualType::GCNone) {
// __weak attribute on a field is ignored.
- LValue::SetObjCType(false, attr == QualType::Strong, LV);
+ if (attr == QualType::Strong)
+ LValue::SetObjCType(QualType::Strong, LV);
+ }
else if (getContext().isObjCObjectPointerType(Ty))
- LValue::SetObjCType(false, true, LV);
+ LValue::SetObjCType(QualType::Strong, LV);
}
return LV;
OpenPOWER on IntegriCloud