mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 22:02:55 +01:00
Implement checking observe declarations (#6709)
This adds SemIR structs and implements building `observe` lists, as well as naming, formatting, and importing `observe` declarations. --------- Co-authored-by: Dana Jansens <danakj@orodu.net>
This commit is contained in:
co-authored by
Dana Jansens
parent
918bb9364f
commit
08385adeb5
@@ -151,5 +151,7 @@ var a2: Cpp.Second(Cpp.B, Cpp.A) = Cpp.A.A();
|
||||
// CHECK:STDOUT: %.loc10_44: init %A to %.loc10_1 = mark_in_place_init %A__carbon_thunk.call.loc10
|
||||
// CHECK:STDOUT: assign file.%a2.var, %.loc10_44
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !observes:
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
@@ -163,6 +163,8 @@ var too_many: Cpp.FixedSizePack(Cpp.A, Cpp.A).Inner(Cpp.B, Cpp.B, Cpp.B);
|
||||
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call: init %TwoTypes to %.loc7_1 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn()
|
||||
// CHECK:STDOUT: assign file.%x.var, %T.as_type.as.DefaultOrUnformed.impl.Op.call
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !observes:
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: --- pack.carbon
|
||||
@@ -282,5 +284,7 @@ var too_many: Cpp.FixedSizePack(Cpp.A, Cpp.A).Inner(Cpp.B, Cpp.B, Cpp.B);
|
||||
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc10: init %TypePack.186 to %.loc10_1 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn.4()
|
||||
// CHECK:STDOUT: assign file.%a3.var, %T.as_type.as.DefaultOrUnformed.impl.Op.call.loc10
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !observes:
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
@@ -109,5 +109,7 @@ var a: Cpp.A = Cpp.X(Cpp.A, Cpp.B).f({} as Cpp.B);
|
||||
// CHECK:STDOUT: %.loc7_49: init %A to %.loc7_1 = mark_in_place_init %f__carbon_thunk.call
|
||||
// CHECK:STDOUT: assign file.%a.var, %.loc7_49
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !observes:
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
@@ -126,5 +126,7 @@ var x2: X(Cpp.IsLarge(Cpp.Large)) = X(true).Make();
|
||||
// CHECK:STDOUT: %X.Make.call.loc12: init %X.7b4 to %.loc12_1 = call %X.Make.specific_fn.loc12()
|
||||
// CHECK:STDOUT: assign file.%x2.var, %X.Make.call.loc12
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !observes:
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
@@ -206,6 +206,8 @@ fn G() -> i32 {
|
||||
// CHECK:STDOUT: %.loc7_1: init %TwoNonType = converted %.loc7_32.1, %.loc7_32.2 [concrete = constants.%TwoNonType.val]
|
||||
// CHECK:STDOUT: assign file.%x.var, %.loc7_1
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !observes:
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: --- dependent.carbon
|
||||
@@ -285,5 +287,7 @@ fn G() -> i32 {
|
||||
// CHECK:STDOUT: %.loc8_1: init %DependentNonType.d43 = converted %.loc8_54.1, %.loc8_54.2 [concrete = constants.%DependentNonType.val]
|
||||
// CHECK:STDOUT: assign file.%y.var, %.loc8_1
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !observes:
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
@@ -125,6 +125,8 @@ var x: Cpp.TwoTemplates(Cpp.A, true);
|
||||
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call: init %TwoTemplates to %.loc7_1 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn()
|
||||
// CHECK:STDOUT: assign file.%x.var, %T.as_type.as.DefaultOrUnformed.impl.Op.call
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !observes:
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: --- fail_template_mismatch.carbon
|
||||
@@ -142,5 +144,7 @@ var x: Cpp.TwoTemplates(Cpp.A, true);
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: assign file.%x.var, <error>
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !observes:
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
@@ -109,6 +109,8 @@ var x: Cpp.TwoTypes(Cpp.A, {});
|
||||
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call: init %TwoTypes to %.loc7_1 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn()
|
||||
// CHECK:STDOUT: assign file.%x.var, %T.as_type.as.DefaultOrUnformed.impl.Op.call
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !observes:
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: --- char.carbon
|
||||
@@ -156,5 +158,7 @@ var x: Cpp.TwoTypes(Cpp.A, {});
|
||||
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call: init %TwoTypes to %.loc7_1 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn()
|
||||
// CHECK:STDOUT: assign file.%x.var, %T.as_type.as.DefaultOrUnformed.impl.Op.call
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !observes:
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
@@ -159,5 +159,7 @@ let pwb: Cpp.B* = &Cpp.Wrap.r#var(Cpp.B);
|
||||
// CHECK:STDOUT: %B.ref.loc10: type = name_ref B, imports.%B.decl [concrete = constants.%B]
|
||||
// CHECK:STDOUT: %addr.loc10: %ptr.dc0 = addr_of imports.%var.var.302 [concrete = constants.%addr.cd4]
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !observes:
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
Reference in New Issue
Block a user