From: Daniel Dunbar Date: Sat, 18 Apr 2009 08:54:40 +0000 (+0000) Subject: Use getAsPointerType instead of using getCanonicalType directly. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f3ef07cbe8f154ba373f42291132048687f80bf0;p=clang Use getAsPointerType instead of using getCanonicalType directly. - git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69435 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp index f98e6748b2..a073c44256 100644 --- a/lib/CodeGen/CGExpr.cpp +++ b/lib/CodeGen/CGExpr.cpp @@ -825,13 +825,10 @@ LValue CodeGenFunction::EmitArraySubscriptExpr(const ArraySubscriptExpr *E) { BaseTypeSize)); } - QualType T = E->getBase()->getType(); - QualType ExprTy = getContext().getCanonicalType(T); - T = T->getAsPointerType()->getPointeeType(); - LValue LV = - LValue::MakeAddr(Builder.CreateGEP(Base, Idx, "arrayidx"), - ExprTy->getAsPointerType()->getPointeeType().getCVRQualifiers(), - getContext().getObjCGCAttrKind(T)); + QualType T = E->getBase()->getType()->getAsPointerType()->getPointeeType(); + LValue LV = LValue::MakeAddr(Builder.CreateGEP(Base, Idx, "arrayidx"), + T.getCVRQualifiers(), + getContext().getObjCGCAttrKind(T)); if (getContext().getLangOptions().ObjC1 && getContext().getLangOptions().getGCMode() != LangOptions::NonGC) LValue::SetObjCNonGC(LV, !E->isOBJCGCCandidate()); @@ -900,7 +897,7 @@ LValue CodeGenFunction::EmitMemberExpr(const MemberExpr *E) { if (E->isArrow()) { BaseValue = EmitScalarExpr(BaseExpr); const PointerType *PTy = - cast(getContext().getCanonicalType(BaseExpr->getType())); + BaseExpr->getType()->getAsPointerType(); if (PTy->getPointeeType()->isUnionType()) isUnion = true; CVRQualifiers = PTy->getPointeeType().getCVRQualifiers(); @@ -1166,8 +1163,7 @@ LValue CodeGenFunction::EmitObjCIvarRefLValue(const ObjCIvarRefExpr *E) { QualType ObjectTy; if (E->isArrow()) { BaseValue = EmitScalarExpr(BaseExpr); - const PointerType *PTy = - cast(getContext().getCanonicalType(BaseExpr->getType())); + const PointerType *PTy = BaseExpr->getType()->getAsPointerType(); ObjectTy = PTy->getPointeeType(); CVRQualifiers = ObjectTy.getCVRQualifiers(); } else { diff --git a/test/CodeGenObjC/attr-strong.c b/test/CodeGenObjC/attr-strong.c new file mode 100644 index 0000000000..ca83334494 --- /dev/null +++ b/test/CodeGenObjC/attr-strong.c @@ -0,0 +1,9 @@ +// RUN: clang -emit-llvm -S -o %t %s + +struct s0 { + void *a; +}; +struct s0 * __attribute__((objc_gc(strong))) g0; +void f0(void) { + g0->a = 0; +}