// RUN: %clang_cc1 -Wno-objc-root-class %s -verify
// RUN: %clang_cc1 -xobjective-c++ -Wno-objc-root-class %s -verify

#define YES __objc_yes
#define NO __objc_no

@interface NSNumber
+(instancetype)numberWithChar:(char)value;
+(instancetype)numberWithInt:(int)value;
+(instancetype)numberWithDouble:(double)value;
+(instancetype)numberWithBool:(unsigned char)value;
+(instancetype)numberWithUnsignedLong:(unsigned long)value;
+(instancetype)numberWithLongLong:(long long) value;
+(instancetype)numberWithUnsignedInt:(unsigned)value;
@end

@interface NSString
@end

@interface NSDictionary
+ (instancetype)dictionaryWithObjects:(const id[])objects
                              forKeys:(const id[])keys
                                count:(unsigned long)cnt;
@end

void test(void) {
  NSDictionary *t1 = @{
    @"foo" : @0, // expected-note 2 {{previous equal key is here}}
    @"foo" : @0, // expected-warning{{duplicate key in dictionary literal}}
    @("foo") : @0, // expected-warning{{duplicate key in dictionary literal}}
    @"foo\0" : @0,

    @1 : @0, // expected-note + {{previous equal key is here}}
    @YES : @0, // expected-warning{{duplicate key in dictionary literal}}
    @'\1' : @0, // expected-warning{{duplicate key in dictionary literal}}
    @1 : @0, // expected-warning{{duplicate key in dictionary literal}}
    @1ul : @0, // expected-warning{{duplicate key in dictionary literal}}
    @1ll : @0, // expected-warning{{duplicate key in dictionary literal}}
#ifdef __cplusplus
    @true : @0, // expected-warning{{duplicate key in dictionary literal}}
#endif
    @1.0 : @0, // FIXME: should warn

    @-1 : @0, // expected-note + {{previous equal key is here}}
    @4294967295u : @0, // no warning
    @-1ll : @0, // expected-warning{{duplicate key in dictionary literal}}
    @(NO-YES) : @0, // expected-warning{{duplicate key in dictionary literal}}
  };
}

#ifdef __cplusplus
template <class... Ts> void variadic(Ts... ts) {
  NSDictionary *nd = @{
    ts : @0 ...,
    @0 : ts ... // expected-warning 2 {{duplicate key in dictionary literal}} expected-note 2 {{previous equal key is here}}
  };
}

void call_variadic() {
  variadic(@0, @1, @2); // expected-note {{in instantiation}}
}
#endif
