]> granicus.if.org Git - clang/commitdiff
objective-C: don't crash after diagnosing
authorFariborz Jahanian <fjahanian@apple.com>
Wed, 6 Mar 2013 00:37:40 +0000 (00:37 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Wed, 6 Mar 2013 00:37:40 +0000 (00:37 +0000)
using object subscripting without declaring objectForKeyedSubscript:
// rdar://13333205

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@176539 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaExpr.cpp
test/SemaObjC/boxing-illegal.m [moved from test/SemaObjC/boxing-illegal-types.m with 78% similarity]

index e1b9950ecaee7487288affc73bbbb8874a707192..840a71461e264bd5ba24f15c98e153363882db15 100644 (file)
@@ -547,7 +547,7 @@ ExprResult Sema::UsualUnaryConversions(Expr *E) {
   // First, convert to an r-value.
   ExprResult Res = DefaultFunctionArrayLvalueConversion(E);
   if (Res.isInvalid())
-    return Owned(E);
+    return ExprError();
   E = Res.take();
 
   QualType Ty = E->getType();
@@ -598,7 +598,7 @@ ExprResult Sema::DefaultArgumentPromotion(Expr *E) {
 
   ExprResult Res = UsualUnaryConversions(E);
   if (Res.isInvalid())
-    return Owned(E);
+    return ExprError();
   E = Res.take();
 
   // If this is a 'float' or '__fp16' (CVR qualified or typedef) promote to
similarity index 78%
rename from test/SemaObjC/boxing-illegal-types.m
rename to test/SemaObjC/boxing-illegal.m
index ad45b11f2d9c411024a89d31a829637ba21d9549..59b5c8b710d2de47451d439d6757fada5c258d11 100644 (file)
@@ -56,3 +56,20 @@ void testEnum(void *p) {
   box = @(ME_foo);
   box = @(*(enum ForwE*)p); // expected-error {{incomplete type 'enum ForwE' used in a boxed expression}}
 }
+
+// rdar://13333205
+@class NSMutableDictionary;
+
+@interface NSMutableArray
++ (NSMutableArray*) array;
+@end
+
+NSMutableDictionary* mBars;
+
+__attribute((objc_root_class)) @interface rdar13333205 @end
+
+@implementation rdar13333205
+- (void) insertBar:(id)preset ofKind:(id) kind atIndex:(int)index {
+  NSMutableArray* presetArray = mBars[kind] ?: [NSMutableArray array]; // expected-error {{expected method to read dictionary element not found on object of type 'NSMutableDictionary *'}}
+}
+@end