mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 10:11:04 +01:00
Allow impl redecl in match_first after a definition (#7491)
Previously the last decl had to be the definition. Now we allow a declaration after a definition, so that the user can write a match_first block last, and put (re-)declarations of impls in it, after the definitions have already been written elsewhere. We track the location of the decl that was associated with a match_first block so that we can correctly point to it in diagnostics when an impl is written twice in match_first blocks. Since impls may not be redeclared across an import boundary, we will never have a `SemIR::Impl` with a match_first from a different file in a redeclaration, so we don't need to import the location of a previous decl that was in a match_first for diagnostics. As such we just store a LocId on the `SemIR::Impl` struct.
This commit is contained in:
@@ -2760,6 +2760,7 @@ static auto ImportImplDecl(ImportContext& context,
|
||||
{.parent_scope_inst_id = SemIR::InstId::None,
|
||||
.is_final = import_impl.is_final,
|
||||
.match_first_id = SemIR::InstId::None,
|
||||
.decl_loc_in_match_first = SemIR::LocId::None,
|
||||
.match_first_position = import_impl.match_first_position,
|
||||
.self_id = SemIR::TypeInstId::None,
|
||||
.constraint_id = SemIR::TypeInstId::None,
|
||||
|
||||
Reference in New Issue
Block a user