diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2013-06-14 21:14:10 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2013-06-14 21:14:10 +0000 |
commit | 31a5bcc24ea1145de4c9470f6b803f4decf27c87 (patch) | |
tree | 900b98e9734fe2e7137413a45c43f0901a612e89 /clang/lib/Sema/SemaDeclObjC.cpp | |
parent | ab2436ee832df6728941b7af247b2f6a20ec0285 (diff) | |
download | bcm5719-llvm-31a5bcc24ea1145de4c9470f6b803f4decf27c87.tar.gz bcm5719-llvm-31a5bcc24ea1145de4c9470f6b803f4decf27c87.zip |
Unify return type checking for functions and ObjC methods. Move all the
random checks for ObjC object return types to SemaType.cpp.
Fixes issue with ObjC method type checking reported on cfe-dev.
llvm-svn: 184006
Diffstat (limited to 'clang/lib/Sema/SemaDeclObjC.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDeclObjC.cpp | 17 |
1 files changed, 3 insertions, 14 deletions
diff --git a/clang/lib/Sema/SemaDeclObjC.cpp b/clang/lib/Sema/SemaDeclObjC.cpp index 21d66d04976..07282935c8a 100644 --- a/clang/lib/Sema/SemaDeclObjC.cpp +++ b/clang/lib/Sema/SemaDeclObjC.cpp @@ -3009,14 +3009,9 @@ Decl *Sema::ActOnMethodDeclaration( if (ReturnType) { resultDeclType = GetTypeFromParser(ReturnType, &ResultTInfo); - // Methods cannot return interface types. All ObjC objects are - // passed by reference. - if (resultDeclType->isObjCObjectType()) { - Diag(MethodLoc, diag::err_object_cannot_be_passed_returned_by_value) - << 0 << resultDeclType; + if (CheckFunctionReturnType(resultDeclType, MethodLoc)) return 0; - } - + HasRelatedResultType = (resultDeclType == Context.getObjCInstanceType()); } else { // get the type for "id". resultDeclType = Context.getObjCIdType(); @@ -3099,14 +3094,8 @@ Decl *Sema::ActOnMethodDeclaration( else // Perform the default array/function conversions (C99 6.7.5.3p[7,8]). ArgType = Context.getAdjustedParameterType(ArgType); - if (ArgType->isObjCObjectType()) { - Diag(Param->getLocation(), - diag::err_object_cannot_be_passed_returned_by_value) - << 1 << ArgType; - Param->setInvalidDecl(); - } + Param->setDeclContext(ObjCMethod); - Params.push_back(Param); } |