[cfe-commits] r96733 - in /cfe/trunk: lib/Sema/SemaExprCXX.cpp test/SemaCXX/pseudo-destructors.cpp

Chandler Carruth chandlerc at gmail.com
Sun Feb 21 02:19:54 PST 2010


Author: chandlerc
Date: Sun Feb 21 04:19:54 2010
New Revision: 96733

URL: http://llvm.org/viewvc/llvm-project?rev=96733&view=rev
Log:
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.

Modified:
    cfe/trunk/lib/Sema/SemaExprCXX.cpp
    cfe/trunk/test/SemaCXX/pseudo-destructors.cpp

Modified: cfe/trunk/lib/Sema/SemaExprCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprCXX.cpp?rev=96733&r1=96732&r2=96733&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExprCXX.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExprCXX.cpp Sun Feb 21 04:19:54 2010
@@ -66,32 +66,26 @@
     //   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;

Modified: cfe/trunk/test/SemaCXX/pseudo-destructors.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/pseudo-destructors.cpp?rev=96733&r1=96732&r2=96733&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/pseudo-destructors.cpp (original)
+++ cfe/trunk/test/SemaCXX/pseudo-destructors.cpp Sun Feb 21 04:19:54 2010
@@ -28,7 +28,7 @@
   g().~Bar(); // expected-error{{non-scalar}}
   
   f->::~Bar();
-  f->N::~Wibble(); // expected-error{{expected the class name after '~' to name a destructor}}
+  f->N::~Wibble(); // FIXME: Cannot use typedef name in destructor id.
   
   f->::~Bar(17, 42); // expected-error{{cannot have any arguments}}
 }





More information about the cfe-commits mailing list