diff --git a/contrib/citext/expected/citext.out b/contrib/citext/expected/citext.out
index ec99aaed5d..307d292d56 100644
--- a/contrib/citext/expected/citext.out
+++ b/contrib/citext/expected/citext.out
@@ -721,18 +721,6 @@ SELECT 'f'::citext::char = 'f'::char AS t;
  t
 (1 row)
 
-SELECT 'f'::"char"::citext = 'f' AS t;
- t 
----
- t
-(1 row)
-
-SELECT 'f'::citext::"char" = 'f'::"char" AS t;
- t 
----
- t
-(1 row)
-
 SELECT '100'::money::citext = '$100.00' AS t;
  t 
 ---
@@ -1041,7 +1029,6 @@ CREATE TABLE caster (
     varchar     varchar,
     bpchar      bpchar,
     char        char,
-    chr         "char",
     name        name,
     bytea       bytea,
     boolean     boolean,
@@ -1087,10 +1074,6 @@ INSERT INTO caster (char)          VALUES ('f'::text);
 INSERT INTO caster (text)          VALUES ('f'::char);
 INSERT INTO caster (char)          VALUES ('f'::citext);
 INSERT INTO caster (citext)        VALUES ('f'::char);
-INSERT INTO caster (chr)           VALUES ('f'::text);
-INSERT INTO caster (text)          VALUES ('f'::"char");
-INSERT INTO caster (chr)           VALUES ('f'::citext);
-INSERT INTO caster (citext)        VALUES ('f'::"char");
 INSERT INTO caster (name)          VALUES ('foo'::text);
 INSERT INTO caster (text)          VALUES ('foo'::name);
 INSERT INTO caster (name)          VALUES ('foo'::citext);
diff --git a/contrib/citext/expected/citext_1.out b/contrib/citext/expected/citext_1.out
index 75fd08b7cc..9f423b7496 100644
--- a/contrib/citext/expected/citext_1.out
+++ b/contrib/citext/expected/citext_1.out
@@ -721,18 +721,6 @@ SELECT 'f'::citext::char = 'f'::char AS t;
  t
 (1 row)
 
-SELECT 'f'::"char"::citext = 'f' AS t;
- t 
----
- t
-(1 row)
-
-SELECT 'f'::citext::"char" = 'f'::"char" AS t;
- t 
----
- t
-(1 row)
-
 SELECT '100'::money::citext = '$100.00' AS t;
  t 
 ---
@@ -1041,7 +1029,6 @@ CREATE TABLE caster (
     varchar     varchar,
     bpchar      bpchar,
     char        char,
-    chr         "char",
     name        name,
     bytea       bytea,
     boolean     boolean,
@@ -1087,10 +1074,6 @@ INSERT INTO caster (char)          VALUES ('f'::text);
 INSERT INTO caster (text)          VALUES ('f'::char);
 INSERT INTO caster (char)          VALUES ('f'::citext);
 INSERT INTO caster (citext)        VALUES ('f'::char);
-INSERT INTO caster (chr)           VALUES ('f'::text);
-INSERT INTO caster (text)          VALUES ('f'::"char");
-INSERT INTO caster (chr)           VALUES ('f'::citext);
-INSERT INTO caster (citext)        VALUES ('f'::"char");
 INSERT INTO caster (name)          VALUES ('foo'::text);
 INSERT INTO caster (text)          VALUES ('foo'::name);
 INSERT INTO caster (name)          VALUES ('foo'::citext);
diff --git a/contrib/citext/sql/citext.sql b/contrib/citext/sql/citext.sql
index 10232f5a9f..30ce6b807d 100644
--- a/contrib/citext/sql/citext.sql
+++ b/contrib/citext/sql/citext.sql
@@ -230,9 +230,6 @@ SELECT 'foo'::citext::name = 'foo'::name AS t;
 SELECT 'f'::char::citext = 'f' AS t;
 SELECT 'f'::citext::char = 'f'::char AS t;
 
-SELECT 'f'::"char"::citext = 'f' AS t;
-SELECT 'f'::citext::"char" = 'f'::"char" AS t;
-
 SELECT '100'::money::citext = '$100.00' AS t;
 SELECT '100'::citext::money = '100'::money AS t;
 
@@ -308,7 +305,6 @@ CREATE TABLE caster (
     varchar     varchar,
     bpchar      bpchar,
     char        char,
-    chr         "char",
     name        name,
     bytea       bytea,
     boolean     boolean,
@@ -359,11 +355,6 @@ INSERT INTO caster (text)          VALUES ('f'::char);
 INSERT INTO caster (char)          VALUES ('f'::citext);
 INSERT INTO caster (citext)        VALUES ('f'::char);
 
-INSERT INTO caster (chr)           VALUES ('f'::text);
-INSERT INTO caster (text)          VALUES ('f'::"char");
-INSERT INTO caster (chr)           VALUES ('f'::citext);
-INSERT INTO caster (citext)        VALUES ('f'::"char");
-
 INSERT INTO caster (name)          VALUES ('foo'::text);
 INSERT INTO caster (text)          VALUES ('foo'::name);
 INSERT INTO caster (name)          VALUES ('foo'::citext);
diff --git a/src/backend/parser/parse_coerce.c b/src/backend/parser/parse_coerce.c
index 78194afedf..4ece7278f4 100644
--- a/src/backend/parser/parse_coerce.c
+++ b/src/backend/parser/parse_coerce.c
@@ -3139,13 +3139,19 @@ find_coercion_pathway(Oid targetTypeId, Oid sourceTypeId,
 		 * probably be better to insist on explicit casts in both directions,
 		 * but this is a compromise to preserve something of the pre-8.3
 		 * behavior that many types had implicit (yipes!) casts to text.
+		 *
+		 * As a special case, don't treat type "char" as being a string type
+		 * for this purpose.  In principle we should give it some other
+		 * typcategory, but doing so breaks cases that we want to work.
 		 */
 		if (result == COERCION_PATH_NONE)
 		{
 			if (ccontext >= COERCION_ASSIGNMENT &&
+				targetTypeId != CHAROID &&
 				TypeCategory(targetTypeId) == TYPCATEGORY_STRING)
 				result = COERCION_PATH_COERCEVIAIO;
 			else if (ccontext >= COERCION_EXPLICIT &&
+					 sourceTypeId != CHAROID &&
 					 TypeCategory(sourceTypeId) == TYPCATEGORY_STRING)
 				result = COERCION_PATH_COERCEVIAIO;
 		}
