It is possible to write catch handlers such that they never execute due to inversion of the class hierarchy, such as:
class B {};
class D : public B {};
void f() {
try {
// ...
} catch (B &b) {
// ...
} catch (D &d) {
// ...
}
}
This patch causes a static analysis warning to be generated for code
where a catch handler cannot execute due to class hierarchy inversion
with regards to other catch handlers for the same try block.
This issue is covered by CERT's secure coding rule:
https://www.securecoding.cert.org/confluence/display/cplusplus/ERR36-CPP.+Catch+handlers+should+order+their+parameter+types+from+most+derived+to+least+derived
It's also covered by MISRA rule 15-3-6.
~Aaron
CatchHandlerChecker.patch
Description: Binary data
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
