diff options
author | Douglas Gregor <dgregor@apple.com> | 2012-03-17 06:39:06 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2012-03-17 06:39:06 +0000 |
commit | 7b316825d4f794535b09588b2fa0eb9ca38af393 (patch) | |
tree | 2578be641dc0711161ba76e7d2fb938eca2d5f50 /clang/lib/Sema/CodeCompleteConsumer.cpp | |
parent | 78373e505d2608db3b25bc34378cb455d1b53ec1 (diff) | |
download | bcm5719-llvm-7b316825d4f794535b09588b2fa0eb9ca38af393.tar.gz bcm5719-llvm-7b316825d4f794535b09588b2fa0eb9ca38af393.zip |
When determining the availability of an enum constant, also consider
the availability of the enumeration type itself. Fixes
<rdar://problem/10996386>.
llvm-svn: 152977
Diffstat (limited to 'clang/lib/Sema/CodeCompleteConsumer.cpp')
-rw-r--r-- | clang/lib/Sema/CodeCompleteConsumer.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/clang/lib/Sema/CodeCompleteConsumer.cpp b/clang/lib/Sema/CodeCompleteConsumer.cpp index 0796c0a185d..ad5829e75eb 100644 --- a/clang/lib/Sema/CodeCompleteConsumer.cpp +++ b/clang/lib/Sema/CodeCompleteConsumer.cpp @@ -400,11 +400,19 @@ PrintingCodeCompleteConsumer::ProcessOverloadCandidates(Sema &SemaRef, } } +/// \brief Retrieve the effective availability of the given declaration. +static AvailabilityResult getDeclAvailability(Decl *D) { + AvailabilityResult AR = D->getAvailability(); + if (isa<EnumConstantDecl>(D)) + AR = std::max(AR, cast<Decl>(D->getDeclContext())->getAvailability()); + return AR; +} + void CodeCompletionResult::computeCursorKindAndAvailability(bool Accessible) { switch (Kind) { - case RK_Declaration: + case RK_Declaration: { // Set the availability based on attributes. - switch (Declaration->getAvailability()) { + switch (getDeclAvailability(Declaration)) { case AR_Available: case AR_NotYetIntroduced: Availability = CXAvailability_Available; @@ -436,6 +444,7 @@ void CodeCompletionResult::computeCursorKindAndAvailability(bool Accessible) { CursorKind = CXCursor_NotImplemented; } break; + } case RK_Macro: Availability = CXAvailability_Available; |