Type of a ?: expression whose either expression is a built-in 'id'

type is 'id' type.

llvm-svn: 79781
This commit is contained in:
Fariborz Jahanian
2009-08-22 22:27:17 +00:00
parent f7b571726a
commit a83c016d22
2 changed files with 29 additions and 2 deletions

View File

@@ -3213,9 +3213,9 @@ QualType Sema::CheckConditionalOperands(Expr *&Cond, Expr *&LHS, Expr *&RHS,
// FIXME: Consider unifying with 'areComparableObjCPointerTypes'.
// It could return the composite type.
if (Context.canAssignObjCInterfaces(LHSOPT, RHSOPT)) {
compositeType = LHSTy;
compositeType = RHSOPT->isObjCBuiltinType() ? RHSTy : LHSTy;
} else if (Context.canAssignObjCInterfaces(RHSOPT, LHSOPT)) {
compositeType = RHSTy;
compositeType = LHSOPT->isObjCBuiltinType() ? LHSTy : RHSTy;
} else if ((LHSTy->isObjCQualifiedIdType() ||
RHSTy->isObjCQualifiedIdType()) &&
Context.ObjCQualifiedIdTypesAreCompatible(LHSTy, RHSTy, true)) {

View File

@@ -0,0 +1,27 @@
// RUN: clang-cc -fsyntax-only -verify %s
@interface PBXBuildSettingsDictionary
{
int i;
}
@end
@interface XCConditionalBuildSettingsDictionary : PBXBuildSettingsDictionary
{
}
@end
@implementation PBXBuildSettingsDictionary
- (XCConditionalBuildSettingsDictionary *)conditionalDictionaryForConditionSet
{
return i ? self : (id)0;
}
- (XCConditionalBuildSettingsDictionary *)conditionalDictionaryForConditionSet2
{
return i ? (id)0 : self;
}
@end