[PATCH 09/28] introduce and use CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION

Tom Tromey
2013-04-19T14:32:05Z

The checker provides an attribute that indicates that a function sets
the Python exception if it returns a negative value. This patch
introduces a new macro for this attribute and changes gdb to use it
where appropriate.

* python/py-event.h (gdbpy_initialize_event_generic): Use
CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION.
* python/py-evts.c (add_new_registry): Use
CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION.
* python/python-internal.h
(CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION): New macro.
---
gdb/python/py-event.h | 7 ++++---
gdb/python/py-evts.c | 2 +-
gdb/python/python-internal.h | 7 +++++++
3 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/gdb/python/py-event.h b/gdb/python/py-event.h
index 1db8bd2..4850f1a 100644
--- a/gdb/python/py-event.h
+++ b/gdb/python/py-event.h
@@ -115,8 +115,9 @@ extern int emit_new_objfile_event (struct objfile *objfile);

extern void evpy_dealloc (PyObject *self);
extern int evpy_add_attribute (PyObject *event,
- char *name, PyObject *attr);
-int gdbpy_initialize_event_generic (PyTypeObject *type, char *name);
-
+ char *name, PyObject *attr)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_event_generic (PyTypeObject *type, char *name)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;

#endif /* GDB_PY_EVENT_H */
diff --git a/gdb/python/py-evts.c b/gdb/python/py-evts.c
index 4c079e2..427b6d5 100644
--- a/gdb/python/py-evts.c
+++ b/gdb/python/py-evts.c
@@ -37,7 +37,7 @@ static struct PyModuleDef EventModuleDef =

/* Initialize python events. */

-static int
+static int CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
add_new_registry (eventregistry_object **registryp, char *name)
{
*registryp = create_eventregistry_object ();
diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h
index 57fcc74..b887b66 100644
--- a/gdb/python/python-internal.h
+++ b/gdb/python/python-internal.h
@@ -47,6 +47,13 @@
#define CPYCHECKER_SETS_EXCEPTION
#endif

+#ifdef WITH_CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION_ATTRIBUTE
+#define CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION \
+ __attribute__ ((cpychecker_negative_result_sets_exception))
+#else
+#define CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
+#endif
+
#include <stdio.h>

/* Python 2.4 doesn't include stdint.h soon enough to get {u,}intptr_t
--
1.8.1.4