[cfe-dev] clang-tidy and static analysis for exception safety
Jonas Toth via cfe-dev
cfe-dev at lists.llvm.org
Thu Mar 16 04:35:35 PDT 2017
Why would the second case not be possible?
What i have in mind by example:
```
void definitly_throws() { // should be marked noexcept(false), maybe as
configuration option
if (some_condition())
throw std::logic_error{"Reasons"};
else
// do unproblematic stuff
}
void probably_throws() { // this needs more analysis then AST matching
so leave it as is
try {
// operation
if (op_failed())
throw std::runtime_error{"Operation failed"};
}
catch (std::runtime_error& e)
{ /* handle */ }
}
```
The second one can be noexcept if the operation will not throw. It is
not noexcept if operation is not noexcept.
What did I miss?
The deeper analysis will not happen if the analyser does not see all
code, but if it can shouldnt there the possibility to decide? Maybe it
has bad complexity and is therefor not practical. But maybe in some
cases there can be insight gained?
Am Do, 16. Mär, 2017 um 11:25 schrieb Daniel Marjamäki
<Daniel.Marjamaki at evidente.se>:
> As far as I see:
>
> - a function calling only `noexcept` operations that does not throw
> can be marked noexcept
>
> possible
>
> - a function that has a `throw` statement not within a `try/catch`
> block can be marked noexcept(false)
>
> Not possible
>
> - a function calling a function that is not marked noexcept can not
> be marked noexcept
> but it could be noexecpt with deeper analysis on what exception
> could be thrown and what exceptions are handled
>
> not possible
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20170316/5e6d0fee/attachment.html>
More information about the cfe-dev
mailing list