aboutsummaryrefslogtreecommitdiff
path: root/lib/Sema/SemaExprCXX.cpp
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2010-02-21 10:19:54 +0000
committerChandler Carruth <chandlerc@gmail.com>2010-02-21 10:19:54 +0000
commit5e895a87d001ea2e97f5201d22cc5241992ca5a2 (patch)
tree9cb62d17985891581d8f504f305178a90935193c /lib/Sema/SemaExprCXX.cpp
parent8761d680eaa7386e03f51286f4b84a1ffe575e2e (diff)
Commiting a revert from dgregor of a bit of destructor logic until we can
figure out how not to break lots of code using this. See PR6358 and PR6359 for motivating examples. FIXME's left in the code and the test. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@96733 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaExprCXX.cpp')
-rw-r--r--lib/Sema/SemaExprCXX.cpp28
1 files changed, 11 insertions, 17 deletions
diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp
index 3cbba8c9ff..4cb58d8d19 100644
--- a/lib/Sema/SemaExprCXX.cpp
+++ b/lib/Sema/SemaExprCXX.cpp
@@ -66,32 +66,26 @@ Action::TypeTy *Sema::getDestructorName(SourceLocation TildeLoc,
// If a pseudo-destructor-name (5.2.4) contains a
// nested-name-specifier, the type-names are looked up as types
// in the scope designated by the nested-name-specifier. Similarly, in
- // a qualified-id of theform:
+ // a qualified-id of the form:
//
// :: [opt] nested-name-specifier[opt] class-name :: ~class-name
//
// the second class-name is looked up in the same scope as the first.
//
- // To implement this, we look at the prefix of the
- // nested-name-specifier we were given, and determine the lookup
- // context from that.
- NestedNameSpecifier *NNS = (NestedNameSpecifier *)SS.getScopeRep();
- if (NestedNameSpecifier *Prefix = NNS->getPrefix()) {
- CXXScopeSpec PrefixSS;
- PrefixSS.setScopeRep(Prefix);
- LookupCtx = computeDeclContext(PrefixSS, EnteringContext);
- isDependent = isDependentScopeSpecifier(PrefixSS);
- } else if (ObjectTypePtr) {
+ // FIXME: We don't implement this, because it breaks lots of
+ // perfectly reasonable code that no other compilers diagnose. The
+ // issue is that the first class-name is looked up as a
+ // nested-name-specifier, so we ignore value declarations, but the
+ // second lookup is presumably an ordinary name lookup. Hence, we
+ // end up finding values (say, a function) and complain. See PRs
+ // 6358 and 6359 for examples of such code. DPG to investigate
+ // further.
+ if (ObjectTypePtr) {
LookupCtx = computeDeclContext(SearchType);
isDependent = SearchType->isDependentType();
} else {
LookupCtx = computeDeclContext(SS, EnteringContext);
- if (LookupCtx && !LookupCtx->isTranslationUnit()) {
- LookupCtx = LookupCtx->getParent();
- isDependent = LookupCtx->isDependentContext();
- } else {
- isDependent = false;
- }
+ isDependent = LookupCtx->isDependentContext();
}
LookInScope = false;