Nifty! But do you think this is cheap enough for a general compiler warning? It certainly doesn't depend on the analyzer's path-sensitive analysis, so it's mostly just how much we care about the cost of isDerivedFrom.
Jordan > On Oct 27, 2014, at 15:30, Aaron Ballman <[email protected]> wrote: > > 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> _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
