Procházet zdrojové kódy

Collapse empty braces onto a single line. (#3733)

Don't write out `.members` section at all if it's empty.
Richard Smith před 2 roky
rodič
revize
a6f4752a7b
90 změnil soubory, kde provedl 313 přidání a 502 odebrání
  1. 1 2
      toolchain/check/testdata/alias/fail_local_in_namespace.carbon
  2. 1 2
      toolchain/check/testdata/array/fail_undefined_bound.carbon
  3. 1 2
      toolchain/check/testdata/as/as_type.carbon
  4. 1 2
      toolchain/check/testdata/as/fail_no_conversion.carbon
  5. 1 2
      toolchain/check/testdata/as/fail_not_type.carbon
  6. 1 4
      toolchain/check/testdata/as/identity.carbon
  7. 1 4
      toolchain/check/testdata/as/tuple.carbon
  8. 1 2
      toolchain/check/testdata/basics/empty.carbon
  9. 1 2
      toolchain/check/testdata/basics/empty_decl.carbon
  10. 1 2
      toolchain/check/testdata/class/fail_base_as_declared_name.carbon
  11. 1 4
      toolchain/check/testdata/class/fail_base_bad_type.carbon
  12. 2 6
      toolchain/check/testdata/class/fail_base_misplaced.carbon
  13. 1 4
      toolchain/check/testdata/class/fail_base_modifiers.carbon
  14. 1 4
      toolchain/check/testdata/class/fail_base_no_extend.carbon
  15. 2 8
      toolchain/check/testdata/class/fail_base_repeated.carbon
  16. 1 4
      toolchain/check/testdata/class/fail_base_unbound.carbon
  17. 3 12
      toolchain/check/testdata/class/fail_import_misuses.carbon
  18. 3 12
      toolchain/check/testdata/class/fail_modifiers.carbon
  19. 0 1
      toolchain/check/testdata/class/fail_out_of_line_decl.carbon
  20. 7 28
      toolchain/check/testdata/class/fail_redeclaration_introducer.carbon
  21. 2 10
      toolchain/check/testdata/class/fail_redeclaration_scope.carbon
  22. 1 4
      toolchain/check/testdata/class/fail_todo_import_forward_decl.carbon
  23. 2 8
      toolchain/check/testdata/class/import.carbon
  24. 3 12
      toolchain/check/testdata/class/redeclaration_introducer.carbon
  25. 1 4
      toolchain/check/testdata/global/class_obj.carbon
  26. 1 4
      toolchain/check/testdata/global/class_with_fun.carbon
  27. 2 2
      toolchain/check/testdata/impl/basic.carbon
  28. 2 3
      toolchain/check/testdata/impl/declaration.carbon
  29. 3 7
      toolchain/check/testdata/impl/empty.carbon
  30. 2 2
      toolchain/check/testdata/impl/fail_extend_impl_forall.carbon
  31. 3 7
      toolchain/check/testdata/impl/fail_extend_impl_scope.carbon
  32. 4 11
      toolchain/check/testdata/impl/fail_extend_impl_type_as.carbon
  33. 2 2
      toolchain/check/testdata/impl/fail_extend_partially_defined_interface.carbon
  34. 2 2
      toolchain/check/testdata/impl/fail_impl_as_scope.carbon
  35. 2 6
      toolchain/check/testdata/impl/fail_impl_bad_interface.carbon
  36. 3 7
      toolchain/check/testdata/impl/fail_impl_bad_type.carbon
  37. 3 7
      toolchain/check/testdata/impl/fail_redefinition.carbon
  38. 2 2
      toolchain/check/testdata/impl/fail_todo_extend_impl.carbon
  39. 2 4
      toolchain/check/testdata/impl/impl_as.carbon
  40. 2 2
      toolchain/check/testdata/impl/impl_forall.carbon
  41. 3 9
      toolchain/check/testdata/impl/redeclaration.carbon
  42. 1 2
      toolchain/check/testdata/index/fail_invalid_base.carbon
  43. 1 2
      toolchain/check/testdata/index/fail_negative_indexing.carbon
  44. 2 3
      toolchain/check/testdata/interface/as_type.carbon
  45. 4 5
      toolchain/check/testdata/interface/basic.carbon
  46. 6 7
      toolchain/check/testdata/interface/fail_add_member_outside_definition.carbon
  47. 2 3
      toolchain/check/testdata/interface/fail_as_type_of_type.carbon
  48. 4 5
      toolchain/check/testdata/interface/fail_duplicate.carbon
  49. 2 2
      toolchain/check/testdata/interface/fail_lookup_undefined.carbon
  50. 2 2
      toolchain/check/testdata/interface/fail_member_lookup.carbon
  51. 4 6
      toolchain/check/testdata/interface/fail_modifiers.carbon
  52. 2 2
      toolchain/check/testdata/interface/fail_redeclare_member.carbon
  53. 2 2
      toolchain/check/testdata/interface/fail_todo_define_out_of_line.carbon
  54. 2 2
      toolchain/check/testdata/interface/fail_todo_facet_lookup.carbon
  55. 4 5
      toolchain/check/testdata/interface/fail_todo_modifiers.carbon
  56. 8 10
      toolchain/check/testdata/interface/import.carbon
  57. 1 2
      toolchain/check/testdata/let/fail_generic_import.carbon
  58. 1 2
      toolchain/check/testdata/let/fail_modifiers.carbon
  59. 1 2
      toolchain/check/testdata/let/fail_todo_modifiers.carbon
  60. 1 2
      toolchain/check/testdata/let/generic_import.carbon
  61. 1 2
      toolchain/check/testdata/let/import.carbon
  62. 1 2
      toolchain/check/testdata/namespace/add_to_import.carbon
  63. 4 8
      toolchain/check/testdata/namespace/fail_conflict_after_merge.carbon
  64. 1 2
      toolchain/check/testdata/namespace/fail_conflict_imported_namespace_first.carbon
  65. 1 2
      toolchain/check/testdata/namespace/fail_conflict_imported_namespace_second.carbon
  66. 1 2
      toolchain/check/testdata/namespace/fail_decl_in_alias.carbon
  67. 2 4
      toolchain/check/testdata/namespace/fail_modifiers.carbon
  68. 1 2
      toolchain/check/testdata/namespace/fail_unresolved_scope.carbon
  69. 3 6
      toolchain/check/testdata/namespace/imported_indirect.carbon
  70. 2 4
      toolchain/check/testdata/namespace/merging.carbon
  71. 1 2
      toolchain/check/testdata/operators/fail_type_mismatch_once.carbon
  72. 1 2
      toolchain/check/testdata/operators/fail_unimplemented_op.carbon
  73. 6 12
      toolchain/check/testdata/packages/explicit_imports.carbon
  74. 4 8
      toolchain/check/testdata/packages/fail_cycle.carbon
  75. 8 16
      toolchain/check/testdata/packages/fail_duplicate_api.carbon
  76. 10 20
      toolchain/check/testdata/packages/fail_extension.carbon
  77. 4 8
      toolchain/check/testdata/packages/fail_import_default.carbon
  78. 9 18
      toolchain/check/testdata/packages/fail_import_invalid.carbon
  79. 5 10
      toolchain/check/testdata/packages/fail_import_repeat.carbon
  80. 4 8
      toolchain/check/testdata/packages/fail_package_main.carbon
  81. 10 20
      toolchain/check/testdata/packages/implicit_imports.carbon
  82. 1 2
      toolchain/check/testdata/pointer/fail_deref_error.carbon
  83. 1 2
      toolchain/check/testdata/pointer/fail_deref_namespace.carbon
  84. 1 2
      toolchain/check/testdata/return/fail_let_in_type.carbon
  85. 1 2
      toolchain/check/testdata/struct/fail_keyword_name.carbon
  86. 1 2
      toolchain/check/testdata/var/fail_namespace_conflict.carbon
  87. 1 4
      toolchain/check/testdata/var/fail_not_copyable.carbon
  88. 1 2
      toolchain/check/testdata/var/shadowing.carbon
  89. 1 2
      toolchain/driver/testdata/stdin.carbon
  90. 98 38
      toolchain/sem_ir/formatter.cpp

+ 1 - 2
toolchain/check/testdata/alias/fail_local_in_namespace.carbon

@@ -31,8 +31,7 @@ fn F() -> bool {
 // CHECK:STDOUT:     .NS = %.loc7
 // CHECK:STDOUT:     .F = %F
 // CHECK:STDOUT:   } [template]
-// CHECK:STDOUT:   %.loc7: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   %.loc7: <namespace> = namespace {} [template]
 // CHECK:STDOUT:   %F: <function> = fn_decl @F {
 // CHECK:STDOUT:     %return.var: ref bool = var <return slot>
 // CHECK:STDOUT:   } [template]

+ 1 - 2
toolchain/check/testdata/array/fail_undefined_bound.carbon

@@ -11,6 +11,5 @@ var a: [i32; ];
 
 // CHECK:STDOUT: --- fail_undefined_bound.carbon
 // CHECK:STDOUT:
-// CHECK:STDOUT: file {
-// CHECK:STDOUT: }
+// CHECK:STDOUT: file {}
 // CHECK:STDOUT:

+ 1 - 2
toolchain/check/testdata/as/as_type.carbon

@@ -14,8 +14,7 @@ let t: type = (i32, i32) as type;
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT:   %.loc7_24.1: (type, type) = tuple_literal (i32, i32)
 // CHECK:STDOUT:   %.loc7_24.2: type = converted %.loc7_24.1, constants.%.2 [template = constants.%.2]
 // CHECK:STDOUT:   %t: type = bind_name t, %.loc7_24.2

+ 1 - 2
toolchain/check/testdata/as/fail_no_conversion.carbon

@@ -19,8 +19,7 @@ let n: (i32, i32) = 1 as (i32, i32);
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT:   %.loc10_17.1: (type, type) = tuple_literal (i32, i32)
 // CHECK:STDOUT:   %.loc10_17.2: type = converted %.loc10_17.1, constants.%.2 [template = constants.%.2]
 // CHECK:STDOUT:   %.loc10_21: i32 = int_literal 1 [template = constants.%.4]

+ 1 - 2
toolchain/check/testdata/as/fail_not_type.carbon

@@ -17,8 +17,7 @@ let n: i32 = 1 as 2;
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT:   %.loc10_14: i32 = int_literal 1 [template = constants.%.1]
 // CHECK:STDOUT:   %.loc10_19: i32 = int_literal 2 [template = constants.%.2]
 // CHECK:STDOUT:   %n: i32 = bind_name n, <error>

+ 1 - 4
toolchain/check/testdata/as/identity.carbon

@@ -61,10 +61,7 @@ fn Initializing() {
 // CHECK:STDOUT:   %Initializing: <function> = fn_decl @Initializing {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: class @X {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
+// CHECK:STDOUT: class @X {}
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @Value(%n: X) {
 // CHECK:STDOUT: !entry:

+ 1 - 4
toolchain/check/testdata/as/tuple.carbon

@@ -49,10 +49,7 @@ fn Var() {
 // CHECK:STDOUT:   %Var: <function> = fn_decl @Var {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: class @X {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
+// CHECK:STDOUT: class @X {}
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @Make() -> %return: X;
 // CHECK:STDOUT:

+ 1 - 2
toolchain/check/testdata/basics/empty.carbon

@@ -7,7 +7,6 @@
 // CHECK:STDOUT: --- empty.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 1 - 2
toolchain/check/testdata/basics/empty_decl.carbon

@@ -9,7 +9,6 @@
 // CHECK:STDOUT: --- empty_decl.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 1 - 2
toolchain/check/testdata/class/fail_base_as_declared_name.carbon

@@ -16,6 +16,5 @@ fn N.base() {}
 
 // CHECK:STDOUT: --- fail_base_as_declared_name.carbon
 // CHECK:STDOUT:
-// CHECK:STDOUT: file {
-// CHECK:STDOUT: }
+// CHECK:STDOUT: file {}
 // CHECK:STDOUT:

+ 1 - 4
toolchain/check/testdata/class/fail_base_bad_type.carbon

@@ -299,10 +299,7 @@ fn AccessMemberWithInvalidBaseFinal_NoMember(p: DeriveFromFinal*) -> i32 {
 // CHECK:STDOUT:   } [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: class @Base {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
+// CHECK:STDOUT: class @Base {}
 // CHECK:STDOUT:
 // CHECK:STDOUT: class @Final {
 // CHECK:STDOUT:   %.loc9: <unbound element of class Final> = field_decl a, element0 [template]

+ 2 - 6
toolchain/check/testdata/class/fail_base_misplaced.carbon

@@ -28,13 +28,9 @@ fn F() {
 // CHECK:STDOUT:   %.1: type = struct_type {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: file {
-// CHECK:STDOUT: }
-// CHECK:STDOUT:
-// CHECK:STDOUT: class @B {
+// CHECK:STDOUT: file {}
 // CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
+// CHECK:STDOUT: class @B {}
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @F() {
 // CHECK:STDOUT: !entry:

+ 1 - 4
toolchain/check/testdata/class/fail_base_modifiers.carbon

@@ -76,10 +76,7 @@ class C4 {
 // CHECK:STDOUT:   %C4.decl = class_decl @C4 {} [template = constants.%C4]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: class @B {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
+// CHECK:STDOUT: class @B {}
 // CHECK:STDOUT:
 // CHECK:STDOUT: class @C1 {
 // CHECK:STDOUT:   %B.ref: type = name_ref B, file.%B.decl [template = constants.%B]

+ 1 - 4
toolchain/check/testdata/class/fail_base_no_extend.carbon

@@ -34,10 +34,7 @@ class C {
 // CHECK:STDOUT:   %C.decl = class_decl @C {} [template = constants.%C]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: class @B {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
+// CHECK:STDOUT: class @B {}
 // CHECK:STDOUT:
 // CHECK:STDOUT: class @C {
 // CHECK:STDOUT:   %B.ref: type = name_ref B, file.%B.decl [template = constants.%B]

+ 2 - 8
toolchain/check/testdata/class/fail_base_repeated.carbon

@@ -58,15 +58,9 @@ class D {
 // CHECK:STDOUT:   %D.decl = class_decl @D {} [template = constants.%D]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: class @B1 {
+// CHECK:STDOUT: class @B1 {}
 // CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
-// CHECK:STDOUT:
-// CHECK:STDOUT: class @B2 {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
+// CHECK:STDOUT: class @B2 {}
 // CHECK:STDOUT:
 // CHECK:STDOUT: class @C {
 // CHECK:STDOUT:   %B1.ref: type = name_ref B1, file.%B1.decl [template = constants.%B1]

+ 1 - 4
toolchain/check/testdata/class/fail_base_unbound.carbon

@@ -40,10 +40,7 @@ let b: B = C.base;
 // CHECK:STDOUT:   %b: B = bind_name b, <error>
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: class @B {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
+// CHECK:STDOUT: class @B {}
 // CHECK:STDOUT:
 // CHECK:STDOUT: class @C {
 // CHECK:STDOUT:   %B.ref: type = name_ref B, file.%B.decl [template = constants.%B]

+ 3 - 12
toolchain/check/testdata/class/fail_import_misuses.carbon

@@ -51,10 +51,7 @@ var a: Incomplete;
 // CHECK:STDOUT:   %Incomplete.decl = class_decl @Incomplete {} [template = constants.%Incomplete]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: class @Empty {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
+// CHECK:STDOUT: class @Empty {}
 // CHECK:STDOUT:
 // CHECK:STDOUT: class @Incomplete;
 // CHECK:STDOUT:
@@ -84,15 +81,9 @@ var a: Incomplete;
 // CHECK:STDOUT:   %a: ref <error> = bind_name a, %a.var
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: class @Empty {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
-// CHECK:STDOUT:
-// CHECK:STDOUT: class @.1 {
+// CHECK:STDOUT: class @Empty {}
 // CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
+// CHECK:STDOUT: class @.1 {}
 // CHECK:STDOUT:
 // CHECK:STDOUT: class @Incomplete;
 // CHECK:STDOUT:

+ 3 - 12
toolchain/check/testdata/class/fail_modifiers.carbon

@@ -95,22 +95,13 @@ abstract base class AbstractAndBase {}
 // CHECK:STDOUT:
 // CHECK:STDOUT: class @DuplicatePrivate;
 // CHECK:STDOUT:
-// CHECK:STDOUT: class @TwoAccess {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
+// CHECK:STDOUT: class @TwoAccess {}
 // CHECK:STDOUT:
 // CHECK:STDOUT: class @TwoAbstract;
 // CHECK:STDOUT:
-// CHECK:STDOUT: class @Virtual {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
+// CHECK:STDOUT: class @Virtual {}
 // CHECK:STDOUT:
 // CHECK:STDOUT: class @WrongOrder;
 // CHECK:STDOUT:
-// CHECK:STDOUT: class @AbstractAndBase {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
+// CHECK:STDOUT: class @AbstractAndBase {}
 // CHECK:STDOUT:

+ 0 - 1
toolchain/check/testdata/class/fail_out_of_line_decl.carbon

@@ -27,7 +27,6 @@ fn C.F() {}
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: class @C {
-// CHECK:STDOUT:
 // CHECK:STDOUT: !members:
 // CHECK:STDOUT:   .F = file.%F
 // CHECK:STDOUT: }

+ 7 - 28
toolchain/check/testdata/class/fail_redeclaration_introducer.carbon

@@ -114,38 +114,17 @@ base class G;
 // CHECK:STDOUT:   %G.decl.loc75 = class_decl @G {} [template = constants.%G]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: class @A {
+// CHECK:STDOUT: class @A {}
 // CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
-// CHECK:STDOUT:
-// CHECK:STDOUT: class @B {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
-// CHECK:STDOUT:
-// CHECK:STDOUT: class @C {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
+// CHECK:STDOUT: class @B {}
 // CHECK:STDOUT:
-// CHECK:STDOUT: class @D {
+// CHECK:STDOUT: class @C {}
 // CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
-// CHECK:STDOUT:
-// CHECK:STDOUT: class @E {
+// CHECK:STDOUT: class @D {}
 // CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
+// CHECK:STDOUT: class @E {}
 // CHECK:STDOUT:
-// CHECK:STDOUT: class @F {
+// CHECK:STDOUT: class @F {}
 // CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
-// CHECK:STDOUT:
-// CHECK:STDOUT: class @G {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
+// CHECK:STDOUT: class @G {}
 // CHECK:STDOUT:

+ 2 - 10
toolchain/check/testdata/class/fail_redeclaration_scope.carbon

@@ -68,21 +68,13 @@ class Y {
 // CHECK:STDOUT:   .B = %B.decl
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: class @B.1 {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
+// CHECK:STDOUT: class @B.1 {}
 // CHECK:STDOUT:
 // CHECK:STDOUT: class @B.2;
 // CHECK:STDOUT:
 // CHECK:STDOUT: class @Y {
 // CHECK:STDOUT:   %.decl = class_decl @.1 {} [template = constants.%.2]
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: class @.1 {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
+// CHECK:STDOUT: class @.1 {}
 // CHECK:STDOUT:

+ 1 - 4
toolchain/check/testdata/class/fail_todo_import_forward_decl.carbon

@@ -61,8 +61,5 @@ class ForwardDecl {
 // CHECK:STDOUT:
 // CHECK:STDOUT: class @ForwardDecl;
 // CHECK:STDOUT:
-// CHECK:STDOUT: class @.1 {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
+// CHECK:STDOUT: class @.1 {}
 // CHECK:STDOUT:

+ 2 - 8
toolchain/check/testdata/class/import.carbon

@@ -72,10 +72,7 @@ fn Run() {
 // CHECK:STDOUT:   %Incomplete.decl = class_decl @Incomplete {} [template = constants.%Incomplete]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: class @Empty {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
+// CHECK:STDOUT: class @Empty {}
 // CHECK:STDOUT:
 // CHECK:STDOUT: class @Field {
 // CHECK:STDOUT:   %.loc8: <unbound element of class Field> = field_decl x, element0 [template]
@@ -146,10 +143,7 @@ fn Run() {
 // CHECK:STDOUT:   %Run: <function> = fn_decl @Run {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: class @Empty {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
+// CHECK:STDOUT: class @Empty {}
 // CHECK:STDOUT:
 // CHECK:STDOUT: class @Field {
 // CHECK:STDOUT:   %import_ref: <unbound element of class Field> = import_ref ir1, inst+7, used [template = imports.%.1]

+ 3 - 12
toolchain/check/testdata/class/redeclaration_introducer.carbon

@@ -35,18 +35,9 @@ abstract class C {}
 // CHECK:STDOUT:   %C.decl.loc13 = class_decl @C {} [template = constants.%C]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: class @A {
+// CHECK:STDOUT: class @A {}
 // CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
-// CHECK:STDOUT:
-// CHECK:STDOUT: class @B {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
-// CHECK:STDOUT:
-// CHECK:STDOUT: class @C {
+// CHECK:STDOUT: class @B {}
 // CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
+// CHECK:STDOUT: class @C {}
 // CHECK:STDOUT:

+ 1 - 4
toolchain/check/testdata/global/class_obj.carbon

@@ -28,10 +28,7 @@ var a: A = {};
 // CHECK:STDOUT:   %a: ref A = bind_name a, %a.var
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: class @A {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
+// CHECK:STDOUT: class @A {}
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @__global_init() {
 // CHECK:STDOUT: !entry:

+ 1 - 4
toolchain/check/testdata/global/class_with_fun.carbon

@@ -37,10 +37,7 @@ var a: A = {};
 // CHECK:STDOUT:   %a: ref A = bind_name a, %a.var
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: class @A {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
+// CHECK:STDOUT: class @A {}
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @ret_a() -> %return: A {
 // CHECK:STDOUT: !entry:

+ 2 - 2
toolchain/check/testdata/impl/basic.carbon

@@ -36,8 +36,8 @@ impl i32 as Simple {
 // CHECK:STDOUT:
 // CHECK:STDOUT: !members:
 // CHECK:STDOUT:   .F = %.loc8
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = (%F)}
+// CHECK:STDOUT:   witness = (%F)
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: impl @impl: i32 as Simple {
 // CHECK:STDOUT:   %F: <function> = fn_decl @F.2 {} [template]

+ 2 - 3
toolchain/check/testdata/impl/declaration.carbon

@@ -25,10 +25,9 @@ impl i32 as I;
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: interface @I {
-// CHECK:STDOUT:
 // CHECK:STDOUT: !members:
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = ()}
+// CHECK:STDOUT:   witness = ()
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: impl @impl: i32 as I;
 // CHECK:STDOUT:

+ 3 - 7
toolchain/check/testdata/impl/empty.carbon

@@ -27,13 +27,9 @@ impl i32 as Empty {
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: interface @Empty {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = ()}
-// CHECK:STDOUT:
-// CHECK:STDOUT: impl @impl: i32 as Empty {
-// CHECK:STDOUT:
 // CHECK:STDOUT: !members:
+// CHECK:STDOUT:   witness = ()
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
+// CHECK:STDOUT: impl @impl: i32 as Empty {}
+// CHECK:STDOUT:

+ 2 - 2
toolchain/check/testdata/impl/fail_extend_impl_forall.carbon

@@ -55,8 +55,8 @@ class C {
 // CHECK:STDOUT:
 // CHECK:STDOUT: !members:
 // CHECK:STDOUT:   .F = %.loc11
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = (%F)}
+// CHECK:STDOUT:   witness = (%F)
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: impl @impl: C as <error> {
 // CHECK:STDOUT:   %F: <function> = fn_decl @F.2 {

+ 3 - 7
toolchain/check/testdata/impl/fail_extend_impl_scope.carbon

@@ -28,13 +28,9 @@ extend impl i32 as I {}
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: interface @I {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = ()}
-// CHECK:STDOUT:
-// CHECK:STDOUT: impl @impl: i32 as I {
-// CHECK:STDOUT:
 // CHECK:STDOUT: !members:
+// CHECK:STDOUT:   witness = ()
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
+// CHECK:STDOUT: impl @impl: i32 as I {}
+// CHECK:STDOUT:

+ 4 - 11
toolchain/check/testdata/impl/fail_extend_impl_type_as.carbon

@@ -57,22 +57,15 @@ class E {
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: interface @I {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = ()}
-// CHECK:STDOUT:
-// CHECK:STDOUT: impl @impl.1: i32 as I {
-// CHECK:STDOUT:
 // CHECK:STDOUT: !members:
+// CHECK:STDOUT:   witness = ()
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: impl @impl.2: D as I;
+// CHECK:STDOUT: impl @impl.1: i32 as I {}
 // CHECK:STDOUT:
-// CHECK:STDOUT: impl @impl.3: E as I {
+// CHECK:STDOUT: impl @impl.2: D as I;
 // CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
+// CHECK:STDOUT: impl @impl.3: E as I {}
 // CHECK:STDOUT:
 // CHECK:STDOUT: class @C {
 // CHECK:STDOUT:   impl_decl @impl.1 {

+ 2 - 2
toolchain/check/testdata/impl/fail_extend_partially_defined_interface.carbon

@@ -36,8 +36,8 @@ interface I {
 // CHECK:STDOUT:
 // CHECK:STDOUT: !members:
 // CHECK:STDOUT:   .C = %C.decl
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = ()}
+// CHECK:STDOUT:   witness = ()
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: impl @impl: C as I;
 // CHECK:STDOUT:

+ 2 - 2
toolchain/check/testdata/impl/fail_impl_as_scope.carbon

@@ -39,8 +39,8 @@ impl as Simple {
 // CHECK:STDOUT:
 // CHECK:STDOUT: !members:
 // CHECK:STDOUT:   .F = %.loc8
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = (%F)}
+// CHECK:STDOUT:   witness = (%F)
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: impl @impl: <error> as Simple {
 // CHECK:STDOUT:   %F: <function> = fn_decl @F.2 {} [template]

+ 2 - 6
toolchain/check/testdata/impl/fail_impl_bad_interface.carbon

@@ -16,15 +16,11 @@ impl i32 as false {}
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT:   impl_decl @impl {
 // CHECK:STDOUT:     %.loc10: bool = bool_literal false [template = constants.%.1]
 // CHECK:STDOUT:   }
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: impl @impl: i32 as <error> {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
+// CHECK:STDOUT: impl @impl: i32 as <error> {}
 // CHECK:STDOUT:

+ 3 - 7
toolchain/check/testdata/impl/fail_impl_bad_type.carbon

@@ -30,13 +30,9 @@ impl true as I {}
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: interface @I {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = ()}
-// CHECK:STDOUT:
-// CHECK:STDOUT: impl @impl: <error> as I {
-// CHECK:STDOUT:
 // CHECK:STDOUT: !members:
+// CHECK:STDOUT:   witness = ()
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
+// CHECK:STDOUT: impl @impl: <error> as I {}
+// CHECK:STDOUT:

+ 3 - 7
toolchain/check/testdata/impl/fail_redefinition.carbon

@@ -36,13 +36,9 @@ impl i32 as I {}
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: interface @I {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = ()}
-// CHECK:STDOUT:
-// CHECK:STDOUT: impl @impl: i32 as I {
-// CHECK:STDOUT:
 // CHECK:STDOUT: !members:
+// CHECK:STDOUT:   witness = ()
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
+// CHECK:STDOUT: impl @impl: i32 as I {}
+// CHECK:STDOUT:

+ 2 - 2
toolchain/check/testdata/impl/fail_todo_extend_impl.carbon

@@ -60,8 +60,8 @@ fn G(c: C) {
 // CHECK:STDOUT:
 // CHECK:STDOUT: !members:
 // CHECK:STDOUT:   .F = %.loc8
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = (%F)}
+// CHECK:STDOUT:   witness = (%F)
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: impl @impl: C as HasF {
 // CHECK:STDOUT:   %F: <function> = fn_decl @F.2 {} [template]

+ 2 - 4
toolchain/check/testdata/impl/impl_as.carbon

@@ -39,8 +39,8 @@ class C {
 // CHECK:STDOUT:
 // CHECK:STDOUT: !members:
 // CHECK:STDOUT:   .F = %.loc8
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = (%F)}
+// CHECK:STDOUT:   witness = (%F)
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: impl @impl: C as Simple {
 // CHECK:STDOUT:   %F: <function> = fn_decl @F.2 {} [template]
@@ -53,8 +53,6 @@ class C {
 // CHECK:STDOUT:   impl_decl @impl {
 // CHECK:STDOUT:     %Simple.ref: type = name_ref Simple, file.%Simple.decl [template = constants.%.1]
 // CHECK:STDOUT:   }
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @F.1();

+ 2 - 2
toolchain/check/testdata/impl/impl_forall.carbon

@@ -39,8 +39,8 @@ impl forall [T:! type] T as Simple {
 // CHECK:STDOUT:
 // CHECK:STDOUT: !members:
 // CHECK:STDOUT:   .F = %.loc8
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = (%F)}
+// CHECK:STDOUT:   witness = (%F)
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: impl @impl: T as Simple {
 // CHECK:STDOUT:   %F: <function> = fn_decl @F.2 {} [template]

+ 3 - 9
toolchain/check/testdata/impl/redeclaration.carbon

@@ -38,21 +38,15 @@ impl i32 as I {}
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: interface @I {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = ()}
-// CHECK:STDOUT:
-// CHECK:STDOUT: impl @impl: i32 as I {
-// CHECK:STDOUT:
 // CHECK:STDOUT: !members:
+// CHECK:STDOUT:   witness = ()
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
+// CHECK:STDOUT: impl @impl: i32 as I {}
+// CHECK:STDOUT:
 // CHECK:STDOUT: class @X {
 // CHECK:STDOUT:   impl_decl @impl {
 // CHECK:STDOUT:     %I.ref: type = name_ref I, file.%I.decl [template = constants.%.1]
 // CHECK:STDOUT:   }
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 1 - 2
toolchain/check/testdata/index/fail_invalid_base.carbon

@@ -50,8 +50,7 @@ var d: i32 = {.a: i32, .b: i32}[0];
 // CHECK:STDOUT:     .c = %c
 // CHECK:STDOUT:     .d = %d
 // CHECK:STDOUT:   } [template]
-// CHECK:STDOUT:   %.loc11: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   %.loc11: <namespace> = namespace {} [template]
 // CHECK:STDOUT:   %a.var: ref i32 = var a
 // CHECK:STDOUT:   %a: ref i32 = bind_name a, %a.var
 // CHECK:STDOUT:   %F: <function> = fn_decl @F {} [template]

+ 1 - 2
toolchain/check/testdata/index/fail_negative_indexing.carbon

@@ -22,6 +22,5 @@ var b: i32 = a[-10];
 // CHECK:STDOUT:   %.7: i32 = int_literal 10 [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: file {
-// CHECK:STDOUT: }
+// CHECK:STDOUT: file {}
 // CHECK:STDOUT:

+ 2 - 3
toolchain/check/testdata/interface/as_type.carbon

@@ -29,10 +29,9 @@ fn F(e: Empty) {}
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: interface @Empty {
-// CHECK:STDOUT:
 // CHECK:STDOUT: !members:
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = ()}
+// CHECK:STDOUT:   witness = ()
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @F(%e: Empty) {
 // CHECK:STDOUT: !entry:

+ 4 - 5
toolchain/check/testdata/interface/basic.carbon

@@ -33,10 +33,9 @@ interface ForwardDeclared {
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: interface @Empty {
-// CHECK:STDOUT:
 // CHECK:STDOUT: !members:
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = ()}
+// CHECK:STDOUT:   witness = ()
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: interface @ForwardDeclared {
 // CHECK:STDOUT:   %F: <function> = fn_decl @F {} [template]
@@ -44,8 +43,8 @@ interface ForwardDeclared {
 // CHECK:STDOUT:
 // CHECK:STDOUT: !members:
 // CHECK:STDOUT:   .F = %.loc13
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = (%F)}
+// CHECK:STDOUT:   witness = (%F)
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @F();
 // CHECK:STDOUT:

+ 6 - 7
toolchain/check/testdata/interface/fail_add_member_outside_definition.carbon

@@ -44,11 +44,10 @@ interface Outer {
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: interface @Interface {
-// CHECK:STDOUT:
 // CHECK:STDOUT: !members:
 // CHECK:STDOUT:   .F = file.%F
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = ()}
+// CHECK:STDOUT:   witness = ()
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: interface @Outer {
 // CHECK:STDOUT:   %Inner.decl = interface_decl @Inner {} [template = constants.%.3]
@@ -56,16 +55,16 @@ interface Outer {
 // CHECK:STDOUT:
 // CHECK:STDOUT: !members:
 // CHECK:STDOUT:   .Inner = %Inner.decl
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = ()}
+// CHECK:STDOUT:   witness = ()
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: interface @Inner {
 // CHECK:STDOUT:   %.loc20: <function> = fn_decl @.1 {} [template]
 // CHECK:STDOUT:
 // CHECK:STDOUT: !members:
 // CHECK:STDOUT:   .F = @Outer.%F
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = ()}
+// CHECK:STDOUT:   witness = ()
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @F.1() {
 // CHECK:STDOUT: !entry:

+ 2 - 3
toolchain/check/testdata/interface/fail_as_type_of_type.carbon

@@ -35,10 +35,9 @@ fn F(T:! Empty) {
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: interface @Empty {
-// CHECK:STDOUT:
 // CHECK:STDOUT: !members:
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = ()}
+// CHECK:STDOUT:   witness = ()
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @F(%T: Empty) {
 // CHECK:STDOUT: !entry:

+ 4 - 5
toolchain/check/testdata/interface/fail_duplicate.carbon

@@ -64,16 +64,15 @@ interface Class { }
 // CHECK:STDOUT:
 // CHECK:STDOUT: !members:
 // CHECK:STDOUT:   .F = <error>
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = ()}
+// CHECK:STDOUT:   witness = ()
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: interface @.1;
 // CHECK:STDOUT:
 // CHECK:STDOUT: interface @.2 {
-// CHECK:STDOUT:
 // CHECK:STDOUT: !members:
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = ()}
+// CHECK:STDOUT:   witness = ()
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: class @Class;
 // CHECK:STDOUT:

+ 2 - 2
toolchain/check/testdata/interface/fail_lookup_undefined.carbon

@@ -75,8 +75,8 @@ interface BeingDefined {
 // CHECK:STDOUT:
 // CHECK:STDOUT: !members:
 // CHECK:STDOUT:   .H = %.loc37
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = (%H)}
+// CHECK:STDOUT:   witness = (%H)
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @.1();
 // CHECK:STDOUT:

+ 2 - 2
toolchain/check/testdata/interface/fail_member_lookup.carbon

@@ -36,8 +36,8 @@ fn F() {
 // CHECK:STDOUT:
 // CHECK:STDOUT: !members:
 // CHECK:STDOUT:   .F = %.loc7
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = (%F)}
+// CHECK:STDOUT:   witness = (%F)
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @F.1();
 // CHECK:STDOUT:

+ 4 - 6
toolchain/check/testdata/interface/fail_modifiers.carbon

@@ -49,18 +49,16 @@ protected interface Protected;
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: interface @Abstract {
-// CHECK:STDOUT:
 // CHECK:STDOUT: !members:
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = ()}
+// CHECK:STDOUT:   witness = ()
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: interface @Default;
 // CHECK:STDOUT:
 // CHECK:STDOUT: interface @Virtual {
-// CHECK:STDOUT:
 // CHECK:STDOUT: !members:
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = ()}
+// CHECK:STDOUT:   witness = ()
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: interface @Protected;
 // CHECK:STDOUT:

+ 2 - 2
toolchain/check/testdata/interface/fail_redeclare_member.carbon

@@ -37,8 +37,8 @@ interface Interface {
 // CHECK:STDOUT:
 // CHECK:STDOUT: !members:
 // CHECK:STDOUT:   .F = %.loc8
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = (%F)}
+// CHECK:STDOUT:   witness = (%F)
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @F();
 // CHECK:STDOUT:

+ 2 - 2
toolchain/check/testdata/interface/fail_todo_define_out_of_line.carbon

@@ -41,8 +41,8 @@ fn Interface.F() {}
 // CHECK:STDOUT:
 // CHECK:STDOUT: !members:
 // CHECK:STDOUT:   .F = %.loc11
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = (%F)}
+// CHECK:STDOUT:   witness = (%F)
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @F();
 // CHECK:STDOUT:

+ 2 - 2
toolchain/check/testdata/interface/fail_todo_facet_lookup.carbon

@@ -41,8 +41,8 @@ fn CallStatic(T:! Interface) {
 // CHECK:STDOUT:
 // CHECK:STDOUT: !members:
 // CHECK:STDOUT:   .F = %.loc7
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = (%F)}
+// CHECK:STDOUT:   witness = (%F)
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @F();
 // CHECK:STDOUT:

+ 4 - 5
toolchain/check/testdata/interface/fail_todo_modifiers.carbon

@@ -49,14 +49,13 @@ private interface Private {
 // CHECK:STDOUT: !members:
 // CHECK:STDOUT:   .Final = %.loc11
 // CHECK:STDOUT:   .Default = %.loc15
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = (%Final, %Default)}
+// CHECK:STDOUT:   witness = (%Final, %Default)
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: interface @Private {
-// CHECK:STDOUT:
 // CHECK:STDOUT: !members:
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = ()}
+// CHECK:STDOUT:   witness = ()
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @Final() {
 // CHECK:STDOUT: !entry:

+ 8 - 10
toolchain/check/testdata/interface/import.carbon

@@ -58,10 +58,9 @@ var f: ForwardDeclared* = &f_ref.f;
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: interface @Empty {
-// CHECK:STDOUT:
 // CHECK:STDOUT: !members:
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = ()}
+// CHECK:STDOUT:   witness = ()
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: interface @ForwardDeclared {
 // CHECK:STDOUT:   %F: <function> = fn_decl @F {} [template]
@@ -69,8 +68,8 @@ var f: ForwardDeclared* = &f_ref.f;
 // CHECK:STDOUT:
 // CHECK:STDOUT: !members:
 // CHECK:STDOUT:   .F = %.loc10
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = (%F)}
+// CHECK:STDOUT:   witness = (%F)
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @F();
 // CHECK:STDOUT:
@@ -116,10 +115,9 @@ var f: ForwardDeclared* = &f_ref.f;
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: interface @Empty {
-// CHECK:STDOUT:
 // CHECK:STDOUT: !members:
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = ()}
+// CHECK:STDOUT:   witness = ()
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: interface @ForwardDeclared {
 // CHECK:STDOUT:   %import_ref.1 = import_ref ir1, inst+8, unused
@@ -127,8 +125,8 @@ var f: ForwardDeclared* = &f_ref.f;
 // CHECK:STDOUT:
 // CHECK:STDOUT: !members:
 // CHECK:STDOUT:   .F = %import_ref.1
-// CHECK:STDOUT:
-// CHECK:STDOUT:   witness = (%import_ref.2)}
+// CHECK:STDOUT:   witness = (%import_ref.2)
+// CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @UseEmpty(%e: Empty) {
 // CHECK:STDOUT: !entry:

+ 1 - 2
toolchain/check/testdata/let/fail_generic_import.carbon

@@ -23,8 +23,7 @@ let a: T = 0;
 // CHECK:STDOUT: --- implicit.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT:   %T: type = bind_symbolic_name T, i32 [symbolic]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 1 - 2
toolchain/check/testdata/let/fail_modifiers.carbon

@@ -75,8 +75,7 @@ protected protected let i: i32 = 1;
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT:   %.loc10: i32 = int_literal 1 [template = constants.%.1]
 // CHECK:STDOUT:   %b: i32 = bind_name b, %.loc10
 // CHECK:STDOUT:   %.loc15: i32 = int_literal 1 [template = constants.%.1]

+ 1 - 2
toolchain/check/testdata/let/fail_todo_modifiers.carbon

@@ -16,8 +16,7 @@ private let a: i32 = 1;
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT:   %.loc10: i32 = int_literal 1 [template = constants.%.1]
 // CHECK:STDOUT:   %a: i32 = bind_name a, %.loc10
 // CHECK:STDOUT: }

+ 1 - 2
toolchain/check/testdata/let/generic_import.carbon

@@ -20,8 +20,7 @@ var b: T = *a;
 // CHECK:STDOUT: --- implicit.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT:   %T: type = bind_symbolic_name T, i32 [symbolic]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 1 - 2
toolchain/check/testdata/let/import.carbon

@@ -23,8 +23,7 @@ let b:! bool = a;
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT:   %.loc4: bool = bool_literal true [template = constants.%.1]
 // CHECK:STDOUT:   %a: bool = bind_symbolic_name a, %.loc4 [symbolic]
 // CHECK:STDOUT: }

+ 1 - 2
toolchain/check/testdata/namespace/add_to_import.carbon

@@ -24,8 +24,7 @@ var a: i32 = NS.A();
 // CHECK:STDOUT:   package: <namespace> = namespace {
 // CHECK:STDOUT:     .NS = %.loc4
 // CHECK:STDOUT:   } [template]
-// CHECK:STDOUT:   %.loc4: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   %.loc4: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- implicit.impl.carbon

+ 4 - 8
toolchain/check/testdata/namespace/fail_conflict_after_merge.carbon

@@ -46,8 +46,7 @@ fn NS();
 // CHECK:STDOUT:   package: <namespace> = namespace {
 // CHECK:STDOUT:     .NS = %.loc4
 // CHECK:STDOUT:   } [template]
-// CHECK:STDOUT:   %.loc4: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   %.loc4: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- conflict.carbon
@@ -57,13 +56,10 @@ fn NS();
 // CHECK:STDOUT:     .NS = %.loc8_13.1
 // CHECK:STDOUT:   } [template]
 // CHECK:STDOUT:   %import_ref: <namespace> = import_ref ir1, inst+1, used
-// CHECK:STDOUT:   %.loc8_13.1: <namespace> = namespace %import_ref, {
-// CHECK:STDOUT:   } [template]
-// CHECK:STDOUT:   %.loc8_13.2: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   %.loc8_13.1: <namespace> = namespace %import_ref, {} [template]
+// CHECK:STDOUT:   %.loc8_13.2: <namespace> = namespace {} [template]
 // CHECK:STDOUT:   %.loc16: <function> = fn_decl @.1 {} [template]
-// CHECK:STDOUT:   %.loc20: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   %.loc20: <namespace> = namespace {} [template]
 // CHECK:STDOUT:   %.loc28: <function> = fn_decl @.2 {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 1 - 2
toolchain/check/testdata/namespace/fail_conflict_imported_namespace_first.carbon

@@ -32,8 +32,7 @@ fn NS.Foo();
 // CHECK:STDOUT:   package: <namespace> = namespace {
 // CHECK:STDOUT:     .NS = %.loc4
 // CHECK:STDOUT:   } [template]
-// CHECK:STDOUT:   %.loc4: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   %.loc4: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- conflict.carbon

+ 1 - 2
toolchain/check/testdata/namespace/fail_conflict_imported_namespace_second.carbon

@@ -50,8 +50,7 @@ fn NS.Foo();
 // CHECK:STDOUT:     .NS = %import_ref
 // CHECK:STDOUT:   } [template]
 // CHECK:STDOUT:   %import_ref: <function> = import_ref ir1, inst+1, used [template = imports.%NS]
-// CHECK:STDOUT:   %.loc12: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   %.loc12: <namespace> = namespace {} [template]
 // CHECK:STDOUT:   %.loc20: <function> = fn_decl @.1 {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 1 - 2
toolchain/check/testdata/namespace/fail_decl_in_alias.carbon

@@ -28,8 +28,7 @@ fn ns.A() -> i32 { return 0; }
 // CHECK:STDOUT:     .NS = %.loc7
 // CHECK:STDOUT:     .ns = %ns
 // CHECK:STDOUT:   } [template]
-// CHECK:STDOUT:   %.loc7: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   %.loc7: <namespace> = namespace {} [template]
 // CHECK:STDOUT:   %NS.ref: <namespace> = name_ref NS, %.loc7 [template = %.loc7]
 // CHECK:STDOUT:   %ns: <namespace> = bind_alias ns, %.loc7 [template = %.loc7]
 // CHECK:STDOUT:   %.loc18: <function> = fn_decl @.1 {

+ 2 - 4
toolchain/check/testdata/namespace/fail_modifiers.carbon

@@ -42,9 +42,7 @@ impl namespace Bar;
 // CHECK:STDOUT:     .Foo = %.loc31
 // CHECK:STDOUT:     .Bar = %.loc36
 // CHECK:STDOUT:   } [template]
-// CHECK:STDOUT:   %.loc31: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
-// CHECK:STDOUT:   %.loc36: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   %.loc31: <namespace> = namespace {} [template]
+// CHECK:STDOUT:   %.loc36: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 1 - 2
toolchain/check/testdata/namespace/fail_unresolved_scope.carbon

@@ -13,8 +13,7 @@ fn Foo.Baz() {
 // CHECK:STDOUT: --- fail_unresolved_scope.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT:   %.loc10: <function> = fn_decl @.1 {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 3 - 6
toolchain/check/testdata/namespace/imported_indirect.carbon

@@ -44,8 +44,7 @@ var e: () = A.B.C.D();
 // CHECK:STDOUT:   package: <namespace> = namespace {
 // CHECK:STDOUT:     .A = %.loc4
 // CHECK:STDOUT:   } [template]
-// CHECK:STDOUT:   %.loc4: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   %.loc4: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- b.carbon
@@ -58,8 +57,7 @@ var e: () = A.B.C.D();
 // CHECK:STDOUT:   %.2: <namespace> = namespace %import_ref, {
 // CHECK:STDOUT:     .B = %.loc5
 // CHECK:STDOUT:   } [template]
-// CHECK:STDOUT:   %.loc5: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   %.loc5: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- c.carbon
@@ -76,8 +74,7 @@ var e: () = A.B.C.D();
 // CHECK:STDOUT:   %.3: <namespace> = namespace %import_ref.2, {
 // CHECK:STDOUT:     .C = %.loc5
 // CHECK:STDOUT:   } [template]
-// CHECK:STDOUT:   %.loc5: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   %.loc5: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- d.carbon

+ 2 - 4
toolchain/check/testdata/namespace/merging.carbon

@@ -70,8 +70,7 @@ fn Run() {
 // CHECK:STDOUT:     .B2 = %B2
 // CHECK:STDOUT:   } [template]
 // CHECK:STDOUT:   %B1: <function> = fn_decl @B1 {} [template]
-// CHECK:STDOUT:   %.loc8: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   %.loc8: <namespace> = namespace {} [template]
 // CHECK:STDOUT:   %B2: <function> = fn_decl @B2 {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
@@ -106,8 +105,7 @@ fn Run() {
 // CHECK:STDOUT:   %import_ref.2: <function> = import_ref ir1, inst+2, used [template = imports.%A]
 // CHECK:STDOUT:   %import_ref.3: <function> = import_ref ir2, inst+2, used [template = imports.%B1]
 // CHECK:STDOUT:   %import_ref.4: <function> = import_ref ir2, inst+5, used [template = imports.%B2]
-// CHECK:STDOUT:   %.loc7_13.2: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   %.loc7_13.2: <namespace> = namespace {} [template]
 // CHECK:STDOUT:   %C: <function> = fn_decl @C {} [template]
 // CHECK:STDOUT:   %Run: <function> = fn_decl @Run {} [template]
 // CHECK:STDOUT: }

+ 1 - 2
toolchain/check/testdata/operators/fail_type_mismatch_once.carbon

@@ -20,8 +20,7 @@ fn Main() -> i32 {
 // CHECK:STDOUT:   %.2: f64 = real_literal 34e-1 [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: file {
-// CHECK:STDOUT: }
+// CHECK:STDOUT: file {}
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @Main() -> i32 {
 // CHECK:STDOUT: !entry:

+ 1 - 2
toolchain/check/testdata/operators/fail_unimplemented_op.carbon

@@ -18,8 +18,7 @@ fn Main() -> i32 {
 // CHECK:STDOUT:   %.2: i32 = int_literal 34 [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: file {
-// CHECK:STDOUT: }
+// CHECK:STDOUT: file {}
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @Main() -> i32 {
 // CHECK:STDOUT: !entry:

+ 6 - 12
toolchain/check/testdata/packages/explicit_imports.carbon

@@ -37,29 +37,25 @@ import library "lib";
 // CHECK:STDOUT: --- api.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- api_lib.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- same_package.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- different_package.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT:   %import: <namespace> = import ir1, ir2
 // CHECK:STDOUT:   %Api: <namespace> = bind_name Api, %import
 // CHECK:STDOUT: }
@@ -67,14 +63,12 @@ import library "lib";
 // CHECK:STDOUT: --- main_lib_api.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- main_import.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 4 - 8
toolchain/check/testdata/packages/fail_cycle.carbon

@@ -50,8 +50,7 @@ import B;
 // CHECK:STDOUT: --- a.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT:   %import: <namespace> = import ir1, ir1
 // CHECK:STDOUT:   %B: <namespace> = bind_name B, %import
 // CHECK:STDOUT: }
@@ -59,8 +58,7 @@ import B;
 // CHECK:STDOUT: --- b.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT:   %import: <namespace> = import ir1, ir1
 // CHECK:STDOUT:   %C: <namespace> = bind_name C, %import
 // CHECK:STDOUT: }
@@ -68,8 +66,7 @@ import B;
 // CHECK:STDOUT: --- c.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT:   %import: <namespace> = import ir1, ir1
 // CHECK:STDOUT:   %A: <namespace> = bind_name A, %import
 // CHECK:STDOUT: }
@@ -85,8 +82,7 @@ import B;
 // CHECK:STDOUT: --- cycle_child.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT:   %import: <namespace> = import ir1, ir1
 // CHECK:STDOUT:   %B: <namespace> = bind_name B, %import
 // CHECK:STDOUT: }

+ 8 - 16
toolchain/check/testdata/packages/fail_duplicate_api.carbon

@@ -45,56 +45,48 @@ package Package library "lib" api;
 // CHECK:STDOUT: --- main1.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- main2.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- main_lib1.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- main_lib2.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- package1.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- package2.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- package_lib1.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- package_lib2.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 10 - 20
toolchain/check/testdata/packages/fail_extension.carbon

@@ -73,70 +73,60 @@ package SwappedExt impl;
 // CHECK:STDOUT: --- main.incorrect
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- main_redundant_with_swapped_ext.impl.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- main_lib.incorrect
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- main_lib_impl.incorrect
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- package.incorrect
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- package_impl.incorrect
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- package_lib.incorrect
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- package_lib_impl.incorrect
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- swapped_ext.impl.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- swapped_ext.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 4 - 8
toolchain/check/testdata/packages/fail_import_default.carbon

@@ -41,28 +41,24 @@ import library default;
 // CHECK:STDOUT: --- default_api.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- default.impl.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- main_import_default.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- main_lib_import_default.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 9 - 18
toolchain/check/testdata/packages/fail_import_invalid.carbon

@@ -85,64 +85,55 @@ import ImportNotFound;
 // CHECK:STDOUT: --- main.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- not_main.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- this.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- this_lib.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- implicit_api.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- implicit.impl.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- implicit_lib_api.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- implicit_lib.impl.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- not_found.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT:   %import: <namespace> = import ir1, ir1
 // CHECK:STDOUT:   %ImportNotFound: <namespace> = bind_name ImportNotFound, %import
 // CHECK:STDOUT: }

+ 5 - 10
toolchain/check/testdata/packages/fail_import_repeat.carbon

@@ -61,29 +61,25 @@ import library default;
 // CHECK:STDOUT: --- api.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- api_lib.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- main_lib.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- import.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT:   %import: <namespace> = import ir2, ir3
 // CHECK:STDOUT:   %Api: <namespace> = bind_name Api, %import
 // CHECK:STDOUT: }
@@ -91,7 +87,6 @@ import library default;
 // CHECK:STDOUT: --- default_import.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 4 - 8
toolchain/check/testdata/packages/fail_package_main.carbon

@@ -36,28 +36,24 @@ package Main library "lib" api;
 // CHECK:STDOUT: --- main.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- main_impl.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- raw_main.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- main_lib.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 10 - 20
toolchain/check/testdata/packages/implicit_imports.carbon

@@ -46,70 +46,60 @@ library "lib" impl;
 // CHECK:STDOUT: --- api_only.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- api_only_lib.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- with_impl.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- with_impl.impl.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- with_impl_extra.impl.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- with_impl_lib.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- with_impl_lib.impl.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- main.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- main_lib.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: --- main_lib.impl.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 1 - 2
toolchain/check/testdata/pointer/fail_deref_error.carbon

@@ -12,8 +12,7 @@ let n: i32 = *undeclared;
 // CHECK:STDOUT: --- fail_deref_error.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT:   %undeclared.ref: <error> = name_ref undeclared, <error> [template = <error>]
 // CHECK:STDOUT:   %.loc10: ref <error> = deref <error>
 // CHECK:STDOUT:   %n: i32 = bind_name n, <error>

+ 1 - 2
toolchain/check/testdata/pointer/fail_deref_namespace.carbon

@@ -20,8 +20,7 @@ fn F() {
 // CHECK:STDOUT:     .A = %.loc7
 // CHECK:STDOUT:     .F = %F
 // CHECK:STDOUT:   } [template]
-// CHECK:STDOUT:   %.loc7: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   %.loc7: <namespace> = namespace {} [template]
 // CHECK:STDOUT:   %F: <function> = fn_decl @F {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 1 - 2
toolchain/check/testdata/return/fail_let_in_type.carbon

@@ -30,8 +30,7 @@ fn FirstPerfectNumber() -> z { return 6; }
 // CHECK:STDOUT:   %.1: i32 = int_literal 6 [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: file {
-// CHECK:STDOUT: }
+// CHECK:STDOUT: file {}
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @Six() -> <error> {
 // CHECK:STDOUT: !entry:

+ 1 - 2
toolchain/check/testdata/struct/fail_keyword_name.carbon

@@ -19,6 +19,5 @@ fn G() { return {.return = 5}; };
 
 // CHECK:STDOUT: --- fail_keyword_name.carbon
 // CHECK:STDOUT:
-// CHECK:STDOUT: file {
-// CHECK:STDOUT: }
+// CHECK:STDOUT: file {}
 // CHECK:STDOUT:

+ 1 - 2
toolchain/check/testdata/var/fail_namespace_conflict.carbon

@@ -32,8 +32,7 @@ var A: i32 = 1;
 // CHECK:STDOUT:   package: <namespace> = namespace {
 // CHECK:STDOUT:     .A = %.loc7
 // CHECK:STDOUT:   } [template]
-// CHECK:STDOUT:   %.loc7: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   %.loc7: <namespace> = namespace {} [template]
 // CHECK:STDOUT:   %A.var.loc15: ref i32 = var A
 // CHECK:STDOUT:   %A.loc15: ref i32 = bind_name A, %A.var.loc15
 // CHECK:STDOUT:   %A.var.loc23: ref i32 = var A

+ 1 - 4
toolchain/check/testdata/var/fail_not_copyable.carbon

@@ -46,10 +46,7 @@ fn F(x: X) {
 // CHECK:STDOUT:   } [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: class @X {
-// CHECK:STDOUT:
-// CHECK:STDOUT: !members:
-// CHECK:STDOUT: }
+// CHECK:STDOUT: class @X {}
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @F(%x: X) {
 // CHECK:STDOUT: !entry:

+ 1 - 2
toolchain/check/testdata/var/shadowing.carbon

@@ -32,8 +32,7 @@ fn Main() {
 // CHECK:STDOUT:     .NS = %.loc7
 // CHECK:STDOUT:     .Main = %Main
 // CHECK:STDOUT:   } [template]
-// CHECK:STDOUT:   %.loc7: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   %.loc7: <namespace> = namespace {} [template]
 // CHECK:STDOUT:   %Main: <function> = fn_decl @Main {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 1 - 2
toolchain/driver/testdata/stdin.carbon

@@ -9,7 +9,6 @@
 // CHECK:STDOUT: --- <stdin>
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
-// CHECK:STDOUT:   package: <namespace> = namespace {
-// CHECK:STDOUT:   } [template]
+// CHECK:STDOUT:   package: <namespace> = namespace {} [template]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 98 - 38
toolchain/sem_ir/formatter.cpp

@@ -583,7 +583,9 @@ class Formatter {
 
     FormatConstants();
 
-    out_ << "file {\n";
+    out_ << "file ";
+    OpenBrace();
+
     // TODO: Handle the case where there are multiple top-level instruction
     // blocks. For example, there may be branching in the initializer of a
     // global or a type expression.
@@ -591,7 +593,9 @@ class Formatter {
       llvm::SaveAndRestore file_scope(scope_, InstNamer::ScopeId::File);
       FormatCodeBlock(block_id);
     }
-    out_ << "}\n";
+
+    CloseBrace();
+    out_ << '\n';
 
     for (int i : llvm::seq(sem_ir_.interfaces().size())) {
       FormatInterface(InterfaceId(i));
@@ -613,15 +617,56 @@ class Formatter {
     out_ << "\n";
   }
 
+  // Begins a braced block. Writes an open brace, and prepares to insert a
+  // newline after it if the braced block is non-empty.
+  auto OpenBrace() -> void {
+    out_ << '{';
+    indent_ += 2;
+    after_open_brace_ = true;
+  }
+
+  // Ends a braced block by writing a close brace.
+  auto CloseBrace() -> void {
+    indent_ -= 2;
+    if (!after_open_brace_) {
+      Indent();
+    }
+    out_ << '}';
+    after_open_brace_ = false;
+  }
+
+  // Adds beginning-of-line indentation. If we're at the start of a braced
+  // block, first starts a new line.
+  auto Indent(int offset = 0) -> void {
+    if (after_open_brace_) {
+      out_ << '\n';
+      after_open_brace_ = false;
+    }
+    out_.indent(indent_ + offset);
+  }
+
+  // Adds beginning-of-label indentation. This is one level less than normal
+  // indentation. Labels also get a preceding blank line unless they're at the
+  // start of a block.
+  auto IndentLabel() -> void {
+    CARBON_CHECK(indent_ >= 2);
+    if (!after_open_brace_) {
+      out_ << '\n';
+    }
+    Indent(-2);
+  }
+
   auto FormatConstants() -> void {
     if (!sem_ir_.constants().size()) {
       return;
     }
 
     llvm::SaveAndRestore constants_scope(scope_, InstNamer::ScopeId::Constants);
-    out_ << "constants {\n";
+    out_ << "constants ";
+    OpenBrace();
     FormatCodeBlock(sem_ir_.constants().GetAsVector());
-    out_ << "}\n\n";
+    CloseBrace();
+    out_ << "\n\n";
   }
 
   auto FormatClass(ClassId id) -> void {
@@ -633,11 +678,12 @@ class Formatter {
     llvm::SaveAndRestore class_scope(scope_, inst_namer_.GetScopeFor(id));
 
     if (class_info.scope_id.is_valid()) {
-      out_ << " {\n";
+      out_ << ' ';
+      OpenBrace();
       FormatCodeBlock(class_info.body_block_id);
-      out_ << "\n!members:\n";
-      FormatNameScope(class_info.scope_id);
-      out_ << "}\n";
+      FormatNameScope(class_info.scope_id, "!members:\n");
+      CloseBrace();
+      out_ << '\n';
     } else {
       out_ << ";\n";
     }
@@ -652,13 +698,23 @@ class Formatter {
     llvm::SaveAndRestore interface_scope(scope_, inst_namer_.GetScopeFor(id));
 
     if (interface_info.scope_id.is_valid()) {
-      out_ << " {\n";
+      out_ << ' ';
+      OpenBrace();
       FormatCodeBlock(interface_info.body_block_id);
-      out_ << "\n!members:\n";
+
+      // Always include the !members label because we always list the witness in
+      // this section.
+      IndentLabel();
+      out_ << "!members:\n";
       FormatNameScope(interface_info.scope_id);
-      out_ << "\n  witness = ";
+
+      Indent();
+      out_ << "witness = ";
       FormatArg(interface_info.associated_entities_id);
-      out_ << "}\n";
+      out_ << "\n";
+
+      CloseBrace();
+      out_ << '\n';
     } else {
       out_ << ";\n";
     }
@@ -678,11 +734,12 @@ class Formatter {
     llvm::SaveAndRestore impl_scope(scope_, inst_namer_.GetScopeFor(id));
 
     if (impl_info.scope_id.is_valid()) {
-      out_ << " {\n";
+      out_ << ' ';
+      OpenBrace();
       FormatCodeBlock(impl_info.body_block_id);
-      out_ << "\n!members:\n";
-      FormatNameScope(impl_info.scope_id);
-      out_ << "}\n";
+      FormatNameScope(impl_info.scope_id, "!members:\n");
+      CloseBrace();
+      out_ << '\n';
     } else {
       out_ << ";\n";
     }
@@ -716,18 +773,19 @@ class Formatter {
     }
 
     if (!fn.body_block_ids.empty()) {
-      out_ << " {";
+      out_ << ' ';
+      OpenBrace();
 
       for (auto block_id : fn.body_block_ids) {
-        out_ << "\n";
-
+        IndentLabel();
         FormatLabel(block_id);
         out_ << ":\n";
 
         FormatCodeBlock(block_id);
       }
 
-      out_ << "}\n";
+      CloseBrace();
+      out_ << '\n';
     } else {
       out_ << ";\n";
     }
@@ -764,20 +822,26 @@ class Formatter {
   }
 
   auto FormatTrailingBlock(InstBlockId block_id) -> void {
-    out_ << " {";
-    if (!sem_ir_.inst_blocks().Get(block_id).empty()) {
-      out_ << "\n";
-      indent_ += 2;
-      FormatCodeBlock(block_id);
-      indent_ -= 2;
-      Indent();
-    }
-    out_ << "}";
+    out_ << ' ';
+    OpenBrace();
+    FormatCodeBlock(block_id);
+    CloseBrace();
   }
 
-  auto FormatNameScope(NameScopeId id) -> void {
+  auto FormatNameScope(NameScopeId id, llvm::StringRef label = "") -> void {
     const auto& scope = sem_ir_.name_scopes().Get(id);
 
+    if (scope.names.empty() && scope.extended_scopes.empty() &&
+        !scope.has_error) {
+      // Name scope is empty.
+      return;
+    }
+
+    if (!label.empty()) {
+      IndentLabel();
+      out_ << label;
+    }
+
     // Name scopes aren't kept in any particular order. Sort the entries before
     // we print them for stability and consistency.
     llvm::SmallVector<std::pair<InstId, NameId>> entries;
@@ -828,8 +892,6 @@ class Formatter {
     }
   }
 
-  auto Indent() -> void { out_.indent(indent_); }
-
   template <typename InstT>
   auto FormatInstruction(InstId inst_id, InstT inst) -> void {
     Indent();
@@ -1108,12 +1170,9 @@ class Formatter {
   auto FormatArg(ElementIndex index) -> void { out_ << index; }
 
   auto FormatArg(NameScopeId id) -> void {
-    out_ << "{\n";
-    indent_ += 2;
+    OpenBrace();
     FormatNameScope(id);
-    indent_ -= 2;
-    Indent();
-    out_ << '}';
+    CloseBrace();
   }
 
   auto FormatArg(InstId id) -> void { FormatInstName(id); }
@@ -1201,7 +1260,8 @@ class Formatter {
   InstNamer inst_namer_;
   InstNamer::ScopeId scope_ = InstNamer::ScopeId::None;
   bool in_terminator_sequence_ = false;
-  int indent_ = 2;
+  int indent_ = 0;
+  bool after_open_brace_ = false;
 };
 
 auto FormatFile(const Lex::TokenizedBuffer& tokenized_buffer,