Fix lifetime errors due to interner

In the llvm backend, there are the lifetimes `'a` (lifetime of the
global arena) and `'ctx` (lifetime of constructed LLVM values). `'a`
lives longer than `'ctx`, but the compiler didn't enforce this until
the layout interner was introduced, for some reason. We have to make
sure that containers of lifetime `'a` have no `'ctx` references.
This commit is contained in:
Ayaz Hafiz 2022-12-29 11:38:34 -06:00
parent 512a1721ae
commit 759f8d86af
No known key found for this signature in database
GPG key ID: 0E2A37416A25EF58
6 changed files with 54 additions and 55 deletions

View file

@ -134,15 +134,15 @@ fn bytes_as_ascii(bytes: &[u8]) -> String {
buf
}
pub fn spec_program<'a, I>(
pub fn spec_program<'a, 'r, I>(
arena: &'a Bump,
interner: &mut STLayoutInterner<'a>,
interner: &'r mut STLayoutInterner<'a>,
opt_level: OptLevel,
entry_point: roc_mono::ir::EntryPoint<'a>,
procs: I,
) -> Result<morphic_lib::Solutions>
where
I: Iterator<Item = &'a Proc<'a>>,
I: Iterator<Item = &'r Proc<'a>>,
{
let main_module = {
let mut m = ModDefBuilder::new();