/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
bool TrivialDestructor::VisitCXXDestructorDecl(CXXDestructorDecl const* destructorDecl)
{ if (ignoreLocation(destructorDecl)) returntrue; if (!destructorDecl->isThisDeclarationADefinition()) returntrue; if (!destructorDecl->hasTrivialBody()) returntrue; if (destructorDecl->isVirtual()) returntrue; if (destructorDecl->getExceptionSpecType() != EST_None) returntrue; if (destructorDecl->getAccess() != AS_public) returntrue; if (isInUnoIncludeFile(
compiler.getSourceManager().getSpellingLoc(destructorDecl->getLocation()))) returntrue; if (!HasTrivialDestructorBody(destructorDecl->getParent())) returntrue;
report(DiagnosticsEngine::Warning, "no need for explicit destructor decl",
destructorDecl->getLocation())
<< destructorDecl->getSourceRange(); for (FunctionDecl const* d2 = destructorDecl;;)
{
d2 = d2->getPreviousDecl(); if (d2 == nullptr)
{ break;
}
report(DiagnosticsEngine::Note, "previous declaration is here", d2->getLocation())
<< d2->getSourceRange();
} returntrue;
}
bool TrivialDestructor::HasTrivialDestructorBody(const CXXRecordDecl* ClassDecl)
{ // Check fields. for (constauto* field : ClassDecl->fields()) if (!FieldHasTrivialDestructor(field)) returnfalse;
// Check bases. for (constauto& I : ClassDecl->bases())
{ const CXXRecordDecl* Base = I.getType()->getAsCXXRecordDecl(); if (!Base->hasTrivialDestructor()) returnfalse;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.