[Sema] Avoid duplicate -Wunguarded-availability warnings in nested functions

rdar://31862310

llvm-svn: 303170
This commit is contained in:
Alex Lorenz 2017-05-16 13:58:53 +00:00
parent 3a45504498
commit 6f91112051
2 changed files with 25 additions and 1 deletions

View File

@ -7230,6 +7230,13 @@ public:
SemaRef.Context.getTargetInfo().getPlatformMinVersion());
}
bool TraverseDecl(Decl *D) {
// Avoid visiting nested functions to prevent duplicate warnings.
if (!D || isa<FunctionDecl>(D))
return true;
return Base::TraverseDecl(D);
}
bool TraverseStmt(Stmt *S) {
if (!S)
return true;
@ -7243,6 +7250,8 @@ public:
bool TraverseIfStmt(IfStmt *If);
bool TraverseLambdaExpr(LambdaExpr *E) { return true; }
bool VisitObjCMessageExpr(ObjCMessageExpr *Msg) {
if (ObjCMethodDecl *D = Msg->getMethodDecl())
DiagnoseDeclAvailability(

View File

@ -8,7 +8,7 @@
int func_10_11() AVAILABLE_10_11; // expected-note 4 {{'func_10_11' has been explicitly marked partial here}}
#ifdef OBJCPP
// expected-note@+2 2 {{marked partial here}}
// expected-note@+2 6 {{marked partial here}}
#endif
int func_10_12() AVAILABLE_10_12; // expected-note 6 {{'func_10_12' has been explicitly marked partial here}}
@ -188,4 +188,19 @@ auto topLevelLambda = [] () {
func_10_12();
};
void functionInFunction() {
func_10_12(); // expected-warning{{'func_10_12' is only available on macOS 10.12 or newer}} expected-note{{@available}}
struct DontWarnTwice {
void f() {
func_10_12(); // expected-warning{{'func_10_12' is only available on macOS 10.12 or newer}} expected-note{{@available}}
}
};
void([] () {
func_10_12(); // expected-warning{{'func_10_12' is only available on macOS 10.12 or newer}} expected-note{{@available}}
});
(void)(^ {
func_10_12(); // expected-warning{{'func_10_12' is only available on macOS 10.12 or newer}} expected-note{{@available}}
});
}
#endif