// RUN: clang-cc -analyze -checker-cfref -analyzer-store=basic -verify %s &&
// RUN: clang-cc -analyze -checker-cfref -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;  // expected-warning{{cannot find protocol}}
@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; // expected-warning 2 {{cannot find protocol}}
@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 {
}
- (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];
  }
}
