diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2010-03-22 21:02:34 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2010-03-22 21:02:34 +0000 |
commit | 8149a5786def747af783a9e3c22714bb7ab42b9c (patch) | |
tree | 5233fed47b880715ef5281b151df658669c6d57f | |
parent | b1332d7a5228600ae86276b12883ec0ac9500ec1 (diff) |
Diagnose miuse of property dot-syntax instead of crashing.
(radar 7634653).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99210 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/Basic/DiagnosticSemaKinds.td | 1 | ||||
-rw-r--r-- | lib/Sema/SemaExprObjC.cpp | 5 | ||||
-rw-r--r-- | test/SemaObjC/property-expression-error.m | 5 |
3 files changed, 10 insertions, 1 deletions
diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index f1b2d1133f..ddd87941e2 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -2332,6 +2332,7 @@ def warn_unused_call : Warning< def err_incomplete_type_used_in_type_trait_expr : Error< "incomplete type %0 used in type trait expression">; +def err_expected_ident_or_lparen : Error<"expected identifier or '('">; // inline asm. def err_asm_wide_character : Error<"wide string is invalid in 'asm'">; diff --git a/lib/Sema/SemaExprObjC.cpp b/lib/Sema/SemaExprObjC.cpp index c98ba435c7..d5a22ca15f 100644 --- a/lib/Sema/SemaExprObjC.cpp +++ b/lib/Sema/SemaExprObjC.cpp @@ -289,7 +289,10 @@ Action::OwningExprResult Sema::ActOnClassPropertyRefExpr( IdentifierInfo *receiverNamePtr = &receiverName; ObjCInterfaceDecl *IFace = getObjCInterfaceDecl(receiverNamePtr); - + if (!IFace) { + Diag(receiverNameLoc, diag::err_expected_ident_or_lparen); + return ExprError(); + } // Search for a declared property first. Selector Sel = PP.getSelectorTable().getNullarySelector(&propertyName); diff --git a/test/SemaObjC/property-expression-error.m b/test/SemaObjC/property-expression-error.m index b59c1b154b..6b5cf047dc 100644 --- a/test/SemaObjC/property-expression-error.m +++ b/test/SemaObjC/property-expression-error.m @@ -16,3 +16,8 @@ int main() { &object.index; // expected-error {{address of property expression requested}} return 0; } + +typedef int Foo; +void test() { + Foo.x; // expected-error {{expected identifier or '('}} +} |