diff options
| author | Douglas Gregor <dgregor@apple.com> | 2010-07-29 16:05:45 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2010-07-29 16:05:45 +0000 |
| commit | 0bdcb8a239baf721a0763f1f01ed3a41cb5b6061 (patch) | |
| tree | 38ecae4785998f11cf61ab94bf81bd9d9a63768e | |
| parent | 4a338e3dc4f6afe89828d9efc05de0a41511d700 (diff) | |
| download | bcm5719-llvm-0bdcb8a239baf721a0763f1f01ed3a41cb5b6061.tar.gz bcm5719-llvm-0bdcb8a239baf721a0763f1f01ed3a41cb5b6061.zip | |
When taking the address of a value of Objective-C object type (e.g.,
one because we're referencing a variable of type NSString &), the
resulting type is an ObjCObjectPointerType.
llvm-svn: 109753
| -rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 2 | ||||
| -rw-r--r-- | clang/test/SemaObjCXX/references.mm | 7 |
2 files changed, 9 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index b2f1a356dfb..6f971b116d6 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -6313,6 +6313,8 @@ QualType Sema::CheckAddressOfOperand(Expr *op, SourceLocation OpLoc) { } // If the operand has type "type", the result has type "pointer to type". + if (op->getType()->isObjCObjectType()) + return Context.getObjCObjectPointerType(op->getType()); return Context.getPointerType(op->getType()); } diff --git a/clang/test/SemaObjCXX/references.mm b/clang/test/SemaObjCXX/references.mm index 70ce8278e8f..9eceeaf19f5 100644 --- a/clang/test/SemaObjCXX/references.mm +++ b/clang/test/SemaObjCXX/references.mm @@ -24,3 +24,10 @@ int f2(A *a) { return f0(a.p1); // expected-error {{property 'p1' not found on object of type 'A *'}} } +// PR7740 +@class NSString; + +void f3(id); +void f4(NSString &tmpstr) { + f3(&tmpstr); +} |

