Diagnose property of reference type as unsupported

instead of crashing for now. 

llvm-svn: 91546
This commit is contained in:
Fariborz Jahanian
2009-12-16 18:03:30 +00:00
parent d681a29ac0
commit 00857fc376
3 changed files with 9 additions and 6 deletions

View File

@@ -305,6 +305,8 @@ def note_property_declare : Note<
"property declared here">;
def error_synthesize_category_decl : Error<
"@synthesize not allowed in a category's implementation">;
def error_reference_property : Error<
"property of reference type is not supported">;
def error_missing_property_interface : Error<
"property implementation in a category with no category declaration">;
def error_bad_category_property_decl : Error<

View File

@@ -1950,6 +1950,10 @@ Sema::DeclPtrTy Sema::ActOnProperty(Scope *S, SourceLocation AtLoc,
!(Attributes & ObjCDeclSpec::DQ_PR_retain) &&
!(Attributes & ObjCDeclSpec::DQ_PR_copy)));
QualType T = GetTypeForDeclarator(FD.D, S);
if (T->isReferenceType()) {
Diag(AtLoc, diag::error_reference_property);
return DeclPtrTy();
}
Decl *ClassDecl = ClassCategory.getAs<Decl>();
ObjCInterfaceDecl *CCPrimary = 0; // continuation class's primary class
// May modify Attributes.

View File

@@ -1,7 +1,4 @@
// FIXME: This crashes, disable it until fixed.
// RN: %clang_cc1 -verify -emit-llvm -o - %s
// RUN: false
// XFAIL: *
// RUN: %clang_cc1 -verify -emit-llvm -o - %s
// Test reference binding.
@@ -12,7 +9,7 @@ typedef struct {
@interface A
@property (assign) T p0;
@property (assign) T& p1;
@property (assign) T& p1; // expected-error {{property of reference type is not supported}}
@end
int f0(const T& t) {
@@ -24,6 +21,6 @@ int f1(A *a) {
}
int f2(A *a) {
return f0(a.p1);
return f0(a.p1); // expected-error {{property 'p1' not found on object of type 'A *'}}
}