[cfe-commits] r123214 - in /cfe/trunk: lib/Sema/SemaExprObjC.cpp test/SemaObjCXX/message.mm
Douglas Gregor
dgregor at apple.com
Mon Jan 10 19:23:19 PST 2011
Author: dgregor
Date: Mon Jan 10 21:23:19 2011
New Revision: 123214
URL: http://llvm.org/viewvc/llvm-project?rev=123214&view=rev
Log:
Ensure that the result type of an Objective-C class message send is
complete. However, if it returns a reference type, don't require the
type it refers to to be complete. Fixes <rdar://problem/8807070>.
Modified:
cfe/trunk/lib/Sema/SemaExprObjC.cpp
cfe/trunk/test/SemaObjCXX/message.mm
Modified: cfe/trunk/lib/Sema/SemaExprObjC.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprObjC.cpp?rev=123214&r1=123213&r2=123214&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExprObjC.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExprObjC.cpp Mon Jan 10 21:23:19 2011
@@ -840,6 +840,11 @@
LBracLoc, RBracLoc, ReturnType, VK))
return ExprError();
+ if (Method && !Method->getResultType()->isVoidType() &&
+ RequireCompleteType(LBracLoc, Method->getResultType(),
+ diag::err_illegal_message_expr_incomplete_type))
+ return ExprError();
+
// Construct the appropriate ObjCMessageExpr.
Expr *Result;
if (SuperLoc.isValid())
@@ -1105,11 +1110,10 @@
LBracLoc, RBracLoc, ReturnType, VK))
return ExprError();
- if (!ReturnType->isVoidType()) {
- if (RequireCompleteType(LBracLoc, ReturnType,
- diag::err_illegal_message_expr_incomplete_type))
- return ExprError();
- }
+ if (Method && !Method->getResultType()->isVoidType() &&
+ RequireCompleteType(LBracLoc, Method->getResultType(),
+ diag::err_illegal_message_expr_incomplete_type))
+ return ExprError();
// Construct the appropriate ObjCMessageExpr instance.
Expr *Result;
Modified: cfe/trunk/test/SemaObjCXX/message.mm
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjCXX/message.mm?rev=123214&r1=123213&r2=123214&view=diff
==============================================================================
--- cfe/trunk/test/SemaObjCXX/message.mm (original)
+++ cfe/trunk/test/SemaObjCXX/message.mm Mon Jan 10 21:23:19 2011
@@ -112,3 +112,16 @@
A *im = [A create:(void (*)(void *cgl_ctx, X r, void *data)) fun
callbackData:ptr];
}
+
+// <rdar://problem/8807070>
+template<typename T> struct X1; // expected-note{{template is declared here}}
+
+ at interface B
++ (X1<int>)blah;
++ (X1<float>&)blarg;
+ at end
+
+void f() {
+ [B blah]; // expected-error{{implicit instantiation of undefined template 'X1<int>'}}
+ [B blarg];
+}
More information about the cfe-commits
mailing list