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:
parent
1ee61a7f3b
commit
b107143fed
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
Loading…
Reference in New Issue