Fix a bug in calculation of composite type

of conditional expressions of objc pointer types
where one type is the immediate base type of the
other. // rdar://9296866

llvm-svn: 129718
This commit is contained in:
Fariborz Jahanian 2011-04-18 21:16:59 +00:00
parent 1ee61a7f3b
commit b107143fed
2 changed files with 28 additions and 3 deletions

View File

@ -4963,10 +4963,10 @@ QualType ASTContext::areCommonBaseCompatible(
const ObjCObjectType *RHS = Rptr->getObjectType();
const ObjCInterfaceDecl* LDecl = LHS->getInterface();
const ObjCInterfaceDecl* RDecl = RHS->getInterface();
if (!LDecl || !RDecl)
if (!LDecl || !RDecl || (LDecl == RDecl))
return QualType();
while ((LDecl = LDecl->getSuperClass())) {
do {
LHS = cast<ObjCInterfaceType>(getObjCInterfaceType(LDecl));
if (canAssignObjCInterfaces(LHS, RHS)) {
llvm::SmallVector<ObjCProtocolDecl *, 8> Protocols;
@ -4978,7 +4978,7 @@ QualType ASTContext::areCommonBaseCompatible(
Result = getObjCObjectPointerType(Result);
return Result;
}
}
} while ((LDecl = LDecl->getSuperClass()));
return QualType();
}

View File

@ -0,0 +1,25 @@
// RUN: %clang_cc1 -fsyntax-only -verify %s
// rdar://9296866
@interface NSResponder
@end
@interface NSView : NSResponder
@end
@interface WebView : NSView
@end
@protocol WebDocumentView
@end
@implementation NSView
- (void) FUNC : (id)s {
WebView *m_webView;
NSView <WebDocumentView> *documentView;
NSView *coordinateView = s ? documentView : m_webView;
}
@end