Support parse/check/lower for char (#5901)

toolchain/check/testdata/builtins/char/basics.carbon and
toolchain/lower/testdata/builtins/char.carbon are probably the most
interesting tests here. The parse tests is required because this adds a
new node kind, and we need coverage of it; but the attached info is
minor. There's a fair amount of test churn here because I'm adding the
Core.Char and Core.CharLiteral types as new singletons.

My intent here is that `CharId` is always a unicode code point, even
when the type is a `Char` and thus must be a single UTF-8 code unit
(single byte). This mainly means the stored value of a `CharValue` can
be printed internally without knowing the type.

---------

Co-authored-by: josh11b <15258583+josh11b@users.noreply.github.com>
Co-authored-by: Richard Smith <richard@metafoo.co.uk>
This commit is contained in:
Jon Ross-Perkins
2025-08-06 20:39:01 +00:00
committed by GitHub
co-authored by josh11b Richard Smith
parent 9c7e0f6bd5
commit 37d5046ceb
109 changed files with 1520 additions and 1077 deletions
@@ -141,7 +141,7 @@ fn B() {
// CHECK:STDOUT: import Lib//default
// CHECK:STDOUT: }
// CHECK:STDOUT: %Lib.Z: type = import_ref Lib//default, Z, loaded [concrete = constants.%Z.type]
// CHECK:STDOUT: %Lib.import_ref.f88 = import_ref Lib//default, inst17 [no loc], unloaded
// CHECK:STDOUT: %Lib.import_ref.f88 = import_ref Lib//default, inst18 [no loc], unloaded
// CHECK:STDOUT: %Lib.A: %A.type.fad = import_ref Lib//default, A, loaded [concrete = constants.%A.7a0]
// CHECK:STDOUT: %Lib.import_ref.be7: %Z.type = import_ref Lib//default, loc4_6, loaded [symbolic = @A.1.%T (constants.%T)]
// CHECK:STDOUT: }