Index: compiler/inst_match.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/inst_match.m,v
retrieving revision 1.94
diff -u -u -r1.94 inst_match.m
--- compiler/inst_match.m	23 May 2011 05:08:04 -0000	1.94
+++ compiler/inst_match.m	22 Nov 2011 05:30:28 -0000
@@ -783,6 +783,30 @@
             ArityA > ArityB
         )
     ;
+        ConsIdA = char_const(CharA),
+        ConsIdB = cons(QNameB, _, _)
+    ->
+        string.char_to_string(CharA, NameA),
+        ( QNameB = unqualified(NameB)
+        ; QNameB = qualified(_, NameB)
+        ),
+        compare((>), NameA, NameB)
+    ;
+        ConsIdA = cons(QNameA, ArityA, _),
+        ConsIdB = char_const(CharB)
+    ->
+        ( QNameA = unqualified(NameA)
+        ; QNameA = qualified(_, NameA)
+        ),
+        string.char_to_string(CharB, NameB),
+        compare(O, NameA, NameB),
+        (
+            O = (>)
+        ;
+            O = (=),
+            ArityA > 0
+        )
+    ;
         compare((>), ConsIdA, ConsIdB)
     ).
 
Index: compiler/prog_data.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/prog_data.m,v
retrieving revision 1.235
diff -u -u -r1.235 prog_data.m
--- compiler/prog_data.m	6 Sep 2011 05:20:43 -0000	1.235
+++ compiler/prog_data.m	22 Nov 2011 05:30:28 -0000
@@ -1617,6 +1617,20 @@
         ArityA = ArityB,
         SymNameB = unqualified("{}")
     ;
+        ConsIdA = char_const(CharA),
+        ConsIdB = cons(SymNameB, ArityB, _)
+    ->
+        ArityB = 0,
+        SymNameB = unqualified(StringB),
+        string.char_to_string(CharA, StringB)
+    ;
+        ConsIdA = cons(SymNameA, ArityA, _),
+        ConsIdB = char_const(CharB)
+    ->
+        ArityA = 0,
+        SymNameA = unqualified(StringA),
+        string.char_to_string(CharB, StringA)
+    ;
         ConsIdA = ConsIdB
     ).
 
