Change [_Py_]re_compile_pattern() to return a char*.
Since it only returns an error message (or NULL) there's no reason
for it to be unsigned char *, and various compilers like this better.
diff --git a/Modules/regexmodule.c b/Modules/regexmodule.c
index df112d3..981dc8c 100644
--- a/Modules/regexmodule.c
+++ b/Modules/regexmodule.c
@@ -439,7 +439,7 @@
 		re->re_realpat = pattern;
 		Py_INCREF(givenpat);
 		re->re_givenpat = givenpat;
-		error = (char *)re_compile_pattern((unsigned char *)pat, size, &re->re_patbuf);
+		error = _Py_re_compile_pattern((unsigned char *)pat, size, &re->re_patbuf);
 		if (error != NULL) {
 			PyErr_SetString(RegexError, error);
 			goto finally;
diff --git a/Modules/regexpr.c b/Modules/regexpr.c
index a90363a..4279d61 100644
--- a/Modules/regexpr.c
+++ b/Modules/regexpr.c
@@ -1157,7 +1157,7 @@
 	} \
 }
 
-unsigned char *re_compile_pattern(unsigned char *regex, int size, regexp_t bufp)
+char *re_compile_pattern(unsigned char *regex, int size, regexp_t bufp)
 {
 	int a;
 	int pos;
@@ -1535,36 +1535,36 @@
 	STORE(Cend);
 	SET_FIELDS;
 	if(!re_optimize(bufp))
-		return (unsigned char *)"Optimization error";
+		return "Optimization error";
 	return NULL;
 
   op_error:
 	SET_FIELDS;
-	return (unsigned char *)"Badly placed special character";
+	return "Badly placed special character";
 
   bad_match_register:
 	SET_FIELDS;
-	return (unsigned char *)"Bad match register number";
+	return "Bad match register number";
    
   hex_error:
 	SET_FIELDS;
-	return (unsigned char *)"Bad hexadecimal number";
+	return "Bad hexadecimal number";
    
   parenthesis_error:
 	SET_FIELDS;
-	return (unsigned char *)"Badly placed parenthesis";
+	return "Badly placed parenthesis";
    
   out_of_memory:
 	SET_FIELDS;
-	return (unsigned char *)"Out of memory";
+	return "Out of memory";
    
   ends_prematurely:
 	SET_FIELDS;
-	return (unsigned char *)"Regular expression ends prematurely";
+	return "Regular expression ends prematurely";
 
   too_complex:
 	SET_FIELDS;
-	return (unsigned char *)"Regular expression too complex";
+	return "Regular expression too complex";
 }
 
 #undef CHARAT
diff --git a/Modules/regexpr.h b/Modules/regexpr.h
index 729088e..dd66325 100644
--- a/Modules/regexpr.h
+++ b/Modules/regexpr.h
@@ -101,7 +101,7 @@
 /* This sets the syntax to use and returns the previous syntax.  The
  * syntax is specified by a bit mask of the above defined bits. */
 
-unsigned char *re_compile_pattern(unsigned char *regex, int regex_size, regexp_t compiled);
+char *re_compile_pattern(unsigned char *regex, int regex_size, regexp_t compiled);
 /* This compiles the regexp (given in regex and length in regex_size).
  * This returns NULL if the regexp compiled successfully, and an error
  * message if an error was encountered.  The buffer field must be
@@ -138,7 +138,7 @@
 extern unsigned char re_syntax_table[256];
 void re_compile_initialize();
 int re_set_syntax();
-unsigned char *re_compile_pattern();
+char *re_compile_pattern();
 int re_match();
 int re_search();
 void re_compile_fastmap();