[cfe-commits] r130045 - in /cfe/trunk: lib/Sema/SemaDeclObjC.cpp test/SemaObjCXX/parameters.mm

John McCall rjmccall at apple.com
Fri Apr 22 19:46:07 PDT 2011


Author: rjmccall
Date: Fri Apr 22 21:46:06 2011
New Revision: 130045

URL: http://llvm.org/viewvc/llvm-project?rev=130045&view=rev
Log:
Diagnose C++ abstract parameters for Objective-C methods.


Modified:
    cfe/trunk/lib/Sema/SemaDeclObjC.cpp
    cfe/trunk/test/SemaObjCXX/parameters.mm

Modified: cfe/trunk/lib/Sema/SemaDeclObjC.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclObjC.cpp?rev=130045&r1=130044&r2=130045&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaDeclObjC.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDeclObjC.cpp Fri Apr 22 21:46:06 2011
@@ -1803,17 +1803,9 @@
       ? DI->getTypeLoc().getBeginLoc()
       : ArgInfo[i].NameLoc;
 
-    ParmVarDecl* Param
-      = ParmVarDecl::Create(Context, ObjCMethod,
-                            StartLoc, ArgInfo[i].NameLoc, ArgInfo[i].Name,
-                            ArgType, DI, SC_None, SC_None, 0);
-
-    if (ArgType->isObjCObjectType()) {
-      Diag(ArgInfo[i].NameLoc,
-           diag::err_object_cannot_be_passed_returned_by_value)
-        << 1 << ArgType;
-      Param->setInvalidDecl();
-    }
+    ParmVarDecl* Param = CheckParameter(ObjCMethod, StartLoc,
+                                        ArgInfo[i].NameLoc, ArgInfo[i].Name,
+                                        ArgType, DI, SC_None, SC_None);
 
     Param->setObjCDeclQualifier(
       CvtQTToAstBitMask(ArgInfo[i].DeclSpec.getObjCDeclQualifier()));

Modified: cfe/trunk/test/SemaObjCXX/parameters.mm
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjCXX/parameters.mm?rev=130045&r1=130044&r2=130045&view=diff
==============================================================================
--- cfe/trunk/test/SemaObjCXX/parameters.mm (original)
+++ cfe/trunk/test/SemaObjCXX/parameters.mm Fri Apr 22 21:46:06 2011
@@ -10,3 +10,8 @@
 
 X0<A> x0a; // expected-note{{instantiation}}
 
+
+struct test2 { virtual void foo() = 0; }; // expected-note {{unimplemented}}
+ at interface Test2
+- (void) foo: (test2) foo; // expected-error {{parameter type 'test2' is an abstract class}}
+ at end





More information about the cfe-commits mailing list