| Daniel Dunbar | 8fbe78f | 2009-12-15 20:14:24 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -fsyntax-only -verify %s | 
| Anders Carlsson | 315d229 | 2009-06-07 18:45:35 +0000 | [diff] [blame] | 2 |  | 
| Anders Carlsson | 0880e9f | 2009-06-07 19:51:47 +0000 | [diff] [blame] | 3 | // Obj-C string literal expressions | 
|  | 4 | template <typename T> struct StringTest { | 
|  | 5 | void f() { | 
|  | 6 | (void)@"Hello"; | 
|  | 7 | } | 
|  | 8 | }; | 
| Anders Carlsson | 315d229 | 2009-06-07 18:45:35 +0000 | [diff] [blame] | 9 |  | 
| Anders Carlsson | 0880e9f | 2009-06-07 19:51:47 +0000 | [diff] [blame] | 10 | template struct StringTest<int>; | 
|  | 11 | template struct StringTest<double>; | 
|  | 12 |  | 
|  | 13 | // @selector expressions | 
|  | 14 | template <typename T> struct SelectorTest { | 
|  | 15 | SEL f() { | 
|  | 16 | return @selector(multiple:arguments:); | 
|  | 17 | } | 
|  | 18 | SEL f2() { | 
|  | 19 | return @selector(multiple:arguments:); | 
|  | 20 | } | 
|  | 21 | }; | 
|  | 22 |  | 
|  | 23 | template struct SelectorTest<int>; | 
|  | 24 | template struct SelectorTest<double>; | 
|  | 25 |  | 
|  | 26 | // @protocol expressions | 
|  | 27 | @protocol P | 
|  | 28 | @end | 
|  | 29 |  | 
|  | 30 | template <typename T> struct ProtocolTest { | 
|  | 31 | void f() { | 
|  | 32 | (void)@protocol(P); | 
|  | 33 | } | 
|  | 34 | }; | 
|  | 35 |  | 
|  | 36 | template struct ProtocolTest<int>; | 
|  | 37 | template struct ProtocolTest<double>; | 
|  | 38 |  | 
|  | 39 | // @encode expressions | 
|  | 40 | template <typename T> struct EncodeTest { | 
| Anders Carlsson | 315d229 | 2009-06-07 18:45:35 +0000 | [diff] [blame] | 41 | static const char *encode(T t) { | 
|  | 42 | return @encode(T); | 
|  | 43 | } | 
|  | 44 | }; | 
|  | 45 |  | 
| Anders Carlsson | 0880e9f | 2009-06-07 19:51:47 +0000 | [diff] [blame] | 46 | template struct EncodeTest<int>; | 
|  | 47 | template struct EncodeTest<double>; | 
| John McCall | dad856d | 2010-06-11 10:11:05 +0000 | [diff] [blame] | 48 | template struct EncodeTest<wchar_t>; | 
| Patrick Beard | 0caa394 | 2012-04-19 00:25:12 +0000 | [diff] [blame] | 49 |  | 
|  | 50 | // @() boxing expressions. | 
|  | 51 | template <typename T> struct BoxingTest { | 
|  | 52 | static id box(T value) { | 
| David Blaikie | afd3d0b | 2012-05-01 21:29:03 +0000 | [diff] [blame] | 53 | return @(value);                     // expected-error {{illegal type 'int *' used in a boxed expression}} \ | 
|  | 54 | // expected-error {{illegal type 'long double' used in a boxed expression}} | 
| Patrick Beard | 0caa394 | 2012-04-19 00:25:12 +0000 | [diff] [blame] | 55 | } | 
|  | 56 | }; | 
|  | 57 |  | 
|  | 58 | @interface NSNumber | 
|  | 59 | + (NSNumber *)numberWithInt:(int)value; | 
|  | 60 | @end | 
|  | 61 |  | 
|  | 62 | @interface NSString | 
|  | 63 | + (id)stringWithUTF8String:(const char *)str; | 
|  | 64 | @end | 
|  | 65 |  | 
|  | 66 | template struct BoxingTest<int>; | 
|  | 67 | template struct BoxingTest<const char *>; | 
|  | 68 | template struct BoxingTest<int *>;        // expected-note {{in instantiation of member function 'BoxingTest<int *>::box' requested here}} | 
|  | 69 | template struct BoxingTest<long double>;  // expected-note {{in instantiation of member function 'BoxingTest<long double>::box' requested here}} |