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

llvm-svn: 214734
This commit is contained in:
Olivier Goffart 2014-08-04 17:28:05 +00:00
parent 5002fb5337
commit 4c182c8bb1
2 changed files with 25 additions and 1 deletions

View File

@ -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();

View File

@ -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