[cfe-commits] r70519 - in /cfe/trunk: lib/Sema/SemaDeclCXX.cpp test/SemaCXX/destructor.cpp

Anders Carlsson andersca at mac.com
Thu Apr 30 16:18:11 PDT 2009


Author: andersca
Date: Thu Apr 30 18:18:11 2009
New Revision: 70519

URL: http://llvm.org/viewvc/llvm-project?rev=70519&view=rev
Log:
C++ destructors can have a single unnamed void parameter. Fixes <rdar://problem/6841210>.

Modified:
    cfe/trunk/lib/Sema/SemaDeclCXX.cpp
    cfe/trunk/test/SemaCXX/destructor.cpp

Modified: cfe/trunk/lib/Sema/SemaDeclCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclCXX.cpp?rev=70519&r1=70518&r2=70519&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/SemaDeclCXX.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDeclCXX.cpp Thu Apr 30 18:18:11 2009
@@ -1351,6 +1351,13 @@
   ClassDecl->addedConstructor(Context, Constructor);
 }
 
+static inline bool 
+FTIHasSingleVoidArgument(DeclaratorChunk::FunctionTypeInfo &FTI) {
+  return (FTI.NumArgs == 1 && !FTI.isVariadic && FTI.ArgInfo[0].Ident == 0 &&
+          FTI.ArgInfo[0].Param &&
+          FTI.ArgInfo[0].Param.getAs<ParmVarDecl>()->getType()->isVoidType());
+}
+
 /// CheckDestructorDeclarator - Called by ActOnDeclarator to check
 /// the well-formednes of the destructor declarator @p D with type @p
 /// R. If there are any errors in the declarator, this routine will
@@ -1416,7 +1423,7 @@
   }
 
   // Make sure we don't have any parameters.
-  if (FTI.NumArgs > 0) {
+  if (FTI.NumArgs > 0 && !FTIHasSingleVoidArgument(FTI)) {
     Diag(D.getIdentifierLoc(), diag::err_destructor_with_params);
 
     // Delete the parameters.

Modified: cfe/trunk/test/SemaCXX/destructor.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/destructor.cpp?rev=70519&r1=70518&r2=70519&view=diff

==============================================================================
--- cfe/trunk/test/SemaCXX/destructor.cpp (original)
+++ cfe/trunk/test/SemaCXX/destructor.cpp Thu Apr 30 18:18:11 2009
@@ -50,3 +50,7 @@
 
 G::~G() { }
 
+// <rdar://problem/6841210>
+struct H {
+  ~H(void) { } 
+};





More information about the cfe-commits mailing list