79 lines · plain
1// RUN: %clang_cc1 -fsyntax-only -verify -fobjc-exceptions %s2 3@interface NSException4@end5 6// @throw7template<typename T>8void throw_test(T value) {9 @throw value; // expected-error{{@throw requires an Objective-C object type ('int' invalid)}}10}11 12template void throw_test(NSException *);13template void throw_test(int); // expected-note{{in instantiation of}}14 15// @synchronized16template<typename T>17void synchronized_test(T value) {18 @synchronized (value) { // expected-error{{@synchronized requires an Objective-C object type ('int' invalid)}}19 value = 0;20 }21}22 23template void synchronized_test(NSException *);24template void synchronized_test(int); // expected-note{{in instantiation of}}25 26// fast enumeration27@interface NSArray28- (unsigned int)countByEnumeratingWithState: (struct __objcFastEnumerationState *)state objects: (id *)items count:(unsigned int)stackcount;29@end30 31@interface NSString32@end33 34struct vector {};35 36template<typename T> void eat(T);37 38template<typename E, typename T>39void fast_enumeration_test(T collection) {40 for (E element in collection) { // expected-error{{selector element type 'int' is not a valid object}} \41 // expected-error{{the type 'vector' is not a pointer to a fast-enumerable object}}42 eat(element);43 }44 45 E element;46 for (element in collection) // expected-error{{selector element type 'int' is not a valid object}} \47 // expected-error{{the type 'vector' is not a pointer to a fast-enumerable object}}48 eat(element);49 50 for (NSString *str in collection) // expected-error{{the type 'vector' is not a pointer to a fast-enumerable object}}51 eat(str);52 53 NSString *str;54 for (str in collection) // expected-error{{the type 'vector' is not a pointer to a fast-enumerable object}}55 eat(str);56}57 58template void fast_enumeration_test<NSString *>(NSArray*);59template void fast_enumeration_test<int>(NSArray*); // expected-note{{in instantiation of}}60template void fast_enumeration_test<NSString *>(vector); // expected-note{{in instantiation of}}61 62// @try/@catch/@finally63 64template<typename T, typename U>65void try_catch_finally_test(U value) {66 @try {67 value = 1; // expected-error{{incompatible integer to pointer conversion assigning to 'int *' from 'int'}}68 }69 @catch (T obj) { // expected-error{{@catch parameter is not a pointer to an interface type}}70 id x = obj;71 } @finally {72 value = 0;73 }74}75 76template void try_catch_finally_test<NSString *>(int);77template void try_catch_finally_test<NSString *>(int*); // expected-note{{in instantiation of}}78template void try_catch_finally_test<NSString>(int); // expected-note{{in instantiation of function template specialization 'try_catch_finally_test<NSString, int>' requested here}}79