From 1a90a23d9fdcc4344f459b183bbafb8ba7b5bcc0 Mon Sep 17 00:00:00 2001 From: Stephan Bergmann Date: Fri, 27 Jan 2017 10:47:16 +0100 Subject: [PATCH] Enable loplugin:dynexcspec rewriting mode Change-Id: I73404287c387a36e224683f75e967d51d911175b --- compilerplugins/clang/dynexcspec.cxx | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/compilerplugins/clang/dynexcspec.cxx b/compilerplugins/clang/dynexcspec.cxx index b06245e0ff03..b5db5df894a2 100644 --- a/compilerplugins/clang/dynexcspec.cxx +++ b/compilerplugins/clang/dynexcspec.cxx @@ -58,9 +58,23 @@ public: " no corresponding documentation comment"), decl->getLocation()) << decl->getSourceRange(); - return true; } -#if 0 // will be enabled later + if (rewriter != nullptr) { + if (!(decl->isDefined() || decl->isPure())) { + return true; + } + if (auto m = dyn_cast(decl)) { + for (auto i = m->begin_overridden_methods(); + i != m->end_overridden_methods(); ++i) + { + auto proto2 = (*i)->getType()->getAs(); + assert(proto2 != nullptr); + if (proto2->getExceptionSpecType() == EST_Dynamic) { + return true; + } + } + } + } bool dtor = isa(decl); auto source = decl->getExceptionSpecSourceRange(); if (rewriter != nullptr && source.isValid()) { @@ -93,6 +107,9 @@ public: } } if (!s.empty() && s != "\\") { + if (s.startswith("//")) { + beg = source.getBegin(); + } break; } beg = prev; @@ -110,7 +127,6 @@ public: : "remove dynamic exception specification"), source.isValid() ? source.getBegin() : decl->getLocation()) << (source.isValid() ? source : decl->getSourceRange()); -#endif return true; }