mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-02 17:52:58 +01:00
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:
co-authored by
Richard Smith
parent
ca53c18ddc
commit
962defd1e8
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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: }
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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: }
|
||||
|
||||
@@ -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: }
|
||||
|
||||
@@ -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
@@ -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 {
|
||||
|
||||
+12
-12
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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: }
|
||||
|
||||
@@ -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: }
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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: }
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user