aboutsummaryrefslogtreecommitdiff
path: root/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
commit8e42f2782338666ec67eab2e709e18b92060eeba (patch)
tree93ef6fe886227fdf3b8724a7eaefd9b4c1b58a2c /lib/Sema/CodeCompleteConsumer.cpp
parent74b7b2b42dd710ccea78d86a47c979d4b2af7093 (diff)
When determining the availability of an enum constant, also consider
the availability of the enumeration type itself. Fixes <rdar://problem/10996386>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@152977 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/CodeCompleteConsumer.cpp')
-rw-r--r--lib/Sema/CodeCompleteConsumer.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/lib/Sema/CodeCompleteConsumer.cpp b/lib/Sema/CodeCompleteConsumer.cpp
index 0796c0a185..ad5829e75e 100644
--- a/lib/Sema/CodeCompleteConsumer.cpp
+++ b/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;