// RUN: clang-cc -fsyntax-only -verify %s

@protocol MyProtocol @end

@interface NSObject @end

@interface NSInterm : NSObject <MyProtocol>
@end

@interface NSArray : NSInterm 
@end

@interface NSSet : NSObject <MyProtocol>
@end


@interface N1 : NSObject
@end

@interface N1() <MyProtocol>
@end

NSObject* test (int argc) {
    NSArray *array = ((void*)0);
    NSSet *set = ((void*)0);
    return (argc) ? set : array ;
}


NSObject* test1 (int argc) {
    NSArray *array = ((void*)0);
    NSSet *set = ((void*)0);
    id <MyProtocol> instance = (argc) ? array : set;
    id <MyProtocol> instance1 = (argc) ? set : array;

    N1 *n1 = ((void*)0);
    id <MyProtocol> instance2 = (argc) ? set : n1;
    id <MyProtocol> instance3 = (argc) ? n1 : array;

    NSArray<MyProtocol> *qual_array = ((void*)0);
    id <MyProtocol> instance4 = (argc) ? array : qual_array;
    id <MyProtocol> instance5 = (argc) ? qual_array : array;
    NSSet<MyProtocol> *qual_set = ((void*)0);
    id <MyProtocol> instance6 = (argc) ? qual_set : qual_array;
    id <MyProtocol> instance7 = (argc) ? qual_set : array;
    id <MyProtocol> instance8 = (argc) ? qual_array : set;
    id <MyProtocol> instance9 = (argc) ? qual_array : qual_set;


    return (argc) ? array : set;
}
