Lower CppOverloadSetValue (#6101)

Following up on comments from
[#5891](https://github.com/carbon-language/carbon-lang/pull/5891) ([
1](https://github.com/carbon-language/carbon-lang/pull/5891#discussion_r2317244981),
[2](https://github.com/carbon-language/carbon-lang/pull/5891#discussion_r2317266756)).

Lowering `CppOverloadSetValue` as an empty struct value, using
`context.GetLiteralAsValue()`. Also changed its constant kind to
`InstConstantKind::Always`.

Part of https://github.com/carbon-language/carbon-lang/issues/5915
This commit is contained in:
Ivana Ivanovska
2025-10-01 16:25:05 +00:00
committed by GitHub
parent 4a6376cf59
commit a24598f069
40 changed files with 838 additions and 698 deletions
+6 -6
View File
@@ -319,7 +319,7 @@ fn MyF(bar: Cpp.Bar*);
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %Bar: type = class_type @Bar [concrete]
// CHECK:STDOUT: %.c07: type = cpp_overload_set_type @Bar.foo [concrete]
// CHECK:STDOUT: %empty_struct: %.c07 = struct_value () [concrete]
// CHECK:STDOUT: %.617: %.c07 = cpp_overload_set_value @Bar.foo [concrete]
// CHECK:STDOUT: %Bar.foo.type: type = fn_type @Bar.foo [concrete]
// CHECK:STDOUT: %Bar.foo: %Bar.foo.type = struct_value () [concrete]
// CHECK:STDOUT: }
@@ -330,7 +330,7 @@ fn MyF(bar: Cpp.Bar*);
// CHECK:STDOUT: import Cpp//...
// CHECK:STDOUT: }
// CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {}
// CHECK:STDOUT: %.617: %.c07 = cpp_overload_set_value @Bar.foo [concrete = constants.%empty_struct]
// CHECK:STDOUT: %.617: %.c07 = cpp_overload_set_value @Bar.foo [concrete = constants.%.617]
// CHECK:STDOUT: %Bar.foo.decl: %Bar.foo.type = fn_decl @Bar.foo [concrete = constants.%Bar.foo] {} {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -338,7 +338,7 @@ fn MyF(bar: Cpp.Bar*);
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %Cpp.ref: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
// CHECK:STDOUT: %Bar.ref: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar]
// CHECK:STDOUT: %foo.ref: %.c07 = name_ref foo, imports.%.617 [concrete = constants.%empty_struct]
// CHECK:STDOUT: %foo.ref: %.c07 = name_ref foo, imports.%.617 [concrete = constants.%.617]
// CHECK:STDOUT: %Bar.foo.call: init %empty_tuple.type = call imports.%Bar.foo.decl()
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: }
@@ -476,7 +476,7 @@ fn MyF(bar: Cpp.Bar*);
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete]
// CHECK:STDOUT: %.2e2: type = cpp_overload_set_type @Bar.f [concrete]
// CHECK:STDOUT: %empty_struct: %.2e2 = struct_value () [concrete]
// CHECK:STDOUT: %.6e0: %.2e2 = cpp_overload_set_value @Bar.f [concrete]
// CHECK:STDOUT: %Bar.f.type: type = fn_type @Bar.f [concrete]
// CHECK:STDOUT: %Bar.f: %Bar.f.type = struct_value () [concrete]
// CHECK:STDOUT: }
@@ -487,7 +487,7 @@ fn MyF(bar: Cpp.Bar*);
// CHECK:STDOUT: import Cpp//...
// CHECK:STDOUT: }
// CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {}
// CHECK:STDOUT: %.6e0: %.2e2 = cpp_overload_set_value @Bar.f [concrete = constants.%empty_struct]
// CHECK:STDOUT: %.6e0: %.2e2 = cpp_overload_set_value @Bar.f [concrete = constants.%.6e0]
// CHECK:STDOUT: %Bar.f.decl: %Bar.f.type = fn_decl @Bar.f [concrete = constants.%Bar.f] {
// CHECK:STDOUT: <elided>
// CHECK:STDOUT: } {
@@ -514,7 +514,7 @@ fn MyF(bar: Cpp.Bar*);
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %bar.ref: %ptr.f68 = name_ref bar, %bar
// CHECK:STDOUT: %.loc8: ref %Bar = deref %bar.ref
// CHECK:STDOUT: %f.ref: %.2e2 = name_ref f, imports.%.6e0 [concrete = constants.%empty_struct]
// CHECK:STDOUT: %f.ref: %.2e2 = name_ref f, imports.%.6e0 [concrete = constants.%.6e0]
// CHECK:STDOUT: %bound_method: <bound method> = bound_method %.loc8, %f.ref
// CHECK:STDOUT: %addr: %ptr.f68 = addr_of %.loc8
// CHECK:STDOUT: %Bar.f.call: init %empty_tuple.type = call imports.%Bar.f.decl(%addr)