diff options
| author | Fariborz Jahanian <fjahanian@apple.com> | 2011-11-28 19:45:58 +0000 |
|---|---|---|
| committer | Fariborz Jahanian <fjahanian@apple.com> | 2011-11-28 19:45:58 +0000 |
| commit | 25d09c22093ed7ca3b2f30a844421991805db029 (patch) | |
| tree | f04dbf6db828358b7758764d6957f40440a2f5c9 /clang/lib/Sema/SemaExpr.cpp | |
| parent | 5ebc95ff4c971af07c73f9f5a9f85749cdfac500 (diff) | |
| download | bcm5719-llvm-25d09c22093ed7ca3b2f30a844421991805db029.tar.gz bcm5719-llvm-25d09c22093ed7ca3b2f30a844421991805db029.zip | |
pinpoint name/location of deprecated/unavailable enumerator
whose enum has been made deprecated/unavailable in the warning.
// rdar://10201690
llvm-svn: 145264
Diffstat (limited to 'clang/lib/Sema/SemaExpr.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
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<EnumConstantDecl>(D)) + if (Result == AR_Available) { + const DeclContext *DC = ECD->getDeclContext(); + if (const EnumDecl *TheEnumDecl = dyn_cast<EnumDecl>(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<EnumDecl>(DC)) DiagnoseAvailabilityOfDecl(*this, const_cast< EnumDecl *>(TheEnumDecl), - Loc, UnknownObjCClass); + D->getLocation(), UnknownObjCClass); } return false; } |

