diff options
author | Bill Wendling <isanbard@gmail.com> | 2014-08-05 05:19:17 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2014-08-05 05:19:17 +0000 |
commit | 38aafa842843e746db067b480318b30aae45c949 (patch) | |
tree | 68c3fdb7d76b12c00221adc3da95187585e2de94 | |
parent | 449eddb4a08a1e24a04d88358c9ffb3927996c59 (diff) |
Merging r214734:
------------------------------------------------------------------------
r214734 | ogoffart | 2014-08-04 10:28:05 -0700 (Mon, 04 Aug 2014) | 7 lines
Fix crash when assiging to a property with an invalid type
This is a regression from clang 3.4
Set the result to ExprError and returns true, rather than simply
returns false because errors have been reported already and returning
false show a confusing error
------------------------------------------------------------------------
git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_35@214839 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Sema/SemaPseudoObject.cpp | 7 | ||||
-rw-r--r-- | test/SemaObjCXX/property-invalid-type.mm | 19 |
2 files changed, 25 insertions, 1 deletions
diff --git a/lib/Sema/SemaPseudoObject.cpp b/lib/Sema/SemaPseudoObject.cpp index c8d34f84e1..fac7774734 100644 --- a/lib/Sema/SemaPseudoObject.cpp +++ b/lib/Sema/SemaPseudoObject.cpp @@ -845,7 +845,12 @@ bool ObjCPropertyOpBuilder::tryBuildGetOfReference(Expr *op, if (!S.getLangOpts().CPlusPlus) return false; findGetter(); - assert(Getter && "property has no setter and no getter!"); + if (!Getter) { + // The property has no setter and no getter! This can happen if the type is + // invalid. Error have already been reported. + result = ExprError(); + return true; + } // Only do this if the getter returns an l-value reference type. QualType resultType = Getter->getReturnType(); diff --git a/test/SemaObjCXX/property-invalid-type.mm b/test/SemaObjCXX/property-invalid-type.mm new file mode 100644 index 0000000000..e249ace3d2 --- /dev/null +++ b/test/SemaObjCXX/property-invalid-type.mm @@ -0,0 +1,19 @@ +// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s + +@interface I +{ + A* response; // expected-error {{unknown type name 'A'}} +} +@end +@interface I () +@property A* response; // expected-error {{unknown type name 'A'}} +@end +@implementation I +@synthesize response; +- (void) foo :(A*) a // expected-error {{expected a type}} +{ + self.response = a; +} +@end + + |