Author: kremenek
Date: Thu Mar 12 17:15:08 2009
New Revision: 66830

URL: http://llvm.org/viewvc/llvm-project?rev=66830&view=rev
Log:
Fix crash when using TypedViewRegions and ObjCQualifiedIdTypes 
(TypedViewRegion::getLValueType() was not implemented).

Added:
    cfe/trunk/test/Analysis/region-1.m
Modified:
    cfe/trunk/include/clang/Analysis/PathSensitive/MemRegion.h

Modified: cfe/trunk/include/clang/Analysis/PathSensitive/MemRegion.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Analysis/PathSensitive/MemRegion.h?rev=66830&r1=66829&r2=66830&view=diff

==============================================================================
--- cfe/trunk/include/clang/Analysis/PathSensitive/MemRegion.h (original)
+++ cfe/trunk/include/clang/Analysis/PathSensitive/MemRegion.h Thu Mar 12 
17:15:08 2009
@@ -238,7 +238,6 @@
 
 class TypedViewRegion : public TypedRegion {
   friend class MemRegionManager;
-
   QualType LValueType;
 
   TypedViewRegion(QualType lvalueType, const MemRegion* sreg)
@@ -251,6 +250,10 @@
 
   void print(llvm::raw_ostream& os) const;
   
+  QualType getLValueType(ASTContext&) const {
+    return LValueType;
+  }
+
   QualType getRValueType(ASTContext&) const {
     const PointerType* PTy = LValueType->getAsPointerType();
     assert(PTy);

Added: cfe/trunk/test/Analysis/region-1.m
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/region-1.m?rev=66830&view=auto

==============================================================================
--- cfe/trunk/test/Analysis/region-1.m (added)
+++ cfe/trunk/test/Analysis/region-1.m Thu Mar 12 17:15:08 2009
@@ -0,0 +1,90 @@
+// RUN: clang -analyze -checker-cfref -analyzer-store=basic -verify %s &&
+// RUN: clang -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];
+  }
+}


_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to