[PATCH] Static analysis checker for catch handler inversion

Aaron Ballman aaron at aaronballman.com
Fri Nov 14 07:55:27 PST 2014


On Thu, Nov 13, 2014 at 10:06 PM, Richard Smith <richard at metafoo.co.uk> wrote:
> +    std::list<QualType> BaseClassTypes;
>
> This will allocate memory for every node; it would be better to use a
> SmallVector here (and use a depth-first search rather than a breadth-first
> one so you're only modifying one end of your list).
>
> +    for (auto &CurType : BaseClassTypes) {
>
> It's a bit scary to be iterating over your container while modifying it
> (even though it's actually correct in this case). Alternative idiom:
>
> SmallVector<QualType, 8> BaseClassTypes;
> BaseClassTypes.push_back(...);
> while (!BaseClassTypes.empty()) {
>   QualType T = BaseClassTypes.pop_back_val();
>   // ... maybe push back some values.
> }

I have a strong preference for your idiom. ;-)

>
> +      auto I = std::find_if(
> +          HandledTypes.begin(), HandledTypes.end(),
>
> This is still quadratic-time; maybe use a DenseMap with the canonical
> QualType plus a "was it a pointer" flag as a key?

I've given this a shot in my latest patch. Thank you for the feedback!

~Aaron
-------------- next part --------------
A non-text attachment was scrubbed...
Name: CatchHandlerChecker_v5.patch
Type: application/octet-stream
Size: 13875 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20141114/11417e3b/attachment.obj>


More information about the cfe-commits mailing list