Associate a name with ClassDecl (#3447)

Note generics will probably need different behavior.

---------

Co-authored-by: Richard Smith <richard@metafoo.co.uk>
This commit is contained in:
Jon Ross-Perkins
2023-12-02 00:44:57 +00:00
committed by GitHub
co-authored by Richard Smith
parent ca53c18ddc
commit 962defd1e8
46 changed files with 96 additions and 84 deletions
@@ -26,7 +26,7 @@ var p: Incomplete* = &a[0];
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Incomplete, ()
// CHECK:STDOUT: %Incomplete.decl = class_decl @Incomplete, ()
// CHECK:STDOUT: %Incomplete: type = class_type @Incomplete
// CHECK:STDOUT: %Incomplete.ref.loc15: type = name_ref Incomplete, %Incomplete
// CHECK:STDOUT: %.loc15_21: i32 = int_literal 1
+1 -1
View File
@@ -33,7 +33,7 @@ fn Initializing() {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @X, ()
// CHECK:STDOUT: %X.decl = class_decl @X, ()
// CHECK:STDOUT: %X: type = class_type @X
// CHECK:STDOUT: %Value: <function> = fn_decl @Value
// CHECK:STDOUT: %Reference: <function> = fn_decl @Reference
+1 -1
View File
@@ -33,7 +33,7 @@ fn Var() {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @X, ()
// CHECK:STDOUT: %X.decl = class_decl @X, ()
// CHECK:STDOUT: %X: type = class_type @X
// CHECK:STDOUT: %Make: <function> = fn_decl @Make
// CHECK:STDOUT: %Let: <function> = fn_decl @Let
+1 -1
View File
@@ -29,7 +29,7 @@ fn Run() -> i32 {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl = class_decl @Class, ()
// CHECK:STDOUT: %Class: type = class_type @Class
// CHECK:STDOUT: %G: <function> = fn_decl @G
// CHECK:STDOUT: %Run: <function> = fn_decl @Run
+1 -1
View File
@@ -23,7 +23,7 @@ fn Make() -> Class {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl = class_decl @Class, ()
// CHECK:STDOUT: %Class: type = class_type @Class
// CHECK:STDOUT: %Make: <function> = fn_decl @Make
// CHECK:STDOUT: }
+1 -1
View File
@@ -23,7 +23,7 @@ class Class {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl = class_decl @Class, ()
// CHECK:STDOUT: %Class: type = class_type @Class
// CHECK:STDOUT: }
// CHECK:STDOUT:
+1 -1
View File
@@ -47,7 +47,7 @@ fn F(c: Class, p: Class*) {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl = class_decl @Class, ()
// CHECK:STDOUT: %Class: type = class_type @Class
// CHECK:STDOUT: %F: <function> = fn_decl @F.2
// CHECK:STDOUT: }
+1 -1
View File
@@ -123,7 +123,7 @@ fn CallReturnIncomplete() {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl = class_decl @Class, ()
// CHECK:STDOUT: %Class: type = class_type @Class
// CHECK:STDOUT: %.loc15: <function> = fn_decl @.1
// CHECK:STDOUT: %CallClassFunction: <function> = fn_decl @CallClassFunction
+1 -1
View File
@@ -35,7 +35,7 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl = class_decl @Class, ()
// CHECK:STDOUT: %Class: type = class_type @Class
// CHECK:STDOUT: %F: <function> = fn_decl @F
// CHECK:STDOUT: }
+1 -1
View File
@@ -31,7 +31,7 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl = class_decl @Class, ()
// CHECK:STDOUT: %Class: type = class_type @Class
// CHECK:STDOUT: %G: <function> = fn_decl @G
// CHECK:STDOUT: %F: <function> = fn_decl @F
@@ -45,9 +45,9 @@ fn F(s: {.a: A}, b: B) {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @A, ()
// CHECK:STDOUT: %A.decl = class_decl @A, ()
// CHECK:STDOUT: %A: type = class_type @A
// CHECK:STDOUT: class_decl @B, ()
// CHECK:STDOUT: %B.decl = class_decl @B, ()
// CHECK:STDOUT: %B: type = class_type @B
// CHECK:STDOUT: %F: <function> = fn_decl @F.2
// CHECK:STDOUT: }
+1 -1
View File
@@ -28,7 +28,7 @@ fn T.F() {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl = class_decl @Class, ()
// CHECK:STDOUT: %Class: type = class_type @Class
// CHECK:STDOUT: %Class.ref: type = name_ref Class, %Class
// CHECK:STDOUT: %T: type = bind_name T, %Class.ref
+1 -1
View File
@@ -39,7 +39,7 @@ fn F(c: Class) {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl = class_decl @Class, ()
// CHECK:STDOUT: %Class: type = class_type @Class
// CHECK:STDOUT: %F: <function> = fn_decl @F
// CHECK:STDOUT: }
@@ -81,28 +81,28 @@ base class G;
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @A, ()
// CHECK:STDOUT: %A.decl.loc7 = class_decl @A, ()
// CHECK:STDOUT: %A: type = class_type @A
// CHECK:STDOUT: class_decl @A, ()
// CHECK:STDOUT: class_decl @B, ()
// CHECK:STDOUT: %A.decl.loc14 = class_decl @A, ()
// CHECK:STDOUT: %B.decl.loc16 = class_decl @B, ()
// CHECK:STDOUT: %B: type = class_type @B
// CHECK:STDOUT: class_decl @B, ()
// CHECK:STDOUT: class_decl @C, ()
// CHECK:STDOUT: %B.decl.loc23 = class_decl @B, ()
// CHECK:STDOUT: %C.decl.loc25 = class_decl @C, ()
// CHECK:STDOUT: %C: type = class_type @C
// CHECK:STDOUT: class_decl @C, ()
// CHECK:STDOUT: class_decl @D, ()
// CHECK:STDOUT: %C.decl.loc32 = class_decl @C, ()
// CHECK:STDOUT: %D.decl.loc34 = class_decl @D, ()
// CHECK:STDOUT: %D: type = class_type @D
// CHECK:STDOUT: class_decl @D, ()
// CHECK:STDOUT: class_decl @E, ()
// CHECK:STDOUT: %D.decl.loc41 = class_decl @D, ()
// CHECK:STDOUT: %E.decl.loc43 = class_decl @E, ()
// CHECK:STDOUT: %E: type = class_type @E
// CHECK:STDOUT: class_decl @E, ()
// CHECK:STDOUT: class_decl @F, ()
// CHECK:STDOUT: %E.decl.loc50 = class_decl @E, ()
// CHECK:STDOUT: %F.decl.loc52 = class_decl @F, ()
// CHECK:STDOUT: %F: type = class_type @F
// CHECK:STDOUT: class_decl @F, ()
// CHECK:STDOUT: class_decl @G, ()
// CHECK:STDOUT: %F.decl.loc59 = class_decl @F, ()
// CHECK:STDOUT: %G.decl.loc61 = class_decl @G, ()
// CHECK:STDOUT: %G: type = class_type @G
// CHECK:STDOUT: class_decl @G, ()
// CHECK:STDOUT: class_decl @G, ()
// CHECK:STDOUT: %G.decl.loc68 = class_decl @G, ()
// CHECK:STDOUT: %G.decl.loc75 = class_decl @G, ()
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: class @A {
@@ -28,38 +28,38 @@ class Y {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @A.1, ()
// CHECK:STDOUT: %A.decl.loc7 = class_decl @A.1, ()
// CHECK:STDOUT: %A: type = class_type @A.1
// CHECK:STDOUT: class_decl @X, ()
// CHECK:STDOUT: %X.decl = class_decl @X, ()
// CHECK:STDOUT: %X: type = class_type @X
// CHECK:STDOUT: class_decl @A.1, ()
// CHECK:STDOUT: class_decl @Y, ()
// CHECK:STDOUT: %A.decl.loc15 = class_decl @A.1, ()
// CHECK:STDOUT: %Y.decl = class_decl @Y, ()
// CHECK:STDOUT: %Y: type = class_type @Y
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: class @A.1 {
// CHECK:STDOUT: class_decl @B.2, ()
// CHECK:STDOUT: %B.decl = class_decl @B.2, ()
// CHECK:STDOUT: %B: type = class_type @B.2
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .B = <unexpected instref inst+11>
// CHECK:STDOUT: .B = %B.decl
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: class @X {
// CHECK:STDOUT: class_decl @A.2, ()
// CHECK:STDOUT: %A.decl = class_decl @A.2, ()
// CHECK:STDOUT: %A: type = class_type @A.2
// CHECK:STDOUT: class_decl @B.1, ()
// CHECK:STDOUT: %B.decl = class_decl @B.1, ()
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .A = <unexpected instref inst+4>
// CHECK:STDOUT: .A = %A.decl
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: class @A.2 {
// CHECK:STDOUT: class_decl @B.1, ()
// CHECK:STDOUT: %B.decl = class_decl @B.1, ()
// CHECK:STDOUT: %B: type = class_type @B.1
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .B = <unexpected instref inst+6>
// CHECK:STDOUT: .B = %B.decl
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: class @B.1 {
@@ -70,7 +70,7 @@ class Y {
// CHECK:STDOUT: class @B.2;
// CHECK:STDOUT:
// CHECK:STDOUT: class @Y {
// CHECK:STDOUT: class_decl @.1, ()
// CHECK:STDOUT: %.decl = class_decl @.1, ()
// CHECK:STDOUT: %.loc21: type = class_type @.1
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
+2 -2
View File
@@ -31,9 +31,9 @@ fn Class.H() {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl.loc7 = class_decl @Class, ()
// CHECK:STDOUT: %Class: type = class_type @Class
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl.loc18 = class_decl @Class, ()
// CHECK:STDOUT: %F: <function> = fn_decl @F
// CHECK:STDOUT: %G: <function> = fn_decl @G
// CHECK:STDOUT: %H: <function> = fn_decl @H
+1 -1
View File
@@ -32,7 +32,7 @@ class Class {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl = class_decl @Class, ()
// CHECK:STDOUT: %Class: type = class_type @Class
// CHECK:STDOUT: }
// CHECK:STDOUT:
+1 -1
View File
@@ -24,7 +24,7 @@ fn G() -> i32 {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl = class_decl @Class, ()
// CHECK:STDOUT: %Class: type = class_type @Class
// CHECK:STDOUT: %G: <function> = fn_decl @G
// CHECK:STDOUT: }
+2 -2
View File
@@ -59,11 +59,11 @@ fn CallWrongSelf(ws: WrongSelf) {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl = class_decl @Class, ()
// CHECK:STDOUT: %Class: type = class_type @Class
// CHECK:STDOUT: %F: <function> = fn_decl @F.1
// CHECK:STDOUT: %G: <function> = fn_decl @G
// CHECK:STDOUT: class_decl @WrongSelf, ()
// CHECK:STDOUT: %WrongSelf.decl = class_decl @WrongSelf, ()
// CHECK:STDOUT: %WrongSelf: type = class_type @WrongSelf
// CHECK:STDOUT: %CallWrongSelf: <function> = fn_decl @CallWrongSelf
// CHECK:STDOUT: }
+1 -1
View File
@@ -28,7 +28,7 @@ fn G() -> i32 {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl = class_decl @Class, ()
// CHECK:STDOUT: %Class: type = class_type @Class
// CHECK:STDOUT: %G: <function> = fn_decl @G
// CHECK:STDOUT: }
+1 -1
View File
@@ -24,7 +24,7 @@ fn G(c: Class) -> i32 {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl = class_decl @Class, ()
// CHECK:STDOUT: %Class: type = class_type @Class
// CHECK:STDOUT: %G: <function> = fn_decl @G
// CHECK:STDOUT: }
+1 -1
View File
@@ -24,7 +24,7 @@ fn Run() -> i32 {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl = class_decl @Class, ()
// CHECK:STDOUT: %Class: type = class_type @Class
// CHECK:STDOUT: %Run: <function> = fn_decl @Run
// CHECK:STDOUT: }
@@ -25,7 +25,7 @@ fn Run() -> i32 {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl = class_decl @Class, ()
// CHECK:STDOUT: %Class: type = class_type @Class
// CHECK:STDOUT: %Run: <function> = fn_decl @Run
// CHECK:STDOUT: }
+1 -1
View File
@@ -11,7 +11,7 @@ fn F(p: Class*) -> Class* { return p; }
// CHECK:STDOUT: --- forward_declared.carbon
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl = class_decl @Class, ()
// CHECK:STDOUT: %Class: type = class_type @Class
// CHECK:STDOUT: %F: <function> = fn_decl @F
// CHECK:STDOUT: }
+1 -1
View File
@@ -26,7 +26,7 @@ fn MakeReorder(n: i32, next: Class*) -> Class {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl = class_decl @Class, ()
// CHECK:STDOUT: %Class: type = class_type @Class
// CHECK:STDOUT: %Make: <function> = fn_decl @Make
// CHECK:STDOUT: %MakeReorder: <function> = fn_decl @MakeReorder
+1 -1
View File
@@ -21,7 +21,7 @@ fn F() -> i32 {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl = class_decl @Class, ()
// CHECK:STDOUT: %Class: type = class_type @Class
// CHECK:STDOUT: %F: <function> = fn_decl @F
// CHECK:STDOUT: }
+2 -2
View File
@@ -32,10 +32,10 @@ fn MakeOuter() -> Outer {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Inner, ()
// CHECK:STDOUT: %Inner.decl = class_decl @Inner, ()
// CHECK:STDOUT: %Inner: type = class_type @Inner
// CHECK:STDOUT: %MakeInner: <function> = fn_decl @MakeInner
// CHECK:STDOUT: class_decl @Outer, ()
// CHECK:STDOUT: %Outer.decl = class_decl @Outer, ()
// CHECK:STDOUT: %Outer: type = class_type @Outer
// CHECK:STDOUT: %MakeOuter: <function> = fn_decl @MakeOuter
// CHECK:STDOUT: }
+1 -1
View File
@@ -52,7 +52,7 @@ fn CallGOnInitializingExpr() -> i32 {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl = class_decl @Class, ()
// CHECK:STDOUT: %Class: type = class_type @Class
// CHECK:STDOUT: %F: <function> = fn_decl @F
// CHECK:STDOUT: %Call: <function> = fn_decl @Call
+3 -3
View File
@@ -38,13 +38,13 @@ fn F(a: Outer*) {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Outer, ()
// CHECK:STDOUT: %Outer.decl = class_decl @Outer, ()
// CHECK:STDOUT: %Outer: type = class_type @Outer
// CHECK:STDOUT: %F: <function> = fn_decl @F
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: class @Outer {
// CHECK:STDOUT: class_decl @Inner, ()
// CHECK:STDOUT: %Inner.decl = class_decl @Inner, ()
// CHECK:STDOUT: %Inner: type = class_type @Inner
// CHECK:STDOUT: %Self.ref: type = name_ref Self, file.%Outer
// CHECK:STDOUT: %.loc14_15: type = ptr_type Outer
@@ -63,7 +63,7 @@ fn F(a: Outer*) {
// CHECK:STDOUT: %pi: <unbound field of class Outer> = bind_name pi, %.loc16_9.2
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Inner = <unexpected instref inst+2>
// CHECK:STDOUT: .Inner = %Inner.decl
// CHECK:STDOUT: .po = %po
// CHECK:STDOUT: .qo = %qo
// CHECK:STDOUT: .pi = %pi
+3 -3
View File
@@ -29,18 +29,18 @@ fn G(o: Outer) {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Outer, ()
// CHECK:STDOUT: %Outer.decl = class_decl @Outer, ()
// CHECK:STDOUT: %Outer: type = class_type @Outer
// CHECK:STDOUT: %F: <function> = fn_decl @F
// CHECK:STDOUT: %G: <function> = fn_decl @G
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: class @Outer {
// CHECK:STDOUT: class_decl @Inner, ()
// CHECK:STDOUT: %Inner.decl = class_decl @Inner, ()
// CHECK:STDOUT: %Inner: type = class_type @Inner
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Inner = <unexpected instref inst+2>
// CHECK:STDOUT: .Inner = %Inner.decl
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: class @Inner {
+1 -1
View File
@@ -29,7 +29,7 @@ fn Class.G[self: Class](r#self: i32) -> (i32, i32) {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl = class_decl @Class, ()
// CHECK:STDOUT: %Class: type = class_type @Class
// CHECK:STDOUT: %F: <function> = fn_decl @F
// CHECK:STDOUT: %G: <function> = fn_decl @G
+1 -1
View File
@@ -18,7 +18,7 @@ class Class {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl = class_decl @Class, ()
// CHECK:STDOUT: %Class: type = class_type @Class
// CHECK:STDOUT: }
// CHECK:STDOUT:
+2 -2
View File
@@ -19,9 +19,9 @@ fn Class.F() {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl.loc7 = class_decl @Class, ()
// CHECK:STDOUT: %Class: type = class_type @Class
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl.loc9 = class_decl @Class, ()
// CHECK:STDOUT: %F: <function> = fn_decl @F
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -19,15 +19,15 @@ abstract class C {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @A, ()
// CHECK:STDOUT: %A.decl.loc7 = class_decl @A, ()
// CHECK:STDOUT: %A: type = class_type @A
// CHECK:STDOUT: class_decl @B, ()
// CHECK:STDOUT: %B.decl.loc8 = class_decl @B, ()
// CHECK:STDOUT: %B: type = class_type @B
// CHECK:STDOUT: class_decl @C, ()
// CHECK:STDOUT: %C.decl.loc9 = class_decl @C, ()
// CHECK:STDOUT: %C: type = class_type @C
// CHECK:STDOUT: class_decl @A, ()
// CHECK:STDOUT: class_decl @B, ()
// CHECK:STDOUT: class_decl @C, ()
// CHECK:STDOUT: %A.decl.loc11 = class_decl @A, ()
// CHECK:STDOUT: %B.decl.loc12 = class_decl @B, ()
// CHECK:STDOUT: %C.decl.loc13 = class_decl @C, ()
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: class @A {
+1 -1
View File
@@ -20,7 +20,7 @@ fn Class.F() -> i32 {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl = class_decl @Class, ()
// CHECK:STDOUT: %Class: type = class_type @Class
// CHECK:STDOUT: %F: <function> = fn_decl @F
// CHECK:STDOUT: }
+1 -1
View File
@@ -29,7 +29,7 @@ fn Run() -> i32 {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl = class_decl @Class, ()
// CHECK:STDOUT: %Class: type = class_type @Class
// CHECK:STDOUT: %F: <function> = fn_decl @F.2
// CHECK:STDOUT: %Run: <function> = fn_decl @Run
+1 -1
View File
@@ -27,7 +27,7 @@ fn Class.G[addr self: Class*]() -> i32 {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl = class_decl @Class, ()
// CHECK:STDOUT: %Class: type = class_type @Class
// CHECK:STDOUT: %F: <function> = fn_decl @F
// CHECK:STDOUT: %G: <function> = fn_decl @G
+1 -1
View File
@@ -24,7 +24,7 @@ fn Class.F[self: Class]() -> i32 {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl = class_decl @Class, ()
// CHECK:STDOUT: %Class: type = class_type @Class
// CHECK:STDOUT: %F: <function> = fn_decl @F
// CHECK:STDOUT: }
+1 -1
View File
@@ -22,7 +22,7 @@ fn Run() -> i32 {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Class, ()
// CHECK:STDOUT: %Class.decl = class_decl @Class, ()
// CHECK:STDOUT: %Class: type = class_type @Class
// CHECK:STDOUT: %Run: <function> = fn_decl @Run
// CHECK:STDOUT: }
@@ -42,7 +42,7 @@ class C {
// CHECK:STDOUT: file {
// CHECK:STDOUT: %.loc17: i32 = block_arg <unexpected instblockref block4>
// CHECK:STDOUT: %x: i32 = bind_name x, %.loc17
// CHECK:STDOUT: class_decl @C, ()
// CHECK:STDOUT: %C.decl = class_decl @C, ()
// CHECK:STDOUT: %C: type = class_type @C
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -36,7 +36,7 @@ fn G() -> C {
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: %F: <function> = fn_decl @F
// CHECK:STDOUT: class_decl @C, ()
// CHECK:STDOUT: %C.decl = class_decl @C, ()
// CHECK:STDOUT: %C: type = class_type @C
// CHECK:STDOUT: %G: <function> = fn_decl @G
// CHECK:STDOUT: }
+1 -1
View File
@@ -27,7 +27,7 @@ fn G() -> i32 {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @C, ()
// CHECK:STDOUT: %C.decl = class_decl @C, ()
// CHECK:STDOUT: %C: type = class_type @C
// CHECK:STDOUT: %F: <function> = fn_decl @F
// CHECK:STDOUT: %G: <function> = fn_decl @G
@@ -26,7 +26,7 @@ var p: Incomplete* = &s.a;
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Incomplete, ()
// CHECK:STDOUT: %Incomplete.decl = class_decl @Incomplete, ()
// CHECK:STDOUT: %Incomplete: type = class_type @Incomplete
// CHECK:STDOUT: %Incomplete.ref.loc15: type = name_ref Incomplete, %Incomplete
// CHECK:STDOUT: %.loc15: type = struct_type {.a: Incomplete}
@@ -28,7 +28,7 @@ var p: Incomplete* = &t[1];
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @Incomplete, ()
// CHECK:STDOUT: %Incomplete.decl = class_decl @Incomplete, ()
// CHECK:STDOUT: %Incomplete: type = class_type @Incomplete
// CHECK:STDOUT: %Incomplete.ref.loc15: type = name_ref Incomplete, %Incomplete
// CHECK:STDOUT: %.loc15_24.1: (type, type) = tuple_literal (i32, %Incomplete.ref.loc15)
+1 -1
View File
@@ -32,7 +32,7 @@ fn F(x: X) {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: class_decl @X, ()
// CHECK:STDOUT: %X.decl = class_decl @X, ()
// CHECK:STDOUT: %X: type = class_type @X
// CHECK:STDOUT: %F: <function> = fn_decl @F
// CHECK:STDOUT: }
+12
View File
@@ -437,6 +437,12 @@ class InstNamer {
.name_id);
continue;
}
case ClassDecl::Kind: {
add_inst_name_id(
sem_ir_.classes().Get(inst.As<ClassDecl>().class_id).name_id,
".decl");
continue;
}
case ClassType::Kind: {
add_inst_name_id(
sem_ir_.classes().Get(inst.As<ClassType>().class_id).name_id);
@@ -710,6 +716,12 @@ class Formatter {
}
}
// Print ClassDecl with type-like semantics even though it lacks a type_id.
auto FormatInstructionLHS(InstId inst_id, ClassDecl /*inst*/) -> void {
FormatInstName(inst_id);
out_ << " = ";
}
template <typename InstT>
auto FormatInstructionRHS(InstT inst) -> void {
// By default, an instruction has a comma-separated argument list.