diff clang/test/SemaObjC/objc-container-subscripting.m @ 150:1d019706d866

LLVM10
author anatofuz
date Thu, 13 Feb 2020 15:10:13 +0900
parents
children c4bab56944e8
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/clang/test/SemaObjC/objc-container-subscripting.m	Thu Feb 13 15:10:13 2020 +0900
@@ -0,0 +1,42 @@
+// RUN: %clang_cc1  -fsyntax-only -verify %s
+
+typedef unsigned int size_t;
+@protocol P @end
+
+@interface NSMutableArray
+- (id)objectAtIndexedSubscript:(double)index; // expected-note {{parameter of type 'double' is declared here}}
+- (void)setObject:(id *)object atIndexedSubscript:(void *)index; // expected-note {{parameter of type 'void *' is declared here}} \
+								 // expected-note {{parameter of type 'id *' is declared here}}
+@end
+@interface I @end
+
+int main() {
+  NSMutableArray<P> * array;
+  id  oldObject = array[10]; // expected-error {{method index parameter type 'double' is not integral type}}
+  array[3] = 0; // expected-error {{method index parameter type 'void *' is not integral type}} \
+                // expected-error {{cannot assign to this array because assigning method's 2nd parameter of type 'id *' is not an Objective-C pointer type}}
+
+  I* iarray;
+  iarray[3] = 0; // expected-error {{expected method to write array element not found on object of type 'I *'}}
+  I* p = iarray[4]; // expected-error {{expected method to read array element not found on object of type 'I *'}}
+
+  oldObject = array[10]++; // expected-error {{illegal operation on Objective-C container subscripting}}
+  oldObject = array[10]--; // expected-error {{illegal operation on Objective-C container subscripting}}
+  oldObject = --array[10]; // expected-error {{illegal operation on Objective-C container subscripting}}
+}
+
+@interface NSMutableDictionary
+- (id)objectForKeyedSubscript:(id*)key; // expected-note {{parameter of type 'id *' is declared here}}
+- (void)setObject:(void*)object forKeyedSubscript:(id*)key; // expected-note {{parameter of type 'void *' is declared here}} \
+                                                            // expected-note {{parameter of type 'id *' is declared here}}
+@end
+@class NSString;
+
+void testDict() {
+  NSMutableDictionary *dictionary;
+  NSString *key;
+  id newObject, oldObject;
+  oldObject = dictionary[key];  // expected-error {{method key parameter type 'id *' is not object type}}
+  dictionary[key] = newObject;  // expected-error {{method object parameter type 'void *' is not object type}} \
+                                // expected-error {{method key parameter type 'id *' is not object type}}
+}