diff --git a/Include/opcode.h b/Include/opcode.h
index facadc2..7ffa359 100644
--- a/Include/opcode.h
+++ b/Include/opcode.h
@@ -123,7 +123,6 @@
 #define LOAD_CLOSURE    135     /* Load free variable from closure */
 #define LOAD_DEREF      136     /* Load and dereference from closure cell */ 
 #define STORE_DEREF     137     /* Store into cell */ 
-#define LOAD_NAME_LOCAL_ONLY 138
 
 /* The next 3 opcodes must be contiguous and satisfy
    (CALL_FUNCTION_VAR - CALL_FUNCTION) & 3 == 1  */
diff --git a/Include/symtable.h b/Include/symtable.h
index 22075f0..d5ef96f 100644
--- a/Include/symtable.h
+++ b/Include/symtable.h
@@ -88,7 +88,6 @@
 #define GLOBAL_IMPLICIT 3
 #define FREE 4
 #define CELL 5
-#define LOCAL_ONLY 6
 
 /* The following two names are used for the ste_unoptimized bit field */
 #define OPT_IMPORT_STAR 1
diff --git a/Lib/test/test_scope.py b/Lib/test/test_scope.py
index 1961e6e..643dcbc 100644
--- a/Lib/test/test_scope.py
+++ b/Lib/test/test_scope.py
@@ -690,14 +690,6 @@
         h = g()
         self.assertEqual(h(), 3)
 
-    def testLocalClosureShadowing(self):
-        exec("""
-x = 4
-def f(x):
-    class C:
-         x = x
-raises(NameError, f, 3)""", {"raises" : self.assertRaises})
-
 
 def test_main():
     run_unittest(ScopeTests)
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 505ca68..268a924 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -6094,7 +6094,6 @@
     PyErr_SetString(PyExc_TypeError,
                     "super(type, obj): "
                     "obj must be an instance or subtype of type");
-    printf("%s\n", type->tp_name);
     return NULL;
 }
 
diff --git a/Python/ceval.c b/Python/ceval.c
index 368ad69..2d4b16a 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -2052,7 +2052,6 @@
             break;
 
         TARGET(LOAD_NAME)
-        TARGET(LOAD_NAME_LOCAL_ONLY)
             w = GETITEM(names, oparg);
             if ((v = f->f_locals) == NULL) {
                 PyErr_Format(PyExc_SystemError,
@@ -2074,14 +2073,15 @@
                 }
             }
             if (x == NULL) {
-                if (opcode != LOAD_NAME_LOCAL_ONLY) {
-                    x = PyDict_GetItem(f->f_globals, w);
-                    if (x == NULL)
-                        x = PyDict_GetItem(f->f_builtins, w);
-                }
+                x = PyDict_GetItem(f->f_globals, w);
                 if (x == NULL) {
-                    format_exc_check_arg(PyExc_NameError, NAME_ERROR_MSG, w);
-                    break;
+                    x = PyDict_GetItem(f->f_builtins, w);
+                    if (x == NULL) {
+                        format_exc_check_arg(
+                                    PyExc_NameError,
+                                    NAME_ERROR_MSG, w);
+                        break;
+                    }
                 }
                 Py_INCREF(x);
             }
diff --git a/Python/compile.c b/Python/compile.c
index 83c9e02..aae0339 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -787,7 +787,6 @@
         case LOAD_CONST:
             return 1;
         case LOAD_NAME:
-        case LOAD_NAME_LOCAL_ONLY:
             return 1;
         case BUILD_TUPLE:
         case BUILD_LIST:
@@ -2482,7 +2481,6 @@
         optype = OP_DEREF;
         break;
     case LOCAL:
-    case LOCAL_ONLY:
         if (c->u->u_ste->ste_type == FunctionBlock)
             optype = OP_FAST;
         break;
@@ -2558,7 +2556,7 @@
         break;
     case OP_NAME:
         switch (ctx) {
-        case Load: op = (scope == LOCAL_ONLY) ? LOAD_NAME_LOCAL_ONLY : LOAD_NAME; break;
+        case Load: op = LOAD_NAME; break;
         case Store: op = STORE_NAME; break;
         case Del: op = DELETE_NAME; break;
         case AugLoad:
diff --git a/Python/symtable.c b/Python/symtable.c
index 37bdf2a..55c9f47 100644
--- a/Python/symtable.c
+++ b/Python/symtable.c
@@ -432,14 +432,7 @@
         return PySet_Add(free, name) >= 0;
     }
     if (flags & DEF_BOUND) {
-        if (ste->ste_type == ClassBlock &&
-            !(flags & DEF_PARAM) &&
-            bound && PySet_Contains(bound, name)) {
-            SET_SCOPE(scopes, name, LOCAL_ONLY);
-        }
-        else {
-            SET_SCOPE(scopes, name, LOCAL);
-        }
+        SET_SCOPE(scopes, name, LOCAL);
         if (PySet_Add(local, name) < 0)
             return 0;
         if (PySet_Discard(global, name) < 0)
@@ -496,7 +489,7 @@
         long scope;
         assert(PyLong_Check(v));
         scope = PyLong_AS_LONG(v);
-        if (scope != LOCAL && scope != LOCAL_ONLY)
+        if (scope != LOCAL)
             continue;
         if (!PySet_Contains(free, name))
             continue;
