Ensure that code object names (co_name) are unicode.
Verify that they print properly too.
diff --git a/Objects/codeobject.c b/Objects/codeobject.c
index 0a7c141..7bd292a 100644
--- a/Objects/codeobject.c
+++ b/Objects/codeobject.c
@@ -65,6 +65,13 @@
 		PyErr_BadInternalCall();
 		return NULL;
 	}
+	if (PyString_Check(name)) {
+		name = PyUnicode_FromString(PyString_AS_STRING(name));
+		if (name == NULL)
+			return NULL;
+	} else {
+		Py_INCREF(name);
+	}
 	intern_strings(names);
 	intern_strings(varnames);
 	intern_strings(freevars);
@@ -106,6 +113,7 @@
 		co->co_lnotab = lnotab;
                 co->co_zombieframe = NULL;
 	}
+	Py_DECREF(name);
 	return co;
 }
 
@@ -288,17 +296,14 @@
 {
 	int lineno = -1;
 	char *filename = "???";
-	char *name = "???";
 
 	if (co->co_firstlineno != 0)
 		lineno = co->co_firstlineno;
 	if (co->co_filename && PyString_Check(co->co_filename))
 		filename = PyString_AS_STRING(co->co_filename);
-	if (co->co_name && PyString_Check(co->co_name))
-		name = PyString_AS_STRING(co->co_name);
 	return PyUnicode_FromFormat(
-	                "<code object %.100s at %p, file \"%.300s\", line %d>",
-	                name, co, filename, lineno);
+	                "<code object %.100U at %p, file \"%.300s\", line %d>",
+	                co->co_name, co, filename, lineno);
 }
 
 static PyObject *
diff --git a/Python/compile.c b/Python/compile.c
index 8ae4036..d2bfe86 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -2991,7 +2991,7 @@
 {
 	static identifier name;
 	if (!name) {
-		name = PyString_FromString("<dictcomp>");
+		name = PyUnicode_FromString("<dictcomp>");
 		if (!name)
 			return 0;
 	}