// RUN: %clang_cc1 -fsyntax-only -verify %s
// rdar://8191774

@protocol SomeProtocol
@end

@protocol SomeProtocol1
@end

@interface SomeObject <SomeProtocol>
@end

int main () {
    Class <SomeProtocol> classA;
    Class <SomeProtocol> classB;
    Class <SomeProtocol, SomeProtocol1> classC;
    Class <SomeProtocol1> classD;
    void * pv = 0;
    Class c = (Class)0;;
    if (pv)
      return classA == pv;

    if (c)
      return classA == c;
    
    return classA == classB  || classA == classC ||
           classC == classA ||
           classA == classD; // expected-warning {{comparison of distinct pointer types ('Class<SomeProtocol>' and 'Class<SomeProtocol1>')}}
}

// rdar://18491222
@protocol NSObject @end

@interface NSObject @end
@protocol ProtocolX <NSObject>
@end

@protocol ProtocolY <NSObject>
@end

@interface ClassA : NSObject
@end

@interface ClassB : ClassA <ProtocolY, ProtocolX>
@end

@interface OtherClass : NSObject
@property (nonatomic, copy) ClassB<ProtocolX> *aProperty;
- (ClassA<ProtocolY> *)aMethod;
- (ClassA<ProtocolY> *)anotherMethod;
@end

@implementation OtherClass
- (ClassA<ProtocolY> *)aMethod {
    // This does not work, even though ClassB subclasses from A and conforms to Y
    // because the property type explicity adds ProtocolX conformance
    // even though ClassB already conforms to ProtocolX
    return self.aProperty;
}
- (ClassA<ProtocolY> *)anotherMethod {
    // This works, even though all it is doing is removing an explicit
    // protocol conformance that ClassB already conforms to
    return (ClassB *)self.aProperty;
}
@end
