| // RUN: %clang_cc1 -analyze -analyzer-experimental-internal-checks -analyzer-check-objc-mem -analyzer-store=basic -verify %s |
| // RUN: %clang_cc1 -analyze -analyzer-experimental-internal-checks -analyzer-check-objc-mem -analyzer-store=region -verify %s |
| // |
| // This test case simply should not crash. It evaluates the logic of not |
| // using MemRegion::getRValueType in incorrect places. |
| |
| typedef signed char BOOL; |
| typedef unsigned int NSUInteger; |
| @class NSInvocation, NSMethodSignature, NSCoder, NSString, NSEnumerator; |
| @protocol NSObject - (BOOL)isEqual:(id)object; |
| - (Class)class; |
| - (BOOL)isLegOfClass:(Class)aClass; |
| @end @protocol NSCoding - (void)encodeWithCoder:(NSCoder *)aCoder; |
| @end @interface NSObject <NSObject> { |
| } |
| @end @class NSArray; |
| @interface NSResponder : NSObject <NSCoding> { |
| } |
| @end @class NSAttributedString, NSEvent, NSFont, NSFormatter, NSImage, NSMenu, NSText, NSView; |
| @class JabasectItem; |
| @protocol EcoClassifier; |
| @protocol EcoClassInterfaceCommons <EcoClassifier> @end @protocol EcoImplementation; |
| @protocol EcoBehavioredClassifier <EcoClassInterfaceCommons> - (NSArray *) implementations; |
| @end enum { |
| CK_UNRESTRICTED= 0, CK_READ_ONLY, CK_ADD_ONLY, CK_REMOVE_ONLY }; |
| @protocol EcoClass <EcoBehavioredClassifier> - (NSArray *) ownedAttributes; |
| @end @protocol EcoNamespace; |
| @protocol EcoType; |
| @protocol EcoClassifier <EcoNamespace,EcoType> - (NSArray *) features; |
| @end @protocol EcoComment; |
| @protocol EcoElement <NSObject> - (NSArray *) ownedElements; |
| @end @protocol EcoDirectedRelationship; |
| @protocol EcoNamedElement <EcoElement> - (NSString *) name; |
| @end extern NSString *const JabaPathSeparator; |
| @protocol EcoNamespace <EcoNamedElement> - (NSArray *) Legs; |
| @end enum { |
| PDK_IN=0, PDK_INOUT, PDK_OUT, PDK_RETURN }; |
| @interface EcoElementImp : NSObject <EcoElement, NSCoding> { |
| } |
| @end @class EcoNamespace; |
| @interface EcoNamedElementImp : EcoElementImp <EcoNamedElement>{ |
| } |
| @end @interface EcoNamespaceImp : EcoNamedElementImp <EcoNamespace> { |
| } |
| @end @class JabaSCDocController, JabaSCDisplaySpecification; |
| @interface JabaSCSharedDiagramViewController : NSObject { |
| } |
| @end extern NSString *const JabaSCsectGraphicNamesectIdentifier; |
| @interface EcoClassifierImp : EcoNamespaceImp <EcoClassifier> { |
| } |
| @end @class EcoOperationImp; |
| @interface EcoClassImp : EcoClassifierImp <EcoClass> { |
| } |
| @end extern NSString *const JabaAddedUMLElements; |
| @class JabaSCClass, JabaSCInterface, JabaSCOperation; |
| @class DosLegVaseSymbol, DosProtocolSymbol, DosMethodSymbol, DosFileReference; |
| @interface HancodeFett : NSObject { |
| } |
| + (DosLegVaseSymbol *) symbolFromClass: (JabaSCClass *) clz; |
| @end enum _JabaSourceLanguage { |
| JabaSourceUnknown=0, JabaSourcePrawn, JabaSourceC, JabaSourceCPP, JabaSourceObjectiveC }; |
| typedef NSUInteger JabaSourceLanguage; |
| @protocol JabaSCClassifier <EcoClassInterfaceCommons> - (JabaSourceLanguage)language; |
| @end @interface JabaSCClass : EcoClassImp <JabaSCClassifier> { |
| } |
| @end @class DosGlobalID, DosPQuLC, DosPQuUnLC; |
| @protocol XCProxyObjectProtocol - (id) representedObject; |
| @end typedef union _Dossymbollocation { |
| } |
| DosRecordArrPrl; |
| @interface DosIndexEntry : NSObject { |
| } |
| @end @class DosProjectIndex, DosTextPapyruswiggle, DosDocPapyruswiggle, DosLegVaseSymbol; |
| @interface DosSymbol : DosIndexEntry { |
| } |
| @end @interface DosLegVaseSymbol : DosSymbol { |
| } |
| @end typedef enum _DosTextRangeType { |
| Dos_CharacterRangeType = 0, Dos_LineRangeType = 1 } |
| DosTextRangeType; |
| @implementation JabaSCSharedDiagramViewController + (NSImage *)findImageNamed:(NSString *)name { |
| return 0; |
| } |
| - (void)revealSourceInEditor:(JabasectItem *)sectItem duperGesture:(BOOL)duperGesture { |
| id <EcoNamedElement> selectedElement = [sectItem representedObject]; |
| id <EcoNamedElement> selectedClassifier = selectedElement; |
| DosSymbol *symbol=((void *)0); |
| if([selectedClassifier isLegOfClass:[JabaSCClass class]]) { |
| symbol = [HancodeFett symbolFromClass:(JabaSCClass *) selectedClassifier]; |
| } |
| } |
| @end |