mirror of
https://github.com/intel/llvm.git
synced 2026-02-08 17:28:30 +08:00
Diagnose property of reference type as unsupported
instead of crashing for now. llvm-svn: 91546
This commit is contained in:
@@ -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<
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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 *'}}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user