The "real" fix for <rdar://problem/6424347> clang on xcode: Assertion failed: (0 && "unexpected type"), function mergeTypes,
Commit r60845 was premature. llvm-svn: 60852
This commit is contained in:
parent
d5021730c8
commit
c68cfcfd03
|
@ -2122,6 +2122,8 @@ QualType ASTContext::mergeTypes(QualType LHS, QualType RHS) {
|
|||
if (LHSClass == Type::ObjCQualifiedInterface) LHSClass = Type::ObjCInterface;
|
||||
if (RHSClass == Type::ObjCQualifiedInterface) RHSClass = Type::ObjCInterface;
|
||||
|
||||
// If the canonical type classes don't match.
|
||||
if (LHSClass != RHSClass) {
|
||||
// ID is compatible with all qualified id types.
|
||||
if (LHS->isObjCQualifiedIdType()) {
|
||||
if (const PointerType *PT = RHS->getAsPointerType()) {
|
||||
|
@ -2149,9 +2151,6 @@ QualType ASTContext::mergeTypes(QualType LHS, QualType RHS) {
|
|||
return RHS;
|
||||
}
|
||||
}
|
||||
// If the canonical type classes don't match.
|
||||
if (LHSClass != RHSClass) {
|
||||
|
||||
// C99 6.7.2.2p4: Each enumerated type shall be compatible with char,
|
||||
// a signed integer type, or an unsigned integer type.
|
||||
if (const EnumType* ETy = LHS->getAsEnumType()) {
|
||||
|
@ -2253,6 +2252,9 @@ QualType ASTContext::mergeTypes(QualType LHS, QualType RHS) {
|
|||
// Distinct ObjC interfaces are not compatible; see canAssignObjCInterfaces
|
||||
// for checking assignment/comparison safety
|
||||
return QualType();
|
||||
case Type::ObjCQualifiedId:
|
||||
// Distinct qualified id's are not compatible.
|
||||
return QualType();
|
||||
default:
|
||||
assert(0 && "unexpected type");
|
||||
return QualType();
|
||||
|
|
|
@ -25,7 +25,8 @@ typedef struct _NSRange {
|
|||
}
|
||||
CSSM_FIELDGROUP, *CSSM_FIELDGROUP_PTR;
|
||||
@protocol XDUMLClassifier;
|
||||
@protocol XDUMLClassInterfaceCommons <XDUMLClassifier> @end @protocol XDUMLImplementation;
|
||||
@protocol XDUMLClassInterfaceCommons <XDUMLClassifier> // expected-warning {{cannot find protocol definition for 'XDUMLClassifier'}}
|
||||
@end @protocol XDUMLImplementation;
|
||||
@protocol XDUMLElement <NSObject> - (NSArray *) ownedElements;
|
||||
@end @protocol XDUMLDataType;
|
||||
@protocol XDUMLNamedElement <XDUMLElement> - (NSString *) name;
|
||||
|
@ -39,7 +40,7 @@ typedef NSUInteger XDSourceLanguage;
|
|||
@end @class XDSCOperation;
|
||||
@interface XDSCClassFormatter : NSObject {
|
||||
}
|
||||
+ (NSUInteger) compartmentsForClassifier: (id <XDUMLClassifier>) classifier withSpecification: (XDSCDisplaySpecification *) displaySpec;
|
||||
+ (NSUInteger) compartmentsForClassifier: (id <XDUMLClassifier>) classifier withSpecification: (XDSCDisplaySpecification *) displaySpec; // expected-note {{previous definition is here}}
|
||||
@end
|
||||
@class NSString;
|
||||
@implementation XDSCClassFormatter
|
||||
|
@ -47,7 +48,7 @@ typedef NSUInteger XDSourceLanguage;
|
|||
+ appendVisibility: (id <XDUMLNamedElement>) element withSpecification: (XDSCDisplaySpecification *) displaySpec to: (NSMutableAttributedString *) attributedString
|
||||
{
|
||||
}
|
||||
// FIXME: should we warn? (since the protocols are different). FWIW...GCC doesn't currently.
|
||||
+ (NSUInteger) compartmentsForClassifier: (id <XDSCClassifier>) classifier withSpecification: (XDSCDisplaySpecification *) displaySpec {
|
||||
// GCC doesn't currently warn about this.
|
||||
+ (NSUInteger) compartmentsForClassifier: (id <XDSCClassifier>) classifier withSpecification: (XDSCDisplaySpecification *) displaySpec { // expected-warning {{conflicting types for 'compartmentsForClassifier:withSpecification:'}}
|
||||
}
|
||||
@end
|
Loading…
Reference in New Issue