new plan: functions that want 'tmp' can declare it
diff --git a/Parser/asdl_c.py b/Parser/asdl_c.py
index 60b53e9..c5fd365 100755
--- a/Parser/asdl_c.py
+++ b/Parser/asdl_c.py
@@ -365,10 +365,7 @@
         self.emit("int", 0)
         self.emit("obj2ast_%s(PyObject* obj, %s* out, PyArena* arena)" % (name, ctype), 0)
         self.emit("{", 0)
-        self.emit("PyObject* tmp = NULL;", 1)
         self.emit("int isinstance;", 1)
-        # Prevent compiler warnings about unused variable.
-        self.emit("tmp = tmp;", 1)
         self.emit("", 0)
 
     def sumTrailer(self, name, add_label=False):
@@ -403,6 +400,7 @@
 
     def complexSum(self, sum, name):
         self.funcHeader(name)
+        self.emit("PyObject *tmp = NULL;", 1)
         for a in sum.attributes:
             self.visitAttributeDeclaration(a, name, sum=sum)
         self.emit("", 0)
diff --git a/Python/Python-ast.c b/Python/Python-ast.c
index 8de5314..4d26ec8 100644
--- a/Python/Python-ast.c
+++ b/Python/Python-ast.c
@@ -3374,10 +3374,9 @@
 int
 obj2ast_mod(PyObject* obj, mod_ty* out, PyArena* arena)
 {
-        PyObject* tmp = NULL;
         int isinstance;
-        tmp = tmp;
 
+        PyObject *tmp = NULL;
 
         if (obj == Py_None) {
                 *out = NULL;
@@ -3523,10 +3522,9 @@
 int
 obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena)
 {
-        PyObject* tmp = NULL;
         int isinstance;
-        tmp = tmp;
 
+        PyObject *tmp = NULL;
         int lineno;
         int col_offset;
 
@@ -4719,10 +4717,9 @@
 int
 obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena)
 {
-        PyObject* tmp = NULL;
         int isinstance;
-        tmp = tmp;
 
+        PyObject *tmp = NULL;
         int lineno;
         int col_offset;
 
@@ -5835,9 +5832,7 @@
 int
 obj2ast_expr_context(PyObject* obj, expr_context_ty* out, PyArena* arena)
 {
-        PyObject* tmp = NULL;
         int isinstance;
-        tmp = tmp;
 
         isinstance = PyObject_IsInstance(obj, (PyObject *)Load_type);
         if (isinstance == -1) {
@@ -5895,10 +5890,9 @@
 int
 obj2ast_slice(PyObject* obj, slice_ty* out, PyArena* arena)
 {
-        PyObject* tmp = NULL;
         int isinstance;
-        tmp = tmp;
 
+        PyObject *tmp = NULL;
 
         if (obj == Py_None) {
                 *out = NULL;
@@ -6018,9 +6012,7 @@
 int
 obj2ast_boolop(PyObject* obj, boolop_ty* out, PyArena* arena)
 {
-        PyObject* tmp = NULL;
         int isinstance;
-        tmp = tmp;
 
         isinstance = PyObject_IsInstance(obj, (PyObject *)And_type);
         if (isinstance == -1) {
@@ -6046,9 +6038,7 @@
 int
 obj2ast_operator(PyObject* obj, operator_ty* out, PyArena* arena)
 {
-        PyObject* tmp = NULL;
         int isinstance;
-        tmp = tmp;
 
         isinstance = PyObject_IsInstance(obj, (PyObject *)Add_type);
         if (isinstance == -1) {
@@ -6154,9 +6144,7 @@
 int
 obj2ast_unaryop(PyObject* obj, unaryop_ty* out, PyArena* arena)
 {
-        PyObject* tmp = NULL;
         int isinstance;
-        tmp = tmp;
 
         isinstance = PyObject_IsInstance(obj, (PyObject *)Invert_type);
         if (isinstance == -1) {
@@ -6198,9 +6186,7 @@
 int
 obj2ast_cmpop(PyObject* obj, cmpop_ty* out, PyArena* arena)
 {
-        PyObject* tmp = NULL;
         int isinstance;
-        tmp = tmp;
 
         isinstance = PyObject_IsInstance(obj, (PyObject *)Eq_type);
         if (isinstance == -1) {
@@ -6354,10 +6340,9 @@
 int
 obj2ast_excepthandler(PyObject* obj, excepthandler_ty* out, PyArena* arena)
 {
-        PyObject* tmp = NULL;
         int isinstance;
-        tmp = tmp;
 
+        PyObject *tmp = NULL;
         int lineno;
         int col_offset;