brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · bc87020 Raw
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