summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/lib/Sema/SemaExprObjC.cpp6
-rw-r--r--clang/test/SemaObjC/message.m12
2 files changed, 16 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaExprObjC.cpp b/clang/lib/Sema/SemaExprObjC.cpp
index f2cd00195fa..a463ab8f83a 100644
--- a/clang/lib/Sema/SemaExprObjC.cpp
+++ b/clang/lib/Sema/SemaExprObjC.cpp
@@ -461,8 +461,12 @@ Sema::ExprResult Sema::ActOnInstanceMessage(ExprTy *receiver, Selector Sel,
Expr **ArgExprs = reinterpret_cast<Expr **>(Args);
Expr *RExpr = static_cast<Expr *>(receiver);
+
+ // If necessary, apply function/array conversion to the receiver.
+ // C99 6.7.5.3p[7,8].
+ DefaultFunctionArrayConversion(RExpr);
+
QualType returnType;
-
QualType ReceiverCType =
Context.getCanonicalType(RExpr->getType()).getUnqualifiedType();
diff --git a/clang/test/SemaObjC/message.m b/clang/test/SemaObjC/message.m
index 94db0148261..7b6a4ee3f79 100644
--- a/clang/test/SemaObjC/message.m
+++ b/clang/test/SemaObjC/message.m
@@ -1,5 +1,10 @@
// RUN: clang-cc -fsyntax-only -verify %s
+typedef struct objc_object {
+ Class isa;
+} *id;
+
+
@interface foo
- (void)meth;
@end
@@ -86,5 +91,10 @@ int test5(int X) {
int b = [S somemsg]; // expected-error {{bad receiver type 'struct S'}}
}
-
+// PR4021
+void foo4() {
+ struct objc_object X[10];
+
+ [X rect];
+}
OpenPOWER on IntegriCloud