]> granicus.if.org Git - clang/commitdiff
C return types must be complete as well.
authorFariborz Jahanian <fjahanian@apple.com>
Wed, 16 Jun 2010 19:56:08 +0000 (19:56 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Wed, 16 Jun 2010 19:56:08 +0000 (19:56 +0000)
Moved check before we build the ObjCMessageExpr node.
(PR7386 related).

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

lib/Sema/SemaExprObjC.cpp

index ed6e917f551c6b342f4c57da5345cde477f58014..520ea2af91ba3e1cf4522d6ed910ee8879eb58c3 100644 (file)
@@ -1007,6 +1007,12 @@ Sema::OwningExprResult Sema::BuildInstanceMessage(ExprArg ReceiverE,
   if (CheckMessageArgumentTypes(Args, NumArgs, Sel, Method, false,
                                 LBracLoc, RBracLoc, ReturnType))
     return ExprError();
+  
+  if (!ReturnType->isVoidType()) {
+    if (RequireCompleteType(LBracLoc, ReturnType, 
+                            diag::err_illegal_message_expr_incomplete_type))
+      return ExprError();
+  }
 
   // Construct the appropriate ObjCMessageExpr instance.
   Expr *Result;
@@ -1018,11 +1024,6 @@ Sema::OwningExprResult Sema::BuildInstanceMessage(ExprArg ReceiverE,
   else
     Result = ObjCMessageExpr::Create(Context, ReturnType, LBracLoc, Receiver, 
                                      Sel, Method, Args, NumArgs, RBracLoc);
-  if (Context.getLangOptions().CPlusPlus && !ReturnType->isVoidType()) {
-    if (RequireCompleteType(LBracLoc, ReturnType, 
-                      diag::err_illegal_message_expr_incomplete_type))
-      return ExprError();
-    }
   return MaybeBindToTemporary(Result);
 }