Place the GC attribute on the same relative pointer

position to make it consistant and to match gcc's behavior,
by placing it at the inner-most pointer.

llvm-svn: 72784
This commit is contained in:
Fariborz Jahanian 2009-06-03 17:15:17 +00:00
parent 2f04887220
commit b68215c4de
2 changed files with 29 additions and 0 deletions

View File

@ -828,6 +828,13 @@ QualType ASTContext::getObjCGCQualType(QualType T,
if (CanT.getObjCGCAttr() == GCAttr)
return T;
if (T->isPointerType()) {
QualType Pointee = T->getAsPointerType()->getPointeeType();
if (Pointee->isPointerType()) {
QualType ResultType = getObjCGCQualType(Pointee, GCAttr);
return getPointerType(ResultType);
}
}
// If we are composing extended qualifiers together, merge together into one
// ExtQualType node.
unsigned CVRQuals = T.getCVRQualifiers();

View File

@ -0,0 +1,22 @@
// RUN: clang-cc -triple x86_64-apple-darwin9 -fobjc-gc -emit-llvm -o %t %s &&
// RUN: grep -e "objc_assign_weak" %t | grep -e "call" | count 6
__weak id* x;
id* __weak y;
id* __weak* z;
__weak id* a1[20];
id* __weak a2[30];
id** __weak a3[40];
int main()
{
*x = 0;
*y = 0;
**z = 0;
a1[3] = 0;
a2[3] = 0;
a3[3][4] = 0;
}