diff options
Diffstat (limited to 'test/PCH/objc_literals.mm')
-rw-r--r-- | test/PCH/objc_literals.mm | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/test/PCH/objc_literals.mm b/test/PCH/objc_literals.mm new file mode 100644 index 0000000..8ef3351 --- /dev/null +++ b/test/PCH/objc_literals.mm @@ -0,0 +1,65 @@ +// RUN: %clang -cc1 -emit-pch -x objective-c++ -std=c++0x -o %t %s +// RUN: %clang -cc1 -include-pch %t -x objective-c++ -std=c++0x -verify %s +// RUN: %clang -cc1 -include-pch %t -x objective-c++ -std=c++0x -ast-print %s | FileCheck -check-prefix=PRINT %s +// RUN: %clang -cc1 -include-pch %t -x objective-c++ -std=c++0x -emit-llvm -o - %s | FileCheck -check-prefix=IR %s + +#ifndef HEADER +#define HEADER + +typedef unsigned char BOOL; + +@interface NSNumber @end + +@interface NSNumber (NSNumberCreation) ++ (NSNumber *)numberWithChar:(char)value; ++ (NSNumber *)numberWithUnsignedChar:(unsigned char)value; ++ (NSNumber *)numberWithShort:(short)value; ++ (NSNumber *)numberWithUnsignedShort:(unsigned short)value; ++ (NSNumber *)numberWithInt:(int)value; ++ (NSNumber *)numberWithUnsignedInt:(unsigned int)value; ++ (NSNumber *)numberWithLong:(long)value; ++ (NSNumber *)numberWithUnsignedLong:(unsigned long)value; ++ (NSNumber *)numberWithLongLong:(long long)value; ++ (NSNumber *)numberWithUnsignedLongLong:(unsigned long long)value; ++ (NSNumber *)numberWithFloat:(float)value; ++ (NSNumber *)numberWithDouble:(double)value; ++ (NSNumber *)numberWithBool:(BOOL)value; +@end + +@interface NSArray +@end + +@interface NSArray (NSArrayCreation) ++ (id)arrayWithObjects:(const id [])objects count:(unsigned long)cnt; +@end + +@interface NSDictionary ++ (id)dictionaryWithObjects:(const id [])objects forKeys:(const id [])keys count:(unsigned long)cnt; +@end + +template<typename T, typename U> +struct pair { + T first; + U second; +}; + +template<typename T, typename U> +pair<T, U> make_pair(const T& first, const U& second) { + return { first, second }; +} + +// CHECK-IR: define linkonce_odr void @_Z29variadic_dictionary_expansionIJP8NSStringS1_EJP8NSNumberS3_EEvDp4pairIT_T0_E +template<typename ...Ts, typename ... Us> +void variadic_dictionary_expansion(pair<Ts, Us>... key_values) { + // CHECK-PRINT: id dict = @{ key_values.first : key_values.second... }; + // CHECK-IR: {{call.*objc_msgSend}} + // CHECK-IR: ret void + id dict = @{ key_values.first : key_values.second ... }; +} + +#else +void test_all() { + variadic_dictionary_expansion(make_pair(@"Seventeen", @17), + make_pair(@"YES", @true)); +} +#endif |