diff options
author | John McCall <rjmccall@apple.com> | 2013-03-04 07:34:02 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2013-03-04 07:34:02 +0000 |
commit | 48f904271effd381ec3c1ae33b97d1ec7d95860a (patch) | |
tree | 2ffae6e7b7d7bfcf22f6570ca1b826c4822133e3 /lib/Sema/SemaExprObjC.cpp | |
parent | 0353a7b2df9dc36784f9ec354c266f9c603053e1 (diff) |
Centralize and refine the __unknown_anytype argument rules
and be sure to apply them whether or not the debugger gave
us a method declaration.
rdar://12565338
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@176432 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaExprObjC.cpp')
-rw-r--r-- | lib/Sema/SemaExprObjC.cpp | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/lib/Sema/SemaExprObjC.cpp b/lib/Sema/SemaExprObjC.cpp index 74a3292054..75f8c48022 100644 --- a/lib/Sema/SemaExprObjC.cpp +++ b/lib/Sema/SemaExprObjC.cpp @@ -1135,10 +1135,16 @@ bool Sema::CheckMessageArgumentTypes(QualType ReceiverType, if (Args[i]->isTypeDependent()) continue; - ExprResult Result = DefaultArgumentPromotion(Args[i]); - if (Result.isInvalid()) + ExprResult result; + if (getLangOpts().DebuggerSupport) { + QualType paramTy; // ignored + result = checkUnknownAnyArg(lbrac, Args[i], paramTy); + } else { + result = DefaultArgumentPromotion(Args[i]); + } + if (result.isInvalid()) return true; - Args[i] = Result.take(); + Args[i] = result.take(); } unsigned DiagID; @@ -1199,14 +1205,17 @@ bool Sema::CheckMessageArgumentTypes(QualType ReceiverType, // If the parameter is __unknown_anytype, infer its type // from the argument. if (param->getType() == Context.UnknownAnyTy) { - QualType paramType = checkUnknownAnyArg(argExpr); - if (paramType.isNull()) { + QualType paramType; + ExprResult argE = checkUnknownAnyArg(lbrac, argExpr, paramType); + if (argE.isInvalid()) { IsError = true; - continue; - } + } else { + Args[i] = argE.take(); - // Update the parameter type in-place. - param->setType(paramType); + // Update the parameter type in-place. + param->setType(paramType); + } + continue; } if (RequireCompleteType(argExpr->getSourceRange().getBegin(), |