add the cleanup checker
authorTom Tromey <tromey@redhat.com>
Thu, 30 May 2013 16:22:06 +0000 (16:22 +0000)
committerTom Tromey <tromey@redhat.com>
Thu, 30 May 2013 16:22:06 +0000 (16:22 +0000)
commitaf83e3f886c6e098f997d6f03dcf5e807a14a4f2
treeba8e8baafd9aed463d011d8083535791a711f624
parent564eac4292c0c15307fdd067dbece83f321bc3ad
add the cleanup checker

This patch adds the cleanup checker.  This is a Python plugin for GCC
that checks some rules for cleanup handling.  In particular it tries
to notice when cleanups are left dangling at the end of a function.

It does this by applying a few simple rules.

First, it understands that a function whose return type is "struct
cleanup *" is a "cleanup constructor".  Such functions are expected to
return the first cleanup that they make.

Then, it has the notion of a "master cleanup".  The checker keeps a
stack of all cleanups made in a basic block.  The first element is
pushed on the stack is the master cleanup -- the one that must later
be passed to either do_cleanups or discard_cleanups.

It is not perfect -- some constructs confuse it.  So, part of this
series rewrites some code in gdb so that it is analyzable.  I'll note
these spots and you can decide whether or not this is a good idea.

This patch also changes gcc-with-excheck to give it options.  Now you
must use either -Xc (for the cleanup checker) or -Xx (for the
exception checker).

* contrib/cleanup_check.py: New file.
* contrib/gcc-with-excheck: Add option parsing.
gdb/ChangeLog
gdb/contrib/cleanup_check.py [new file with mode: 0644]
gdb/contrib/gcc-with-excheck