From 56b924a286ce277db51fb4cc23e220ac761d7c87 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Mon, 8 Jul 2024 11:46:18 -0400 Subject: [PATCH] xo-jit: gen lvtype name in type2llvm::create_localenv_llvm_type() --- src/jit/type2llvm.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/jit/type2llvm.cpp b/src/jit/type2llvm.cpp index a5405f86..231d6de4 100644 --- a/src/jit/type2llvm.cpp +++ b/src/jit/type2llvm.cpp @@ -277,6 +277,8 @@ namespace xo { type2llvm::create_localenv_llvm_type(xo::ref::brw llvm_cx, xo::ref::brw lambda) { + constexpr const char * c_prefix = "e."; + llvm::PointerType * parentenvptr_llvm_type = env_api_llvm_ptr_type(llvm_cx); llvm::PointerType * unwind_llvm_fnptr_type = type2llvm::require_localenv_unwind_llvm_fnptr_type(llvm_cx, parentenvptr_llvm_type); @@ -294,13 +296,16 @@ namespace xo { } } - /* this type doesn't need a name, right? would be "_" + lambda name + "_localenv" */ - llvm::StructType * localenv_llvm_type + /* e.g. "e.foo" */ + std::string env_name = std::string(c_prefix) + lambda->name(); + + llvm::StructType * localenv_lvtype = llvm::StructType::get(llvm_cx->llvm_cx_ref()); - localenv_llvm_type->setBody(member_llvm_type_v, false /*!is_packed*/); + localenv_lvtype->setName(env_name); + localenv_lvtype->setBody(member_llvm_type_v, false /*!is_packed*/); - return localenv_llvm_type; + return localenv_lvtype; } /*create_localenv_llvm_type*/ llvm::StructType *