brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.7 KiB · f8b97eb Raw
70 lines · plain
1// RUN: %clang_cc1 -fsyntax-only -verify %s2 3// Obj-C string literal expressions4template <typename T> struct StringTest {5  void f() {6    (void)@"Hello";7  }8};9 10template struct StringTest<int>;11template struct StringTest<double>;12 13// @selector expressions14template <typename T> struct SelectorTest {15  SEL f() {16    return @selector(multiple:arguments:);17  }18  SEL f2() {19    return @selector(multiple:arguments:);20  }21};22 23template struct SelectorTest<int>;24template struct SelectorTest<double>;25 26// @protocol expressions27@protocol P28@end29 30template <typename T> struct ProtocolTest {31  void f() {32    (void)@protocol(P);33  }34};35 36template struct ProtocolTest<int>;37template struct ProtocolTest<double>;38 39// @encode expressions40template <typename T> struct EncodeTest {41  static const char *encode(T t) { 42    return @encode(T);43  }44};45 46template struct EncodeTest<int>;47template struct EncodeTest<double>;48template struct EncodeTest<wchar_t>;49 50// @() boxing expressions.51template <typename T> struct BoxingTest {52  static id box(T value) {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}}55  }56};57 58@interface NSNumber59+ (NSNumber *)numberWithInt:(int)value;60@end61 62@interface NSString63+ (id)stringWithUTF8String:(const char *)str;64@end65 66template struct BoxingTest<int>;67template struct BoxingTest<const char *>;68template struct BoxingTest<int *>;        // expected-note {{in instantiation of member function 'BoxingTest<int *>::box' requested here}}69template struct BoxingTest<long double>;  // expected-note {{in instantiation of member function 'BoxingTest<long double>::box' requested here}}70