forked from OSchip/llvm-project
objc arc: Suppress certain arc diagnostics on unavailable
functions. // rdar://10186536 llvm-svn: 141037
This commit is contained in:
parent
8c3dc3d0fd
commit
ed1933b02b
|
@ -33,6 +33,7 @@
|
|||
#include "clang/Sema/ParsedTemplate.h"
|
||||
#include "clang/Parse/ParseDiagnostic.h"
|
||||
#include "clang/Basic/PartialDiagnostic.h"
|
||||
#include "clang/Sema/DelayedDiagnostic.h"
|
||||
#include "clang/Basic/SourceManager.h"
|
||||
#include "clang/Basic/TargetInfo.h"
|
||||
// FIXME: layering (ideally, Sema shouldn't be dependent on Lex API's)
|
||||
|
@ -6572,8 +6573,9 @@ ParmVarDecl *Sema::CheckParameter(DeclContext *DC, SourceLocation StartLoc,
|
|||
// - otherwise, it's an error
|
||||
if (T->isArrayType()) {
|
||||
if (!T.isConstQualified()) {
|
||||
Diag(NameLoc, diag::err_arc_array_param_no_ownership)
|
||||
<< TSInfo->getTypeLoc().getSourceRange();
|
||||
DelayedDiagnostics.add(
|
||||
sema::DelayedDiagnostic::makeForbiddenType(
|
||||
NameLoc, diag::err_arc_array_param_no_ownership, T, false));
|
||||
}
|
||||
lifetime = Qualifiers::OCL_ExplicitNone;
|
||||
} else {
|
||||
|
|
|
@ -3904,6 +3904,17 @@ static void handleDelayedForbiddenType(Sema &S, DelayedDiagnostic &diag,
|
|||
"this system declaration uses an unsupported type"));
|
||||
return;
|
||||
}
|
||||
if (S.getLangOptions().ObjCAutoRefCount)
|
||||
if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(decl)) {
|
||||
// FIXME. we may want to supress diagnostics for all
|
||||
// kind of forbidden type messages on unavailable functions.
|
||||
if (FD->hasAttr<UnavailableAttr>() &&
|
||||
diag.getForbiddenTypeDiagnostic() ==
|
||||
diag::err_arc_array_param_no_ownership) {
|
||||
diag.Triggered = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
S.Diag(diag.Loc, diag.getForbiddenTypeDiagnostic())
|
||||
<< diag.getForbiddenTypeOperand() << diag.getForbiddenTypeArgument();
|
||||
|
|
|
@ -662,3 +662,9 @@ void test38() {
|
|||
;
|
||||
}
|
||||
}
|
||||
|
||||
// rdar://10186536
|
||||
@class NSColor;
|
||||
void _NSCalc(NSColor* color, NSColor* bezelColors[]) __attribute__((unavailable("not available in automatic reference counting mode")));
|
||||
|
||||
void _NSCalcBeze(NSColor* color, NSColor* bezelColors[]); // expected-error {{must explicitly describe intended ownership of an object array parameter}}
|
||||
|
|
Loading…
Reference in New Issue