diff --git a/src/backend/regex/regc_cvec.c b/src/backend/regex/regc_cvec.c
index 921a7d7f92af0976eede693f6f59d7642f32f24f..3a9e8cfbbd7390b362cd3480dc1a6782da7a6a95 100644
--- a/src/backend/regex/regc_cvec.c
+++ b/src/backend/regex/regc_cvec.c
@@ -78,7 +78,7 @@ addchr(struct cvec * cv,		/* character vector */
 	   chr c)					/* character to add */
 {
 	assert(cv->nchrs < cv->chrspace);
-	cv->chrs[cv->nchrs++] = (chr) c;
+	cv->chrs[cv->nchrs++] = c;
 }
 
 /*
@@ -90,8 +90,8 @@ addrange(struct cvec * cv,		/* character vector */
 		 chr to)				/* last character of range */
 {
 	assert(cv->nranges < cv->rangespace);
-	cv->ranges[cv->nranges * 2] = (chr) from;
-	cv->ranges[cv->nranges * 2 + 1] = (chr) to;
+	cv->ranges[cv->nranges * 2] = from;
+	cv->ranges[cv->nranges * 2 + 1] = to;
 	cv->nranges++;
 }
 
diff --git a/src/backend/regex/regc_lex.c b/src/backend/regex/regc_lex.c
index f62ec7dc81077e7f298309605286dfbcf8fb2458..cd34c8ae411bf8894ca7160ee5326c81c50af27d 100644
--- a/src/backend/regex/regc_lex.c
+++ b/src/backend/regex/regc_lex.c
@@ -870,7 +870,7 @@ lexescape(struct vars * v)
 			if (v->now == save || ((int) c > 0 && (int) c <= v->nsubexp))
 			{
 				NOTE(REG_UBACKREF);
-				RETV(BACKREF, (chr) c);
+				RETV(BACKREF, c);
 			}
 			/* oops, doesn't look like it's a backref after all... */
 			v->now = save;
@@ -986,10 +986,8 @@ lexdigits(struct vars * v,
  */
 static int						/* 1 normal, 0 failure */
 brenext(struct vars * v,
-		chr pc)
+		chr c)
 {
-	chr			c = (chr) pc;
-
 	switch (c)
 	{
 		case CHR('*'):
@@ -1153,7 +1151,7 @@ chrnamed(struct vars * v,
 		 const chr *endp,		/* just past end of name */
 		 chr lastresort)		/* what to return if name lookup fails */
 {
-	celt		c;
+	chr			c;
 	int			errsave;
 	int			e;
 	struct cvec *cv;
@@ -1165,10 +1163,10 @@ chrnamed(struct vars * v,
 	v->err = errsave;
 
 	if (e != 0)
-		return (chr) lastresort;
+		return lastresort;
 
 	cv = range(v, c, c, 0);
 	if (cv->nchrs == 0)
-		return (chr) lastresort;
+		return lastresort;
 	return cv->chrs[0];
 }
diff --git a/src/backend/regex/regc_locale.c b/src/backend/regex/regc_locale.c
index 4fe62921e3b438d92d4e7d4d85ff673f8882b74c..399de027cdd655ec3ae0d5ebd28450421ad6b9aa 100644
--- a/src/backend/regex/regc_locale.c
+++ b/src/backend/regex/regc_locale.c
@@ -361,9 +361,9 @@ static const struct cname
 
 
 /*
- * element - map collating-element name to celt
+ * element - map collating-element name to chr
  */
-static celt
+static chr
 element(struct vars * v,		/* context */
 		const chr *startp,		/* points to start of name */
 		const chr *endp)		/* points just past end of name */
@@ -401,13 +401,13 @@ element(struct vars * v,		/* context */
  */
 static struct cvec *
 range(struct vars * v,			/* context */
-	  celt a,					/* range start */
-	  celt b,					/* range end, might equal a */
+	  chr a,					/* range start */
+	  chr b,					/* range end, might equal a */
 	  int cases)				/* case-independent? */
 {
 	int			nchrs;
 	struct cvec *cv;
-	celt		c,
+	chr			c,
 				cc;
 
 	if (a != b && !before(a, b))
@@ -444,7 +444,7 @@ range(struct vars * v,			/* context */
 
 	for (c = a; c <= b; c++)
 	{
-		cc = pg_wc_tolower((chr) c);
+		cc = pg_wc_tolower(c);
 		if (cc != c &&
 			(before(cc, a) || before(b, cc)))
 		{
@@ -455,7 +455,7 @@ range(struct vars * v,			/* context */
 			}
 			addchr(cv, cc);
 		}
-		cc = pg_wc_toupper((chr) c);
+		cc = pg_wc_toupper(c);
 		if (cc != c &&
 			(before(cc, a) || before(b, cc)))
 		{
@@ -477,10 +477,10 @@ range(struct vars * v,			/* context */
 }
 
 /*
- * before - is celt x before celt y, for purposes of range legality?
+ * before - is chr x before chr y, for purposes of range legality?
  */
 static int						/* predicate */
-before(celt x, celt y)
+before(chr x, chr y)
 {
 	if (x < y)
 		return 1;
@@ -493,7 +493,7 @@ before(celt x, celt y)
  */
 static struct cvec *
 eclass(struct vars * v,			/* context */
-	   celt c,					/* Collating element representing the
+	   chr c,					/* Collating element representing the
 								 * equivalence class. */
 	   int cases)				/* all cases? */
 {
@@ -503,12 +503,12 @@ eclass(struct vars * v,			/* context */
 	if ((v->cflags & REG_FAKE) && c == 'x')
 	{
 		cv = getcvec(v, 4, 0);
-		addchr(cv, (chr) 'x');
-		addchr(cv, (chr) 'y');
+		addchr(cv, CHR('x'));
+		addchr(cv, CHR('y'));
 		if (cases)
 		{
-			addchr(cv, (chr) 'X');
-			addchr(cv, (chr) 'Y');
+			addchr(cv, CHR('X'));
+			addchr(cv, CHR('Y'));
 		}
 		return cv;
 	}
@@ -518,7 +518,7 @@ eclass(struct vars * v,			/* context */
 		return allcases(v, c);
 	cv = getcvec(v, 1, 0);
 	assert(cv != NULL);
-	addchr(cv, (chr) c);
+	addchr(cv, c);
 	return cv;
 }
 
@@ -673,15 +673,14 @@ cclass(struct vars * v,			/* context */
  */
 static struct cvec *
 allcases(struct vars * v,		/* context */
-		 chr pc)				/* character to get case equivs of */
+		 chr c)					/* character to get case equivs of */
 {
 	struct cvec *cv;
-	chr			c = (chr) pc;
 	chr			lc,
 				uc;
 
-	lc = pg_wc_tolower((chr) c);
-	uc = pg_wc_toupper((chr) c);
+	lc = pg_wc_tolower(c);
+	uc = pg_wc_toupper(c);
 
 	cv = getcvec(v, 2, 0);
 	addchr(cv, lc);
diff --git a/src/backend/regex/regcomp.c b/src/backend/regex/regcomp.c
index cc589b0930101da518ab8e117070d2d71df51a30..48d63da11de1d0f0689b9dce1cd942eadc15fd9c 100644
--- a/src/backend/regex/regcomp.c
+++ b/src/backend/regex/regcomp.c
@@ -210,10 +210,10 @@ static pg_wchar pg_wc_toupper(pg_wchar c);
 static pg_wchar pg_wc_tolower(pg_wchar c);
 
 /* === regc_locale.c === */
-static celt element(struct vars *, const chr *, const chr *);
-static struct cvec *range(struct vars *, celt, celt, int);
-static int	before(celt, celt);
-static struct cvec *eclass(struct vars *, celt, int);
+static chr	element(struct vars *, const chr *, const chr *);
+static struct cvec *range(struct vars *, chr, chr, int);
+static int	before(chr, chr);
+static struct cvec *eclass(struct vars *, chr, int);
 static struct cvec *cclass(struct vars *, const chr *, const chr *, int);
 static struct cvec *allcases(struct vars *, chr);
 static int	cmp(const chr *, const chr *, size_t);
@@ -1424,8 +1424,8 @@ brackpart(struct vars * v,
 		  struct state * lp,
 		  struct state * rp)
 {
-	celt		startc;
-	celt		endc;
+	chr			startc;
+	chr			endc;
 	struct cvec *cv;
 	const chr  *startp;
 	const chr  *endp;
diff --git a/src/include/regex/regcustom.h b/src/include/regex/regcustom.h
index 60034daee83ce56790050deecb2cce5affc33b45..459851a7f6bdff8a04b0d3136fc61e4a64c21dc5 100644
--- a/src/include/regex/regcustom.h
+++ b/src/include/regex/regcustom.h
@@ -58,15 +58,13 @@
 /* internal character type and related */
 typedef pg_wchar chr;			/* the type itself */
 typedef unsigned uchr;			/* unsigned type that will hold a chr */
-typedef int celt;				/* type to hold chr, or NOCELT */
 
-#define NOCELT	(-1)			/* celt value which is not valid chr */
 #define CHR(c)	((unsigned char) (c))	/* turn char literal into chr literal */
 #define DIGITVAL(c) ((c)-'0')	/* turn chr digit into its value */
 #define CHRBITS 32				/* bits in a chr; must not use sizeof */
 #define CHR_MIN 0x00000000		/* smallest and largest chr; the value */
 #define CHR_MAX 0x7ffffffe		/* CHR_MAX-CHR_MIN+1 must fit in an int, and
-								 * CHR_MAX+1 must fit in both chr and celt */
+								 * CHR_MAX+1 must fit in a chr variable */
 
 /*
  * Check if a chr value is in range.  Ideally we'd just write this as