namespace
{ class Noexcept : public loplugin::FilteringRewritePlugin<Noexcept>
{ public: explicit Noexcept(loplugin::InstantiationData const& data)
: FilteringRewritePlugin(data)
{
}
void run() override
{ // Don't execute for < C++11, so we don't accidentally rewrite the legacy definitions of // SAL_THROW_EXTERN_C and SAL_NOEXCEPT in include/sal/types.h e.g. when building // CppunitTest_odk_checkapi which explicitly uses gb_CXX03FLAGS: if (compiler.getLangOpts().CPlusPlus11)
{
TraverseDecl(compiler.getASTContext().getTranslationUnitDecl());
}
}
bool VisitFunctionProtoTypeLoc(FunctionProtoTypeLoc tloc)
{ if (ignoreLocation(tloc))
{ returntrue;
} if (tloc.getTypePtr()->getExceptionSpecType() != EST_DynamicNone)
{ returntrue;
} autoconst r = tloc.getExceptionSpecRange(); auto r2 = r; auto l1 = r.getBegin(); while (compiler.getSourceManager().isMacroArgExpansion(l1))
{
l1 = compiler.getSourceManager().getImmediateMacroCallerLoc(l1);
} if (compiler.getSourceManager().isMacroBodyExpansion(l1))
{ auto l2 = r.getEnd(); while (compiler.getSourceManager().isMacroArgExpansion(l2))
{
l2 = compiler.getSourceManager().getImmediateMacroCallerLoc(l2);
} if (compiler.getSourceManager().isMacroBodyExpansion(l2))
{ //TODO: check l1, l2 are in same macro body expansion autoconst spl = compiler.getSourceManager().getSpellingLoc(l1); if (ignoreLocation(spl))
{ returntrue;
}
r2 = { spl, compiler.getSourceManager().getSpellingLoc(l2) };
}
} autoconst repl = isInUnoIncludeFile(r.getBegin()) ? "SAL_NOEXCEPT" : "noexcept"; if (rewriter != nullptr && replaceText(r2, repl))
{ returntrue;
}
report(DiagnosticsEngine::Warning, "Replace legacy dynamic 'throw ()' exception specification with '%0'", r.getBegin())
<< repl << r; returntrue;
}
};
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.