| // RUN: %clang_cc1  -fsyntax-only -verify %s | 
 |  | 
 | typedef unsigned int size_t; | 
 | @protocol P @end | 
 |  | 
 | @interface NSMutableArray | 
 | - (id)objectAtIndexedSubscript:(size_t)index; | 
 | - (void)setObject:(id)object atIndexedSubscript:(size_t)index; | 
 | @end | 
 |  | 
 | @interface NSMutableDictionary | 
 | - (id)objectForKeyedSubscript:(id)key; | 
 | - (void)setObject:(id)object forKeyedSubscript:(size_t)key; | 
 | @end | 
 |  | 
 | id func(void) { | 
 |   NSMutableArray *array; | 
 |   float f;  | 
 |   array[f] = array; // expected-error {{indexing expression is invalid because subscript type 'float' is not an integral or Objective-C pointer type}} | 
 |   return array[3.14]; // expected-error {{indexing expression is invalid because subscript type 'double' is not an integral or Objective-C pointer type}} | 
 | } | 
 |  | 
 | void test_unused(void) { | 
 |   NSMutableArray *array; | 
 |   array[10]; // expected-warning {{container access result unused - container access should not be used for side effects}}  | 
 |  | 
 |   NSMutableDictionary *dict; | 
 |   dict[array]; // expected-warning {{container access result unused - container access should not be used for side effects}} | 
 | } | 
 |  | 
 | void testQualifiedId(id<P> qualifiedId) { | 
 |   id object = qualifiedId[10];   // expected-error {{expected method to read array element not found on object of type 'id<P>'}} | 
 |   qualifiedId[10] = qualifiedId; // expected-error {{expected method to write array element not found on object of type 'id<P>'}} | 
 | } | 
 |  | 
 | void testUnqualifiedId(id unqualId) { | 
 |   id object = unqualId[10]; | 
 |   unqualId[10] = object; | 
 | } | 
 |  | 
 | @protocol Subscriptable | 
 | - (id)objectAtIndexedSubscript:(size_t)index; | 
 | - (void)setObject:(id)object atIndexedSubscript:(size_t)index; | 
 | @end | 
 |  | 
 | void testValidQualifiedId(id<Subscriptable> qualifiedId) { | 
 |   id object = qualifiedId[10]; | 
 |   qualifiedId[10] = object; | 
 | } |