[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