From 25d09c22093ed7ca3b2f30a844421991805db029 Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Mon, 28 Nov 2011 19:45:58 +0000 Subject: pinpoint name/location of deprecated/unavailable enumerator whose enum has been made deprecated/unavailable in the warning. // rdar://10201690 llvm-svn: 145264 --- clang/lib/Sema/SemaExpr.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'clang/lib/Sema/SemaExpr.cpp') diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index e6e6e5f5e1e..cbfff909655 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -68,6 +68,13 @@ static AvailabilityResult DiagnoseAvailabilityOfDecl(Sema &S, // See if this declaration is unavailable or deprecated. std::string Message; AvailabilityResult Result = D->getAvailability(&Message); + if (const EnumConstantDecl *ECD = dyn_cast(D)) + if (Result == AR_Available) { + const DeclContext *DC = ECD->getDeclContext(); + if (const EnumDecl *TheEnumDecl = dyn_cast(DC)) + Result = TheEnumDecl->getAvailability(&Message); + } + switch (Result) { case AR_Available: case AR_NotYetIntroduced: @@ -158,7 +165,7 @@ bool Sema::DiagnoseUseOfDecl(NamedDecl *D, SourceLocation Loc, if (const EnumDecl *TheEnumDecl = dyn_cast(DC)) DiagnoseAvailabilityOfDecl(*this, const_cast< EnumDecl *>(TheEnumDecl), - Loc, UnknownObjCClass); + D->getLocation(), UnknownObjCClass); } return false; } -- cgit v1.2.3