summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/CodeCompleteConsumer.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2012-03-17 06:39:06 +0000
committerDouglas Gregor <dgregor@apple.com>2012-03-17 06:39:06 +0000
commit7b316825d4f794535b09588b2fa0eb9ca38af393 (patch)
tree2578be641dc0711161ba76e7d2fb938eca2d5f50 /clang/lib/Sema/CodeCompleteConsumer.cpp
parent78373e505d2608db3b25bc34378cb455d1b53ec1 (diff)
downloadbcm5719-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.cpp13
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;
OpenPOWER on IntegriCloud