From dce40c518d7bb7726f15276ac31de8fefdbf8fd0 Mon Sep 17 00:00:00 2001 From: Gabor Horvath Date: Fri, 18 Sep 2015 21:15:37 +0000 Subject: [Static Analyzer] General type checker based on dynamic type information. Differential Revision: http://reviews.llvm.org/D12973 llvm-svn: 248041 --- clang/test/Analysis/generics.m | 615 ++++++++++++++++++++++++++--------------- 1 file changed, 396 insertions(+), 219 deletions(-) (limited to 'clang/test/Analysis/generics.m') diff --git a/clang/test/Analysis/generics.m b/clang/test/Analysis/generics.m index 0762181585c..416f63c152d 100644 --- a/clang/test/Analysis/generics.m +++ b/clang/test/Analysis/generics.m @@ -1,5 +1,5 @@ -// RUN: %clang_cc1 -analyze -analyzer-checker=core,alpha.osx.cocoa.ObjCGenerics -verify -Wno-objc-method-access %s -// RUN: %clang_cc1 -analyze -analyzer-checker=core,alpha.osx.cocoa.ObjCGenerics -verify -Wno-objc-method-access %s -analyzer-output=plist -o %t.plist +// RUN: %clang_cc1 -analyze -analyzer-checker=core,alpha.osx.cocoa.ObjCGenerics,alpha.core.DynamicTypeChecker -verify -Wno-objc-method-access %s +// RUN: %clang_cc1 -analyze -analyzer-checker=core,alpha.osx.cocoa.ObjCGenerics,alpha.core.DynamicTypeChecker -verify -Wno-objc-method-access %s -analyzer-output=plist -o %t.plist // RUN: FileCheck --input-file %t.plist %s #if !__has_feature(objc_generics) @@ -236,13 +236,13 @@ void enforceDynamicRulesInsteadOfStatic(NSArray *a) { void workWithProperties(NSArray *a) { NSArray *b = a; - NSString *str = [b getObjAtIndex: 0]; // expected-warning {{Conversion}} + NSString *str = [b getObjAtIndex: 0]; // expected-warning {{Object has a dynamic type 'NSNumber *' which is incompatible with static type 'NSString *'}} NSNumber *num = [b getObjAtIndex: 0]; - str = [b firstObject]; // expected-warning {{Conversion}} + str = [b firstObject]; // expected-warning {{Object has a dynamic type 'NSNumber *' which is incompatible with static type 'NSString *'}} num = [b firstObject]; - str = b.firstObject; // expected-warning {{Conversion}} + str = b.firstObject; // expected-warning {{Object has a dynamic type 'NSNumber *' which is incompatible with static type 'NSString *'}} num = b.firstObject; - str = b[0]; // expected-warning {{Conversion}} + str = b[0]; // expected-warning {{Object has a dynamic type 'NSNumber *' which is incompatible with static type 'NSString *'}} num = b[0]; } @@ -318,15 +318,14 @@ void eraseSpecialization(NSArray *> *arr) { void returnToUnrelatedType(NSArray *> *arr) { NSArray *erased = arr; - NSSet* a = [erased firstObject]; // expected-warning {{Conversion}} + NSSet* a = [erased firstObject]; // expected-warning {{Object has a dynamic type 'NSArray *' which is incompatible with static type 'NSSet *'}} (void)a; } void returnToIdVariable(NSArray *arr) { NSArray *erased = arr; id a = [erased firstObject]; - // TODO: Warn in this case. Possibly in a separate checker. - NSNumber *res = a; + NSNumber *res = a; // expected-warning {{Object has a dynamic type 'NSString *' which is incompatible with static type 'NSNumber *'}} } // CHECK: @@ -4428,35 +4427,6 @@ void returnToIdVariable(NSArray *arr) { // CHECK: path // CHECK: // CHECK: -// CHECK: kindevent -// CHECK: location -// CHECK: -// CHECK: line238 -// CHECK: col16 -// CHECK: file0 -// CHECK: -// CHECK: ranges -// CHECK: -// CHECK: -// CHECK: -// CHECK: line238 -// CHECK: col16 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line238 -// CHECK: col16 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: -// CHECK: depth0 -// CHECK: extended_message -// CHECK: Type 'NSArray<NSNumber *> *' is inferred from implicit cast (from 'NSArray<NSNumber *> *' to 'NSArray *') -// CHECK: message -// CHECK: Type 'NSArray<NSNumber *> *' is inferred from implicit cast (from 'NSArray<NSNumber *> *' to 'NSArray *') -// CHECK: -// CHECK: // CHECK: kindcontrol // CHECK: edges // CHECK: @@ -4549,57 +4519,57 @@ void returnToIdVariable(NSArray *arr) { // CHECK: // CHECK: depth0 // CHECK: extended_message -// CHECK: Conversion from value of type 'NSNumber *' to incompatible type 'NSString *' +// CHECK: Type 'NSNumber *' is inferred from this context // CHECK: message -// CHECK: Conversion from value of type 'NSNumber *' to incompatible type 'NSString *' +// CHECK: Type 'NSNumber *' is inferred from this context // CHECK: -// CHECK: -// CHECK: descriptionConversion from value of type 'NSNumber *' to incompatible type 'NSString *' -// CHECK: categoryCore Foundation/Objective-C -// CHECK: typeGenerics -// CHECK: check_namecore.DynamicTypePropagation -// CHECK: issue_context_kindfunction -// CHECK: issue_contextworkWithProperties -// CHECK: issue_hash2 -// CHECK: location -// CHECK: -// CHECK: line239 -// CHECK: col19 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: -// CHECK: path -// CHECK: // CHECK: // CHECK: kindevent // CHECK: location // CHECK: -// CHECK: line238 -// CHECK: col16 +// CHECK: line239 +// CHECK: col19 // CHECK: file0 // CHECK: // CHECK: ranges // CHECK: // CHECK: // CHECK: -// CHECK: line238 -// CHECK: col16 +// CHECK: line239 +// CHECK: col19 // CHECK: file0 // CHECK: // CHECK: -// CHECK: line238 -// CHECK: col16 +// CHECK: line239 +// CHECK: col38 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: depth0 // CHECK: extended_message -// CHECK: Type 'NSArray<NSNumber *> *' is inferred from implicit cast (from 'NSArray<NSNumber *> *' to 'NSArray *') +// CHECK: Object has a dynamic type 'NSNumber *' which is incompatible with static type 'NSString *' // CHECK: message -// CHECK: Type 'NSArray<NSNumber *> *' is inferred from implicit cast (from 'NSArray<NSNumber *> *' to 'NSArray *') +// CHECK: Object has a dynamic type 'NSNumber *' which is incompatible with static type 'NSString *' // CHECK: +// CHECK: +// CHECK: descriptionObject has a dynamic type 'NSNumber *' which is incompatible with static type 'NSString *' +// CHECK: categoryType Error +// CHECK: typeDynamic and static type mismatch +// CHECK: check_namealpha.core.DynamicTypeChecker +// CHECK: issue_context_kindfunction +// CHECK: issue_contextworkWithProperties +// CHECK: issue_hash2 +// CHECK: location +// CHECK: +// CHECK: line239 +// CHECK: col19 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: +// CHECK: path +// CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges @@ -4693,57 +4663,57 @@ void returnToIdVariable(NSArray *arr) { // CHECK: // CHECK: depth0 // CHECK: extended_message -// CHECK: Conversion from value of type 'NSNumber *' to incompatible type 'NSString *' +// CHECK: Type 'NSNumber *' is inferred from this context // CHECK: message -// CHECK: Conversion from value of type 'NSNumber *' to incompatible type 'NSString *' +// CHECK: Type 'NSNumber *' is inferred from this context // CHECK: -// CHECK: -// CHECK: descriptionConversion from value of type 'NSNumber *' to incompatible type 'NSString *' -// CHECK: categoryCore Foundation/Objective-C -// CHECK: typeGenerics -// CHECK: check_namecore.DynamicTypePropagation -// CHECK: issue_context_kindfunction -// CHECK: issue_contextworkWithProperties -// CHECK: issue_hash4 -// CHECK: location -// CHECK: -// CHECK: line241 -// CHECK: col9 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: -// CHECK: path -// CHECK: // CHECK: // CHECK: kindevent // CHECK: location // CHECK: -// CHECK: line238 -// CHECK: col16 +// CHECK: line241 +// CHECK: col9 // CHECK: file0 // CHECK: // CHECK: ranges // CHECK: // CHECK: // CHECK: -// CHECK: line238 -// CHECK: col16 +// CHECK: line241 +// CHECK: col9 // CHECK: file0 // CHECK: // CHECK: -// CHECK: line238 -// CHECK: col16 +// CHECK: line241 +// CHECK: col23 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: depth0 // CHECK: extended_message -// CHECK: Type 'NSArray<NSNumber *> *' is inferred from implicit cast (from 'NSArray<NSNumber *> *' to 'NSArray *') +// CHECK: Object has a dynamic type 'NSNumber *' which is incompatible with static type 'NSString *' // CHECK: message -// CHECK: Type 'NSArray<NSNumber *> *' is inferred from implicit cast (from 'NSArray<NSNumber *> *' to 'NSArray *') +// CHECK: Object has a dynamic type 'NSNumber *' which is incompatible with static type 'NSString *' // CHECK: +// CHECK: +// CHECK: descriptionObject has a dynamic type 'NSNumber *' which is incompatible with static type 'NSString *' +// CHECK: categoryType Error +// CHECK: typeDynamic and static type mismatch +// CHECK: check_namealpha.core.DynamicTypeChecker +// CHECK: issue_context_kindfunction +// CHECK: issue_contextworkWithProperties +// CHECK: issue_hash4 +// CHECK: location +// CHECK: +// CHECK: line241 +// CHECK: col9 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: +// CHECK: path +// CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges @@ -4837,57 +4807,57 @@ void returnToIdVariable(NSArray *arr) { // CHECK: // CHECK: depth0 // CHECK: extended_message -// CHECK: Conversion from value of type 'NSNumber *' to incompatible type 'NSString *' +// CHECK: Type 'NSNumber *' is inferred from this context // CHECK: message -// CHECK: Conversion from value of type 'NSNumber *' to incompatible type 'NSString *' +// CHECK: Type 'NSNumber *' is inferred from this context // CHECK: -// CHECK: -// CHECK: descriptionConversion from value of type 'NSNumber *' to incompatible type 'NSString *' -// CHECK: categoryCore Foundation/Objective-C -// CHECK: typeGenerics -// CHECK: check_namecore.DynamicTypePropagation -// CHECK: issue_context_kindfunction -// CHECK: issue_contextworkWithProperties -// CHECK: issue_hash6 -// CHECK: location -// CHECK: -// CHECK: line243 -// CHECK: col11 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: -// CHECK: path -// CHECK: // CHECK: // CHECK: kindevent // CHECK: location // CHECK: -// CHECK: line238 -// CHECK: col16 +// CHECK: line243 +// CHECK: col9 // CHECK: file0 // CHECK: // CHECK: ranges // CHECK: // CHECK: // CHECK: -// CHECK: line238 -// CHECK: col16 +// CHECK: line243 +// CHECK: col9 // CHECK: file0 // CHECK: // CHECK: -// CHECK: line238 -// CHECK: col16 +// CHECK: line243 +// CHECK: col21 // CHECK: file0 // CHECK: // CHECK: // CHECK: // CHECK: depth0 // CHECK: extended_message -// CHECK: Type 'NSArray<NSNumber *> *' is inferred from implicit cast (from 'NSArray<NSNumber *> *' to 'NSArray *') +// CHECK: Object has a dynamic type 'NSNumber *' which is incompatible with static type 'NSString *' // CHECK: message -// CHECK: Type 'NSArray<NSNumber *> *' is inferred from implicit cast (from 'NSArray<NSNumber *> *' to 'NSArray *') +// CHECK: Object has a dynamic type 'NSNumber *' which is incompatible with static type 'NSString *' // CHECK: +// CHECK: +// CHECK: descriptionObject has a dynamic type 'NSNumber *' which is incompatible with static type 'NSString *' +// CHECK: categoryType Error +// CHECK: typeDynamic and static type mismatch +// CHECK: check_namealpha.core.DynamicTypeChecker +// CHECK: issue_context_kindfunction +// CHECK: issue_contextworkWithProperties +// CHECK: issue_hash6 +// CHECK: location +// CHECK: +// CHECK: line243 +// CHECK: col9 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: +// CHECK: path +// CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges @@ -4981,15 +4951,44 @@ void returnToIdVariable(NSArray *arr) { // CHECK: // CHECK: depth0 // CHECK: extended_message -// CHECK: Conversion from value of type 'NSNumber *' to incompatible type 'NSString *' +// CHECK: Type 'NSNumber *' is inferred from this context // CHECK: message -// CHECK: Conversion from value of type 'NSNumber *' to incompatible type 'NSString *' +// CHECK: Type 'NSNumber *' is inferred from this context +// CHECK: +// CHECK: +// CHECK: kindevent +// CHECK: location +// CHECK: +// CHECK: line245 +// CHECK: col9 +// CHECK: file0 +// CHECK: +// CHECK: ranges +// CHECK: +// CHECK: +// CHECK: +// CHECK: line245 +// CHECK: col9 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line245 +// CHECK: col12 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: +// CHECK: depth0 +// CHECK: extended_message +// CHECK: Object has a dynamic type 'NSNumber *' which is incompatible with static type 'NSString *' +// CHECK: message +// CHECK: Object has a dynamic type 'NSNumber *' which is incompatible with static type 'NSString *' // CHECK: // CHECK: -// CHECK: descriptionConversion from value of type 'NSNumber *' to incompatible type 'NSString *' -// CHECK: categoryCore Foundation/Objective-C -// CHECK: typeGenerics -// CHECK: check_namecore.DynamicTypePropagation +// CHECK: descriptionObject has a dynamic type 'NSNumber *' which is incompatible with static type 'NSString *' +// CHECK: categoryType Error +// CHECK: typeDynamic and static type mismatch +// CHECK: check_namealpha.core.DynamicTypeChecker // CHECK: issue_context_kindfunction // CHECK: issue_contextworkWithProperties // CHECK: issue_hash8 @@ -5436,35 +5435,6 @@ void returnToIdVariable(NSArray *arr) { // CHECK: path // CHECK: // CHECK: -// CHECK: kindevent -// CHECK: location -// CHECK: -// CHECK: line289 -// CHECK: col13 -// CHECK: file0 -// CHECK: -// CHECK: ranges -// CHECK: -// CHECK: -// CHECK: -// CHECK: line289 -// CHECK: col13 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line289 -// CHECK: col39 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: -// CHECK: depth0 -// CHECK: extended_message -// CHECK: Type 'NSArray<NSString *> *' is inferred from this context -// CHECK: message -// CHECK: Type 'NSArray<NSString *> *' is inferred from this context -// CHECK: -// CHECK: // CHECK: kindcontrol // CHECK: edges // CHECK: @@ -5557,46 +5527,28 @@ void returnToIdVariable(NSArray *arr) { // CHECK: // CHECK: depth0 // CHECK: extended_message -// CHECK: Conversion from value of type 'NSArray<NSString *> *' to incompatible type 'NSArray<NSNumber *> *' +// CHECK: Type 'NSArray<NSString *> *' is inferred from this context // CHECK: message -// CHECK: Conversion from value of type 'NSArray<NSString *> *' to incompatible type 'NSArray<NSNumber *> *' +// CHECK: Type 'NSArray<NSString *> *' is inferred from this context // CHECK: -// CHECK: -// CHECK: descriptionConversion from value of type 'NSArray<NSString *> *' to incompatible type 'NSArray<NSNumber *> *' -// CHECK: categoryCore Foundation/Objective-C -// CHECK: typeGenerics -// CHECK: check_namecore.DynamicTypePropagation -// CHECK: issue_context_kindfunction -// CHECK: issue_contexttrackedClassVariables -// CHECK: issue_hash2 -// CHECK: location -// CHECK: -// CHECK: line290 -// CHECK: col28 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: -// CHECK: path -// CHECK: // CHECK: // CHECK: kindevent // CHECK: location // CHECK: -// CHECK: line289 -// CHECK: col13 +// CHECK: line290 +// CHECK: col28 // CHECK: file0 // CHECK: // CHECK: ranges // CHECK: // CHECK: // CHECK: -// CHECK: line289 -// CHECK: col13 +// CHECK: line290 +// CHECK: col28 // CHECK: file0 // CHECK: // CHECK: -// CHECK: line289 +// CHECK: line290 // CHECK: col39 // CHECK: file0 // CHECK: @@ -5604,10 +5556,28 @@ void returnToIdVariable(NSArray *arr) { // CHECK: // CHECK: depth0 // CHECK: extended_message -// CHECK: Type 'NSArray<NSString *> *' is inferred from this context +// CHECK: Conversion from value of type 'NSArray<NSString *> *' to incompatible type 'NSArray<NSNumber *> *' // CHECK: message -// CHECK: Type 'NSArray<NSString *> *' is inferred from this context +// CHECK: Conversion from value of type 'NSArray<NSString *> *' to incompatible type 'NSArray<NSNumber *> *' // CHECK: +// CHECK: +// CHECK: descriptionConversion from value of type 'NSArray<NSString *> *' to incompatible type 'NSArray<NSNumber *> *' +// CHECK: categoryCore Foundation/Objective-C +// CHECK: typeGenerics +// CHECK: check_namecore.DynamicTypePropagation +// CHECK: issue_context_kindfunction +// CHECK: issue_contexttrackedClassVariables +// CHECK: issue_hash2 +// CHECK: location +// CHECK: +// CHECK: line290 +// CHECK: col28 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: +// CHECK: path +// CHECK: // CHECK: // CHECK: kindcontrol // CHECK: edges @@ -5701,6 +5671,35 @@ void returnToIdVariable(NSArray *arr) { // CHECK: // CHECK: depth0 // CHECK: extended_message +// CHECK: Type 'NSArray<NSString *> *' is inferred from this context +// CHECK: message +// CHECK: Type 'NSArray<NSString *> *' is inferred from this context +// CHECK: +// CHECK: +// CHECK: kindevent +// CHECK: location +// CHECK: +// CHECK: line291 +// CHECK: col7 +// CHECK: file0 +// CHECK: +// CHECK: ranges +// CHECK: +// CHECK: +// CHECK: +// CHECK: line291 +// CHECK: col7 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line291 +// CHECK: col19 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: +// CHECK: depth0 +// CHECK: extended_message // CHECK: Conversion from value of type 'NSArray<NSString *> *' to incompatible type 'NSArray<NSNumber *> *' // CHECK: message // CHECK: Conversion from value of type 'NSArray<NSString *> *' to incompatible type 'NSArray<NSNumber *> *' @@ -6224,35 +6223,6 @@ void returnToIdVariable(NSArray *arr) { // CHECK: path // CHECK: // CHECK: -// CHECK: kindevent -// CHECK: location -// CHECK: -// CHECK: line320 -// CHECK: col21 -// CHECK: file0 -// CHECK: -// CHECK: ranges -// CHECK: -// CHECK: -// CHECK: -// CHECK: line320 -// CHECK: col21 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: line320 -// CHECK: col23 -// CHECK: file0 -// CHECK: -// CHECK: -// CHECK: -// CHECK: depth0 -// CHECK: extended_message -// CHECK: Type 'NSArray<NSArray<NSString *> *> *' is inferred from implicit cast (from 'NSArray<NSArray<NSString *> *> *' to 'NSArray *') -// CHECK: message -// CHECK: Type 'NSArray<NSArray<NSString *> *> *' is inferred from implicit cast (from 'NSArray<NSArray<NSString *> *> *' to 'NSArray *') -// CHECK: -// CHECK: // CHECK: kindcontrol // CHECK: edges // CHECK: @@ -6345,15 +6315,44 @@ void returnToIdVariable(NSArray *arr) { // CHECK: // CHECK: depth0 // CHECK: extended_message -// CHECK: Conversion from value of type 'NSArray<NSString *> *' to incompatible type 'NSSet *' +// CHECK: Type 'NSArray<NSString *> *' is inferred from this context +// CHECK: message +// CHECK: Type 'NSArray<NSString *> *' is inferred from this context +// CHECK: +// CHECK: +// CHECK: kindevent +// CHECK: location +// CHECK: +// CHECK: line321 +// CHECK: col14 +// CHECK: file0 +// CHECK: +// CHECK: ranges +// CHECK: +// CHECK: +// CHECK: +// CHECK: line321 +// CHECK: col14 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line321 +// CHECK: col33 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: +// CHECK: depth0 +// CHECK: extended_message +// CHECK: Object has a dynamic type 'NSArray<NSString *> *' which is incompatible with static type 'NSSet *' // CHECK: message -// CHECK: Conversion from value of type 'NSArray<NSString *> *' to incompatible type 'NSSet *' +// CHECK: Object has a dynamic type 'NSArray<NSString *> *' which is incompatible with static type 'NSSet *' // CHECK: // CHECK: -// CHECK: descriptionConversion from value of type 'NSArray<NSString *> *' to incompatible type 'NSSet *' -// CHECK: categoryCore Foundation/Objective-C -// CHECK: typeGenerics -// CHECK: check_namecore.DynamicTypePropagation +// CHECK: descriptionObject has a dynamic type 'NSArray<NSString *> *' which is incompatible with static type 'NSSet *' +// CHECK: categoryType Error +// CHECK: typeDynamic and static type mismatch +// CHECK: check_namealpha.core.DynamicTypeChecker // CHECK: issue_context_kindfunction // CHECK: issue_contextreturnToUnrelatedType // CHECK: issue_hash2 @@ -6364,4 +6363,182 @@ void returnToIdVariable(NSArray *arr) { // CHECK: file0 // CHECK: // CHECK: +// CHECK: +// CHECK: path +// CHECK: +// CHECK: +// CHECK: kindcontrol +// CHECK: edges +// CHECK: +// CHECK: +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line326 +// CHECK: col3 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line326 +// CHECK: col9 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line327 +// CHECK: col3 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line327 +// CHECK: col4 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: kindevent +// CHECK: location +// CHECK: +// CHECK: line327 +// CHECK: col10 +// CHECK: file0 +// CHECK: +// CHECK: ranges +// CHECK: +// CHECK: +// CHECK: +// CHECK: line327 +// CHECK: col10 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line327 +// CHECK: col29 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: +// CHECK: depth0 +// CHECK: extended_message +// CHECK: Type 'NSString *' is inferred from this context +// CHECK: message +// CHECK: Type 'NSString *' is inferred from this context +// CHECK: +// CHECK: +// CHECK: kindcontrol +// CHECK: edges +// CHECK: +// CHECK: +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line327 +// CHECK: col3 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line327 +// CHECK: col4 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line328 +// CHECK: col3 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line328 +// CHECK: col10 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: kindcontrol +// CHECK: edges +// CHECK: +// CHECK: +// CHECK: start +// CHECK: +// CHECK: +// CHECK: line328 +// CHECK: col3 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line328 +// CHECK: col10 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: end +// CHECK: +// CHECK: +// CHECK: line328 +// CHECK: col19 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line328 +// CHECK: col19 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: +// CHECK: kindevent +// CHECK: location +// CHECK: +// CHECK: line328 +// CHECK: col19 +// CHECK: file0 +// CHECK: +// CHECK: ranges +// CHECK: +// CHECK: +// CHECK: +// CHECK: line328 +// CHECK: col19 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: line328 +// CHECK: col19 +// CHECK: file0 +// CHECK: +// CHECK: +// CHECK: +// CHECK: depth0 +// CHECK: extended_message +// CHECK: Object has a dynamic type 'NSString *' which is incompatible with static type 'NSNumber *' +// CHECK: message +// CHECK: Object has a dynamic type 'NSString *' which is incompatible with static type 'NSNumber *' +// CHECK: +// CHECK: +// CHECK: descriptionObject has a dynamic type 'NSString *' which is incompatible with static type 'NSNumber *' +// CHECK: categoryType Error +// CHECK: typeDynamic and static type mismatch +// CHECK: check_namealpha.core.DynamicTypeChecker +// CHECK: issue_context_kindfunction +// CHECK: issue_contextreturnToIdVariable +// CHECK: issue_hash3 +// CHECK: location +// CHECK: +// CHECK: line328 +// CHECK: col19 +// CHECK: file0 +// CHECK: +// CHECK: // CHECK: -- cgit v1.2.3