diff --git a/Python/ast.c b/Python/ast.c
index bba599b..9b32f8b 100644
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -78,7 +78,7 @@
 ast_error_finish(const char *filename)
 {
     PyObject *type, *value, *tback, *errstr, *loc, *tmp;
-    int lineno;
+    long lineno;
 
     assert(PyErr_Occurred());
     if (!PyErr_ExceptionMatches(PyExc_SyntaxError))
@@ -101,7 +101,7 @@
 	Py_INCREF(Py_None);
 	loc = Py_None;
     }
-    tmp = Py_BuildValue("(ziOO)", filename, lineno, Py_None, loc);
+    tmp = Py_BuildValue("(zlOO)", filename, lineno, Py_None, loc);
     Py_DECREF(loc);
     if (!tmp) {
 	Py_DECREF(errstr);
@@ -261,7 +261,6 @@
                     /* Only a simple_stmt can contain multiple statements. */
                     REQ(n, simple_stmt);
                     for (i = 0; i < NCH(n); i += 2) {
-                        stmt_ty s;
                         if (TYPE(CHILD(n, i)) == NEWLINE)
                             break;
                         s = ast_for_stmt(&c, CHILD(n, i));
@@ -1510,7 +1509,7 @@
                         return NULL;
 		    }
                         
-                    asdl_seq_SET(ops, i / 2, (void *)operator);
+                    asdl_seq_SET(ops, i / 2, (void *)(Py_uintptr_t)operator);
                     asdl_seq_SET(cmps, i / 2, expression);
                 }
                 expression = ast_for_expr(c, CHILD(n, 0));
@@ -2031,7 +2030,7 @@
                 return alias(NEW_IDENTIFIER(CHILD(n, 0)), NULL, c->c_arena);
             else {
                 /* Create a string of the form "a.b.c" */
-                int i, len;
+                size_t i, len;
                 char *s;
 
                 len = 0;
diff --git a/Python/symtable.c b/Python/symtable.c
index 09674d2..915324d 100644
--- a/Python/symtable.c
+++ b/Python/symtable.c
@@ -354,7 +354,7 @@
 */
 
 static int 
-analyze_name(PySTEntryObject *ste, PyObject *dict, PyObject *name, int flags,
+analyze_name(PySTEntryObject *ste, PyObject *dict, PyObject *name, long flags,
 	     PyObject *bound, PyObject *local, PyObject *free, 
 	     PyObject *global)
 {
@@ -426,14 +426,14 @@
 analyze_cells(PyObject *scope, PyObject *free)
 {
         PyObject *name, *v, *w;
-	int flags, pos = 0, success = 0;
+	int pos = 0, success = 0;
 
 	w = PyInt_FromLong(CELL);
 	if (!w)
 		return 0;
 	while (PyDict_Next(scope, &pos, &name, &v)) {
 		assert(PyInt_Check(v));
-		flags = PyInt_AS_LONG(v);
+		long flags = PyInt_AS_LONG(v);
 		if (flags != LOCAL)
 			continue;
 		if (!PyDict_GetItem(free, name))
@@ -506,9 +506,10 @@
                PyObject *bound, PyObject *free, int class)
 {
 	PyObject *name, *v, *u, *w, *free_value = NULL;
-	int i, flags, pos = 0;
+	int pos = 0;
 
 	while (PyDict_Next(symbols, &pos, &name, &v)) {
+		long i, flags;
 		assert(PyInt_Check(v));
 		flags = PyInt_AS_LONG(v);
 		w = PyDict_GetItem(scope, name);
@@ -539,7 +540,7 @@
 			*/
 			if  (class && 
 			     PyInt_AS_LONG(o) & (DEF_BOUND | DEF_GLOBAL)) {
-				i = PyInt_AS_LONG(o) | DEF_FREE_CLASS;
+				long i = PyInt_AS_LONG(o) | DEF_FREE_CLASS;
 				o = PyInt_FromLong(i);
 				if (!o) {
 					Py_DECREF(free_value);
@@ -581,7 +582,7 @@
 {
 	PyObject *name, *v, *local = NULL, *scope = NULL, *newbound = NULL;
 	PyObject *newglobal = NULL, *newfree = NULL;
-	int i, flags, pos = 0, success = 0;
+	int i, pos = 0, success = 0;
 
 	local = PyDict_New();
 	if (!local)
@@ -614,7 +615,7 @@
 	assert(PySTEntry_Check(ste));
 	assert(PyDict_Check(ste->ste_symbols));
 	while (PyDict_Next(ste->ste_symbols, &pos, &name, &v)) {
-		flags = PyInt_AS_LONG(v);
+		long flags = PyInt_AS_LONG(v);
 		if (!analyze_name(ste, scope, name, flags, bound, local, free,
 				  global))
 			goto error;
@@ -750,7 +751,7 @@
 	return 1;
 }
 
-static int
+static long
 symtable_lookup(struct symtable *st, PyObject *name)
 {
 	PyObject *o;
@@ -769,7 +770,7 @@
 {
 	PyObject *o;
 	PyObject *dict;
-	int val;
+	long val;
 	PyObject *mangled = _Py_Mangle(st->st_private, name);
 
 	if (!mangled)
@@ -1018,7 +1019,7 @@
 		for (i = 0; i < asdl_seq_LEN(seq); i++) {
 			identifier name = asdl_seq_GET(seq, i);
 			char *c_name = PyString_AS_STRING(name);
-			int cur = symtable_lookup(st, name);
+			long cur = symtable_lookup(st, name);
 			if (cur < 0)
 				return 0;
 			if (cur & (DEF_LOCAL | USE)) {
