From 00165a25a9ac005aa2e6b4ac791d555226fa9a9f Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Fri, 19 Dec 2008 17:27:57 +0000 Subject: [PATCH] Fix for PR3234 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@61245 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/DiagnosticKinds.def | 2 ++ lib/Sema/SemaExpr.cpp | 6 ++++++ test/SemaObjC/property-missing.m | 22 ++++++++++++++++++++++ 3 files changed, 30 insertions(+) create mode 100644 test/SemaObjC/property-missing.m diff --git a/include/clang/Basic/DiagnosticKinds.def b/include/clang/Basic/DiagnosticKinds.def index 39464efd6a..6b11d31701 100644 --- a/include/clang/Basic/DiagnosticKinds.def +++ b/include/clang/Basic/DiagnosticKinds.def @@ -458,6 +458,8 @@ DIAG(err_objc_property_requires_object, ERROR, "property with '%0' attribute must be of object type") DIAG(err_property_type, ERROR, "property cannot have array or function type %0") +DIAG(err_property_not_found, ERROR, + "property %0 not found on object of type %1") DIAG(err_objc_directive_only_in_protocol, ERROR, "directive may only be specified in protocols only") DIAG(err_missing_catch_finally, ERROR, diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index 3ee601faca..d31855e36b 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -1348,6 +1348,9 @@ ActOnMemberReferenceExpr(ExprTy *Base, SourceLocation OpLoc, return new ObjCKVCRefExpr(Getter, Getter->getResultType(), Setter, MemberLoc, BaseExpr); } + + return Diag(MemberLoc, diag::err_property_not_found) << + &Member << BaseType; } // Handle properties on qualified "id" protocols. const ObjCQualifiedIdType *QIdTy; @@ -1364,6 +1367,9 @@ ActOnMemberReferenceExpr(ExprTy *Base, SourceLocation OpLoc, OpLoc, MemberLoc, NULL, 0); } } + + return Diag(MemberLoc, diag::err_property_not_found) << + &Member << BaseType; } // Handle 'field access' to vectors, such as 'V.xx'. if (BaseType->isExtVectorType() && OpKind == tok::period) { diff --git a/test/SemaObjC/property-missing.m b/test/SemaObjC/property-missing.m new file mode 100644 index 0000000000..23af00646a --- /dev/null +++ b/test/SemaObjC/property-missing.m @@ -0,0 +1,22 @@ +// RUN: clang -fsyntax-only -verify %s + +// PR3234 + +@protocol NSCopying @end +@interface NSObject @end + +void f1(NSObject *o) +{ + o.foo; // expected-error{{property 'foo' not found on object of type 'NSObject *'}} +} + +void f2(id o) +{ + o.foo; // expected-error{{property 'foo' not found on object of type 'id'}} +} + +void f3(id o) +{ + o.foo; // expected-error{{member reference base type 'id' is not a structure or union}} +} + -- 2.40.0