diff options
| author | Anders Carlsson <andersca@mac.com> | 2009-04-30 23:18:11 +0000 |
|---|---|---|
| committer | Anders Carlsson <andersca@mac.com> | 2009-04-30 23:18:11 +0000 |
| commit | 5e965472b95824ea251c7adfa7205d22d3fcaa05 (patch) | |
| tree | a648847ecd0c3988cce6042e3de122d629513055 /clang/lib/Sema/SemaDeclCXX.cpp | |
| parent | e29b4f0785a82da9c2d45fa81defef4732446d00 (diff) | |
| download | bcm5719-llvm-5e965472b95824ea251c7adfa7205d22d3fcaa05.tar.gz bcm5719-llvm-5e965472b95824ea251c7adfa7205d22d3fcaa05.zip | |
C++ destructors can have a single unnamed void parameter. Fixes <rdar://problem/6841210>.
llvm-svn: 70519
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 6e00488c509..54c887e303b 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -1351,6 +1351,13 @@ void Sema::CheckConstructor(CXXConstructorDecl *Constructor) { 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 @@ QualType Sema::CheckDestructorDeclarator(Declarator &D, } // 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. |

