From 799a6a6850af625946bb8d88ca960bb6604e3858 Mon Sep 17 00:00:00 2001 From: Steve Naroff Date: Fri, 30 May 2008 23:23:16 +0000 Subject: [PATCH] Teach Expr::isLvalue() about ObjC properties. For now, all properties are writable. Added a FIXME for another day. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51800 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/AST/Expr.cpp | 2 ++ test/Sema/objc-property-6.m | 69 +++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 test/Sema/objc-property-6.m diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp index eb9add9e12..6b0eb048b9 100644 --- a/lib/AST/Expr.cpp +++ b/lib/AST/Expr.cpp @@ -405,6 +405,8 @@ Expr::isLvalueResult Expr::isLvalue() const { return LV_Valid; case ObjCIvarRefExprClass: // ObjC instance variables are lvalues. return LV_Valid; + case ObjCPropertyRefExprClass: // FIXME: check if read-only property. + return LV_Valid; case PreDefinedExprClass: return LV_Valid; case CXXDefaultArgExprClass: diff --git a/test/Sema/objc-property-6.m b/test/Sema/objc-property-6.m new file mode 100644 index 0000000000..a51994d3d4 --- /dev/null +++ b/test/Sema/objc-property-6.m @@ -0,0 +1,69 @@ +// RUN: clang -fsyntax-only -verify %s +# 1 "" +# 1 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 1 3 +typedef signed char BOOL; +typedef unsigned int NSUInteger; +typedef struct _NSZone NSZone; + +@class NSInvocation, NSMethodSignature, NSCoder, NSString, NSEnumerator; + +@protocol NSObject +- (BOOL)isEqual:(id)object; ++ class; +@end + +@protocol NSCopying +- (id)copyWithZone:(NSZone *)zone; +@end + +@protocol NSMutableCopying +- (id)mutableCopyWithZone:(NSZone *)zone; +@end + +@protocol NSCoding +- (void)encodeWithCoder:(NSCoder *)aCoder; +@end + +@interface NSObject {} +@end + +typedef struct {} NSFastEnumerationState; + +@protocol NSFastEnumeration +- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len; +@end + +@interface NSArray : NSObject +- (NSUInteger)count; +@end + +@interface NSMutableArray : NSArray +- (void)addObject:(id)anObject; ++ (id)arrayWithCapacity:(int)numItems; +@end + +@interface NSBundle : NSObject {} ++ (NSBundle *)bundleForClass:(Class)aClass; +- (NSString *)bundlePath; +- (void)setBundlePath:(NSString *)x; +@end + +@interface NSException : NSObject {} +@end + +@class NSArray, NSDictionary, NSError, NSString, NSURL; + +@interface DTPlugInManager : NSObject +@end + +@implementation DTPlugInManager ++ (DTPlugInManager *)defaultPlugInManager { + @try { + NSMutableArray *plugInPaths = [NSMutableArray arrayWithCapacity:100]; + NSBundle *frameworkBundle = [NSBundle bundleForClass:[DTPlugInManager class]]; + frameworkBundle.bundlePath = 0; + [plugInPaths addObject:frameworkBundle.bundlePath]; + } + @catch (NSException *exception) {} +} +@end