|  | // RUN: %clang_cc1 -emit-llvm -triple x86_64-apple-darwin %s -o /dev/null | 
|  |  | 
|  | typedef unsigned int size_t; | 
|  | @protocol P @end | 
|  |  | 
|  | @interface NSMutableArray | 
|  | #if __has_feature(objc_subscripting) | 
|  | - (id)objectAtIndexedSubscript:(size_t)index; | 
|  | - (void)setObject:(id)object atIndexedSubscript:(size_t)index; | 
|  | #endif | 
|  | @end | 
|  |  | 
|  | #if __has_feature(objc_subscripting) | 
|  | @interface XNSMutableArray | 
|  | - (id)objectAtIndexedSubscript:(size_t)index; | 
|  | - (void)setObject:(id)object atIndexedSubscript:(size_t)index; | 
|  | #endif | 
|  | @end | 
|  |  | 
|  | @interface NSMutableDictionary | 
|  | - (id)objectForKeyedSubscript:(id)key; | 
|  | - (void)setObject:(id)object forKeyedSubscript:(id)key; | 
|  | @end | 
|  |  | 
|  | @class NSString; | 
|  |  | 
|  | int main() { | 
|  | NSMutableArray<P> * array; | 
|  | id oldObject = array[10]; | 
|  |  | 
|  | array[10] = oldObject; | 
|  |  | 
|  | id unknown_array; | 
|  | oldObject = unknown_array[1]; | 
|  |  | 
|  | unknown_array[1] = oldObject; | 
|  |  | 
|  | NSMutableDictionary *dictionary; | 
|  | NSString *key; | 
|  | id newObject; | 
|  | oldObject = dictionary[key]; | 
|  | dictionary[key] = newObject;	// replace oldObject with newObject | 
|  |  | 
|  | } | 
|  |  |