objc-container-subscripting-1.m [plain text]
// RUN:
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:(id)key;
@end
int main() {
NSMutableArray *array;
id val;
id oldObject = array[10];
// CHECK: [[ARR:// CHECK-NEXT: [[SEL:// CHECK-NEXT: [[ARRC:// CHECK-NEXT: [[CALL:// CHECK-NEXT: store i8* [[CALL]], i8** [[OLDOBJ:
val = (array[10] = oldObject);
// CHECK: [[THREE:// CHECK-NEXT: [[FOUR:// CHECK-NEXT: [[FIVE:// CHECK-NEXT: [[SIX:// CHECK-NEXT: call void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, i8*, i32)*)(i8* [[SIX]], i8* [[FIVE]], i8* [[FOUR]], i32 10)
// CHECK-NEXT: store i8* [[FOUR]], i8** [[val:
NSMutableDictionary *dictionary;
id key;
id newObject;
oldObject = dictionary[key];
// CHECK: [[SEVEN:// CHECK-NEXT: [[EIGHT:// CHECK-NEXT: [[TEN:// CHECK-NEXT: [[ELEVEN:// CHECK-NEXT: [[CALL1:// CHECK-NEXT: store i8* [[CALL1]], i8** [[oldObject:
val = (dictionary[key] = newObject);
// CHECK: [[TWELVE:// CHECK-NEXT: [[THIRTEEN:// CHECK-NEXT: [[FOURTEEN:// CHECK-NEXT: [[SIXTEEN:// CHECK-NEXT: [[SEVENTEEN:// CHECK-NEXT: call void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, i8*, i8*)*)(i8* [[SEVENTEEN]], i8* [[SIXTEEN]], i8* [[FOURTEEN]], i8* [[THIRTEEN]])
// CHECK-NEXT: store i8* [[FOURTEEN]], i8** [[val:}