summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaExpr.cpp
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2011-11-28 19:45:58 +0000
committerFariborz Jahanian <fjahanian@apple.com>2011-11-28 19:45:58 +0000
commit25d09c22093ed7ca3b2f30a844421991805db029 (patch)
treef04dbf6db828358b7758764d6957f40440a2f5c9 /clang/lib/Sema/SemaExpr.cpp
parent5ebc95ff4c971af07c73f9f5a9f85749cdfac500 (diff)
downloadbcm5719-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.cpp9
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;
}
OpenPOWER on IntegriCloud