public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/lfortran] epel10: Fix build with llvm-20
@ 2026-07-16 14:32 Christoph Junghans
0 siblings, 0 replies; only message in thread
From: Christoph Junghans @ 2026-07-16 14:32 UTC (permalink / raw)
To: git-commits
A new commit has been pushed.
Repo : rpms/lfortran
Branch : epel10
Commit : 4a24e227c2a4ad9905a32ae23b34f346619d911a
Author : Christoph Junghans <junghans@votca.org>
Date : 2025-03-10T17:22:09-06:00
Stats : +386/-3 in 2 file(s)
URL : https://src.fedoraproject.org/rpms/lfortran/c/4a24e227c2a4ad9905a32ae23b34f346619d911a?branch=epel10
Log:
Fix build with llvm-20
---
diff --git a/6571.patch b/6571.patch
new file mode 100644
index 0000000..6712d4e
--- /dev/null
+++ b/6571.patch
@@ -0,0 +1,379 @@
+From f7784ce1cdc545650765278f38ab3ec38329e21b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Ond=C5=99ej=20=C4=8Cert=C3=ADk?= <ondrej@certik.us>
+Date: Mon, 10 Mar 2025 15:24:40 -0600
+Subject: [PATCH 1/2] setOpaquePointers is removed in LLVM 20
+
+---
+ src/libasr/codegen/asr_to_llvm.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/libasr/codegen/asr_to_llvm.cpp b/src/libasr/codegen/asr_to_llvm.cpp
+index 1d6f506e6d..aaf4aea477 100644
+--- a/src/libasr/codegen/asr_to_llvm.cpp
++++ b/src/libasr/codegen/asr_to_llvm.cpp
+@@ -10779,7 +10779,7 @@ Result<std::unique_ptr<LLVMModule>> asr_to_llvm(ASR::TranslationUnit_t &asr,
+ CompilerOptions &co, const std::string &run_fn,
+ const std::string &infile)
+ {
+-#if LLVM_VERSION_MAJOR >= 15
++#if LLVM_VERSION_MAJOR >= 15 && LLVM_VERSION_MAJOR <= 19
+ context.setOpaquePointers(false);
+ #endif
+ ASRToLLVMVisitor v(al, context, infile, co, diagnostics);
+
+From 9c9179a5eefa018119a78c0074c19416ef320a1b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Ond=C5=99ej=20=C4=8Cert=C3=ADk?= <ondrej@certik.us>
+Date: Mon, 10 Mar 2025 15:25:41 -0600
+Subject: [PATCH 2/2] Use module->getDataLayout() for LLVM 20
+
+---
+ src/libasr/codegen/asr_to_llvm.cpp | 26 ++++++++---------
+ src/libasr/codegen/llvm_array_utils.cpp | 10 +++----
+ src/libasr/codegen/llvm_utils.cpp | 38 ++++++++++++-------------
+ 3 files changed, 37 insertions(+), 37 deletions(-)
+
+diff --git a/src/libasr/codegen/asr_to_llvm.cpp b/src/libasr/codegen/asr_to_llvm.cpp
+index aaf4aea477..51d7840a26 100644
+--- a/src/libasr/codegen/asr_to_llvm.cpp
++++ b/src/libasr/codegen/asr_to_llvm.cpp
+@@ -466,7 +466,7 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor<ASRToLLVMVisitor>
+ }
+ llvm::Value* arr_first = nullptr;
+ if( !compiler_options.stack_arrays ) {
+- llvm::DataLayout data_layout(module.get());
++ llvm::DataLayout data_layout(module->getDataLayout());
+ uint64_t size = data_layout.getTypeAllocSize(llvm_data_type);
+ prod = builder->CreateMul(prod,
+ llvm::ConstantInt::get(context, llvm::APInt(32, size)));
+@@ -1348,7 +1348,7 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor<ASRToLLVMVisitor>
+ if( ASR::is_a<ASR::String_t>(*list_type->m_type) ||
+ LLVM::is_llvm_struct(list_type->m_type) ||
+ ASR::is_a<ASR::Complex_t>(*list_type->m_type) ) {
+- llvm::DataLayout data_layout(module.get());
++ llvm::DataLayout data_layout(module->getDataLayout());
+ type_size = data_layout.getTypeAllocSize(llvm_el_type);
+ } else {
+ type_size = ASRUtils::extract_kind_from_ttype_t(list_type->m_type);
+@@ -1936,7 +1936,7 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor<ASRToLLVMVisitor>
+ if( ASR::is_a<ASR::String_t>(*el_type) ||
+ LLVM::is_llvm_struct(el_type) ||
+ ASR::is_a<ASR::Complex_t>(*el_type) ) {
+- llvm::DataLayout data_layout(module.get());
++ llvm::DataLayout data_layout(module->getDataLayout());
+ type_size = data_layout.getTypeAllocSize(llvm_el_type);
+ } else {
+ type_size = ASRUtils::extract_kind_from_ttype_t(el_type);
+@@ -2200,7 +2200,7 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor<ASRToLLVMVisitor>
+ if( ASR::is_a<ASR::String_t>(*list_type->m_type) ||
+ LLVM::is_llvm_struct(list_type->m_type) ||
+ ASR::is_a<ASR::Complex_t>(*list_type->m_type) ) {
+- llvm::DataLayout data_layout(module.get());
++ llvm::DataLayout data_layout(module->getDataLayout());
+ type_size = data_layout.getTypeAllocSize(llvm_el_type);
+ } else {
+ type_size = ASRUtils::extract_kind_from_ttype_t(list_type->m_type);
+@@ -2528,7 +2528,7 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor<ASRToLLVMVisitor>
+ int64_t size = ASRUtils::get_fixed_size_of_array(asr_dims, asr_n_dims);
+ llvm::Type* llvm_data_type = llvm_utils->get_type_from_ttype_t_util(ASRUtils::type_get_past_array(
+ ASRUtils::type_get_past_allocatable(ASRUtils::type_get_past_pointer(x_m_array_type))), module.get());
+- llvm::DataLayout data_layout(module.get());
++ llvm::DataLayout data_layout(module->getDataLayout());
+ uint64_t data_size = data_layout.getTypeAllocSize(llvm_data_type);
+ llvm::Value* llvm_size = llvm::ConstantInt::get(context, llvm::APInt(32, size));
+ llvm_size = builder->CreateMul(llvm_size,
+@@ -2674,7 +2674,7 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor<ASRToLLVMVisitor>
+ llvm::Value* SizeOfTypeUtil(ASR::ttype_t* m_type, llvm::Type* output_type,
+ ASR::ttype_t* output_type_asr) {
+ llvm::Type* llvm_type = llvm_utils->get_type_from_ttype_t_util(m_type, module.get());
+- llvm::DataLayout data_layout(module.get());
++ llvm::DataLayout data_layout(module->getDataLayout());
+ int64_t type_size = data_layout.getTypeAllocSize(llvm_type);
+ return llvm::ConstantInt::get(output_type, llvm::APInt(
+ ASRUtils::extract_kind_from_ttype_t(output_type_asr) * 8, type_size));
+@@ -3765,7 +3765,7 @@ ptr_type[ptr_member] = llvm_utils->get_type_from_ttype_t_util(
+ llvm::APInt(32, ASRUtils::get_fixed_size_of_array(ASR::down_cast<ASR::ArrayConstant_t>(v->m_value)->m_type)));
+ llvm::Type* llvm_data_type = llvm_utils->get_type_from_ttype_t_util(
+ ASRUtils::type_get_past_array(ASRUtils::expr_type(v->m_value)), module.get());
+- llvm::DataLayout data_layout(module.get());
++ llvm::DataLayout data_layout(module->getDataLayout());
+ size_t dt_size = data_layout.getTypeAllocSize(llvm_data_type);
+ arg_size = builder->CreateMul(llvm::ConstantInt::get(
+ llvm::Type::getInt32Ty(context), llvm::APInt(32, dt_size)), arg_size);
+@@ -3897,7 +3897,7 @@ ptr_type[ptr_member] = llvm_utils->get_type_from_ttype_t_util(
+ }
+ llvm::Value *ptr = nullptr;
+ if( !compiler_options.stack_arrays && array_size ) {
+- llvm::DataLayout data_layout(module.get());
++ llvm::DataLayout data_layout(module->getDataLayout());
+ uint64_t size = data_layout.getTypeAllocSize(type);
+ array_size = builder->CreateMul(array_size,
+ llvm::ConstantInt::get(context, llvm::APInt(32, size)));
+@@ -5332,7 +5332,7 @@ ptr_type[ptr_member] = llvm_utils->get_type_from_ttype_t_util(
+ llvm::Value* size = list_api->len(plist);
+ llvm::Type* el_type = llvm_utils->get_type_from_ttype_t_util(
+ ASRUtils::extract_type(ASRUtils::expr_type(x.m_value)), module.get());
+- llvm::DataLayout data_layout(module.get());
++ llvm::DataLayout data_layout(module->getDataLayout());
+ uint64_t size_ = data_layout.getTypeAllocSize(el_type);
+ size = builder->CreateMul(size, llvm::ConstantInt::get(
+ llvm::Type::getInt32Ty(context), llvm::APInt(32, size_)));
+@@ -5429,7 +5429,7 @@ ptr_type[ptr_member] = llvm_utils->get_type_from_ttype_t_util(
+ ASR::dimension_t* asr_dims = nullptr;
+ size_t asr_n_dims = ASRUtils::extract_dimensions_from_ttype(target_type, asr_dims);
+ int64_t size = ASRUtils::get_fixed_size_of_array(asr_dims, asr_n_dims);
+- llvm::DataLayout data_layout(module.get());
++ llvm::DataLayout data_layout(module->getDataLayout());
+ uint64_t data_size = data_layout.getTypeAllocSize(target_el_type);
+ llvm::Value* llvm_size = llvm::ConstantInt::get(context, llvm::APInt(32, size));
+ llvm_size = builder->CreateMul(llvm_size,
+@@ -5441,7 +5441,7 @@ ptr_type[ptr_member] = llvm_utils->get_type_from_ttype_t_util(
+ ASR::dimension_t* asr_dims = nullptr;
+ size_t asr_n_dims = ASRUtils::extract_dimensions_from_ttype(target_type, asr_dims);
+ int64_t size = ASRUtils::get_fixed_size_of_array(asr_dims, asr_n_dims);
+- llvm::DataLayout data_layout(module.get());
++ llvm::DataLayout data_layout(module->getDataLayout());
+ uint64_t data_size = data_layout.getTypeAllocSize(target_el_type);
+ llvm::Value* llvm_size = llvm::ConstantInt::get(context, llvm::APInt(32, size));
+ llvm_size = builder->CreateMul(llvm_size,
+@@ -5454,7 +5454,7 @@ ptr_type[ptr_member] = llvm_utils->get_type_from_ttype_t_util(
+ llvm::Value* llvm_size = arr_descr->get_array_size(target, nullptr, 4);
+ target = llvm_utils->CreateLoad2(target_el_type->getPointerTo(), arr_descr->get_pointer_to_data(target));
+ value = llvm_utils->create_gep(value, 0);
+- llvm::DataLayout data_layout(module.get());
++ llvm::DataLayout data_layout(module->getDataLayout());
+ uint64_t data_size = data_layout.getTypeAllocSize(value_el_type);
+ llvm_size = builder->CreateMul(llvm_size,
+ llvm::ConstantInt::get(context, llvm::APInt(32, data_size)));
+@@ -5523,7 +5523,7 @@ ptr_type[ptr_member] = llvm_utils->get_type_from_ttype_t_util(
+ ASR::dimension_t* asr_dims = nullptr;
+ size_t asr_n_dims = ASRUtils::extract_dimensions_from_ttype(target_type, asr_dims);
+ int64_t size = ASRUtils::get_fixed_size_of_array(asr_dims, asr_n_dims);
+- llvm::DataLayout data_layout(module.get());
++ llvm::DataLayout data_layout(module->getDataLayout());
+ uint64_t data_size = data_layout.getTypeAllocSize(target_el_type);
+ llvm::Value* llvm_size = llvm::ConstantInt::get(context, llvm::APInt(32, size));
+ llvm_size = builder->CreateMul(llvm_size,
+diff --git a/src/libasr/codegen/llvm_array_utils.cpp b/src/libasr/codegen/llvm_array_utils.cpp
+index 5c994cc810..ee8a10e119 100644
+--- a/src/libasr/codegen/llvm_array_utils.cpp
++++ b/src/libasr/codegen/llvm_array_utils.cpp
+@@ -301,7 +301,7 @@ namespace LCompilers {
+ llvm::Value* arr_first = nullptr;
+
+ if( !co.stack_arrays ) {
+- llvm::DataLayout data_layout(module);
++ llvm::DataLayout data_layout(module->getDataLayout());
+ uint64_t size = data_layout.getTypeAllocSize(llvm_data_type);
+ builder->CreateStore(builder->CreateMul(
+ llvm_utils->CreateLoad(llvm_size),
+@@ -371,7 +371,7 @@ namespace LCompilers {
+ }
+ llvm::Value* ptr2firstptr = get_pointer_to_data(arr);
+ llvm::AllocaInst *arg_size = llvm_utils->CreateAlloca(*builder, llvm::Type::getInt32Ty(context));
+- llvm::DataLayout data_layout(module);
++ llvm::DataLayout data_layout(module->getDataLayout());
+ llvm::Type* ptr_type = llvm_data_type->getPointerTo();
+ uint64_t size = data_layout.getTypeAllocSize(llvm_data_type);
+ llvm::Value* llvm_size = llvm::ConstantInt::get(context, llvm::APInt(32, size));
+@@ -766,7 +766,7 @@ namespace LCompilers {
+ builder->CreateStore(arr_first, first_ptr);
+
+ llvm::Value* ptr2firstptr = this->get_pointer_to_data(array);
+- llvm::DataLayout data_layout(module);
++ llvm::DataLayout data_layout(module->getDataLayout());
+ uint64_t size = data_layout.getTypeAllocSize(llvm_data_type);
+ llvm::Value* llvm_size = llvm::ConstantInt::get(context, llvm::APInt(32, size));
+ num_elements = builder->CreateMul(num_elements, llvm_size);
+@@ -838,7 +838,7 @@ namespace LCompilers {
+ }
+
+ llvm::Value* ptr2firstptr = this->get_pointer_to_data(src);
+- llvm::DataLayout data_layout(module);
++ llvm::DataLayout data_layout(module->getDataLayout());
+ uint64_t size = data_layout.getTypeAllocSize(llvm_data_type);
+ llvm::Value* llvm_size = llvm::ConstantInt::get(context, llvm::APInt(32, size));
+ num_elements = builder->CreateMul(num_elements, llvm_size);
+@@ -885,7 +885,7 @@ namespace LCompilers {
+
+ void SimpleCMODescriptor::copy_array_data_only(llvm::Value* src, llvm::Value* dest,
+ llvm::Module* module, llvm::Type* llvm_data_type, llvm::Value* num_elements) {
+- llvm::DataLayout data_layout(module);
++ llvm::DataLayout data_layout(module->getDataLayout());
+ uint64_t size = data_layout.getTypeAllocSize(llvm_data_type);
+ llvm::Value* llvm_size = llvm::ConstantInt::get(context, llvm::APInt(32, size));
+ num_elements = builder->CreateMul(num_elements, llvm_size);
+diff --git a/src/libasr/codegen/llvm_utils.cpp b/src/libasr/codegen/llvm_utils.cpp
+index 311e737e91..572a4f7718 100644
+--- a/src/libasr/codegen/llvm_utils.cpp
++++ b/src/libasr/codegen/llvm_utils.cpp
+@@ -281,7 +281,7 @@ namespace LCompilers {
+ union_type_llvm = name2dertype[union_type_name];
+ } else {
+ const std::map<std::string, ASR::symbol_t*>& scope = union_type->m_symtab->get_scope();
+- llvm::DataLayout data_layout(module);
++ llvm::DataLayout data_layout(module->getDataLayout());
+ llvm::Type* max_sized_type = nullptr;
+ size_t max_type_size = 0;
+ for( auto itr = scope.begin(); itr != scope.end(); itr++ ) {
+@@ -504,7 +504,7 @@ namespace LCompilers {
+ if( LLVM::is_llvm_struct(asr_type) ||
+ ASR::is_a<ASR::String_t>(*asr_type) ||
+ ASR::is_a<ASR::Complex_t>(*asr_type) ) {
+- llvm::DataLayout data_layout(module);
++ llvm::DataLayout data_layout(module->getDataLayout());
+ return data_layout.getTypeAllocSize(llvm_type);
+ }
+ return a_kind;
+@@ -780,7 +780,7 @@ namespace LCompilers {
+ if( LLVM::is_llvm_struct(asr_list->m_type) ||
+ ASR::is_a<ASR::String_t>(*asr_list->m_type) ||
+ ASR::is_a<ASR::Complex_t>(*asr_list->m_type) ) {
+- llvm::DataLayout data_layout(module);
++ llvm::DataLayout data_layout(module->getDataLayout());
+ type_size = data_layout.getTypeAllocSize(el_llvm_type);
+ } else {
+ type_size = a_kind;
+@@ -1046,7 +1046,7 @@ namespace LCompilers {
+ if( LLVM::is_llvm_struct(asr_list->m_type) ||
+ ASR::is_a<ASR::String_t>(*asr_list->m_type) ||
+ ASR::is_a<ASR::Complex_t>(*asr_list->m_type) ) {
+- llvm::DataLayout data_layout(module);
++ llvm::DataLayout data_layout(module->getDataLayout());
+ type_size = data_layout.getTypeAllocSize(el_llvm_type);
+ } else {
+ type_size = a_kind;
+@@ -1244,7 +1244,7 @@ namespace LCompilers {
+ if( LLVM::is_llvm_struct(asr_list->m_type) ||
+ ASR::is_a<ASR::String_t>(*asr_list->m_type) ||
+ ASR::is_a<ASR::Complex_t>(*asr_list->m_type) ) {
+- llvm::DataLayout data_layout(module);
++ llvm::DataLayout data_layout(module->getDataLayout());
+ type_size = data_layout.getTypeAllocSize(el_llvm_type);
+ } else {
+ type_size = a_kind;
+@@ -1467,7 +1467,7 @@ namespace LCompilers {
+ if( LLVM::is_llvm_struct(asr_list->m_type) ||
+ ASR::is_a<ASR::String_t>(*asr_list->m_type) ||
+ ASR::is_a<ASR::Complex_t>(*asr_list->m_type) ) {
+- llvm::DataLayout data_layout(module);
++ llvm::DataLayout data_layout(module->getDataLayout());
+ type_size = data_layout.getTypeAllocSize(el_llvm_type);
+ } else {
+ type_size = a_kind;
+@@ -2106,7 +2106,7 @@ namespace LCompilers {
+ int64_t size = ASRUtils::get_fixed_size_of_array(asr_dims, asr_n_dims);
+ llvm::Type* llvm_data_type = get_type_from_ttype_t_util(ASRUtils::type_get_past_array(
+ ASRUtils::type_get_past_allocatable(ASRUtils::type_get_past_pointer(asr_type))), module);
+- llvm::DataLayout data_layout(module);
++ llvm::DataLayout data_layout(module->getDataLayout());
+ uint64_t data_size = data_layout.getTypeAllocSize(llvm_data_type);
+ llvm::Value* llvm_size = llvm::ConstantInt::get(context, llvm::APInt(32, size));
+ llvm_size = builder->CreateMul(llvm_size,
+@@ -2442,7 +2442,7 @@ namespace LCompilers {
+ initial_capacity, initial_capacity);
+ llvm_utils->list_api->list_init(value_type_code, value_list, *module,
+ initial_capacity, initial_capacity);
+- llvm::DataLayout data_layout(module);
++ llvm::DataLayout data_layout(module->getDataLayout());
+ size_t mask_size = data_layout.getTypeAllocSize(llvm::Type::getInt8Ty(context));
+ llvm::Value* llvm_capacity = llvm::ConstantInt::get(llvm::Type::getInt32Ty(context),
+ llvm::APInt(32, initial_capacity));
+@@ -2472,7 +2472,7 @@ namespace LCompilers {
+ llvm::Value* num_buckets_filled_ptr = get_pointer_to_number_of_filled_buckets(dict);
+ LLVM::CreateStore(*builder, llvm_zero, num_buckets_filled_ptr);
+
+- llvm::DataLayout data_layout(module);
++ llvm::DataLayout data_layout(module->getDataLayout());
+ llvm::Type* key_value_pair_type = get_key_value_pair_type(key_type_code, value_type_code);
+ size_t key_value_type_size = data_layout.getTypeAllocSize(key_value_pair_type);
+ llvm::Value* llvm_key_value_size = llvm::ConstantInt::get(llvm::Type::getInt32Ty(context), llvm::APInt(32, key_value_type_size));
+@@ -2603,7 +2603,7 @@ namespace LCompilers {
+
+ llvm::Value* src_key_mask = llvm_utils->CreateLoad(get_pointer_to_keymask(src));
+ llvm::Value* dest_key_mask_ptr = get_pointer_to_keymask(dest);
+- llvm::DataLayout data_layout(module);
++ llvm::DataLayout data_layout(module->getDataLayout());
+ size_t mask_size = data_layout.getTypeAllocSize(llvm::Type::getInt8Ty(context));
+ llvm::Value* llvm_mask_size = llvm::ConstantInt::get(llvm::Type::getInt32Ty(context),
+ llvm::APInt(32, mask_size));
+@@ -2766,7 +2766,7 @@ namespace LCompilers {
+ LLVM::CreateStore(*builder, src_filled_buckets, get_pointer_to_number_of_filled_buckets(dest));
+ LLVM::CreateStore(*builder, src_capacity, get_pointer_to_capacity(dest));
+ LLVM::CreateStore(*builder, src_rehash_flag, get_pointer_to_rehash_flag(dest));
+- llvm::DataLayout data_layout(module);
++ llvm::DataLayout data_layout(module->getDataLayout());
+ size_t mask_size = data_layout.getTypeAllocSize(llvm::Type::getInt8Ty(context));
+ llvm::Value* llvm_mask_size = llvm::ConstantInt::get(llvm::Type::getInt32Ty(context),
+ llvm::APInt(32, mask_size));
+@@ -3332,7 +3332,7 @@ namespace LCompilers {
+ llvm_utils->create_if_else(builder->CreateICmpNE(
+ llvm_utils->CreateLoad(chain_itr_prev),
+ llvm::ConstantPointerNull::get(llvm::Type::getInt8Ty(context)->getPointerTo())), [&]() {
+- llvm::DataLayout data_layout(module);
++ llvm::DataLayout data_layout(module->getDataLayout());
+ size_t kv_struct_size = data_layout.getTypeAllocSize(kv_struct_type);
+ llvm::Value* malloc_size = llvm::ConstantInt::get(llvm::Type::getInt32Ty(context), kv_struct_size);
+ llvm::Value* new_kv_struct_i8 = LLVM::lfortran_malloc(context, *module, *builder, malloc_size);
+@@ -3920,7 +3920,7 @@ namespace LCompilers {
+ llvm_utils->list_api->list_init(value_type_code, new_value_list, *module, capacity, capacity);
+
+ llvm::Value* key_mask = llvm_utils->CreateLoad(get_pointer_to_keymask(dict));
+- llvm::DataLayout data_layout(module);
++ llvm::DataLayout data_layout(module->getDataLayout());
+ size_t mask_size = data_layout.getTypeAllocSize(llvm::Type::getInt8Ty(context));
+ llvm::Value* llvm_mask_size = llvm::ConstantInt::get(llvm::Type::getInt32Ty(context),
+ llvm::APInt(32, mask_size));
+@@ -5673,7 +5673,7 @@ namespace LCompilers {
+ llvm::Value* el_list = get_el_list(set);
+ llvm_utils->list_api->list_init(type_code, el_list, *module,
+ initial_capacity, initial_capacity);
+- llvm::DataLayout data_layout(module);
++ llvm::DataLayout data_layout(module->getDataLayout());
+ size_t mask_size = data_layout.getTypeAllocSize(llvm::Type::getInt8Ty(context));
+ llvm::Value* llvm_capacity = llvm::ConstantInt::get(llvm::Type::getInt32Ty(context),
+ llvm::APInt(32, initial_capacity));
+@@ -5706,7 +5706,7 @@ namespace LCompilers {
+ llvm::Value* num_buckets_filled_ptr = get_pointer_to_number_of_filled_buckets(set);
+ LLVM::CreateStore(*builder, llvm_zero, num_buckets_filled_ptr);
+
+- llvm::DataLayout data_layout(module);
++ llvm::DataLayout data_layout(module->getDataLayout());
+ llvm::Type* el_type = typecode2elstruct[el_type_code];
+ size_t el_type_size = data_layout.getTypeAllocSize(el_type);
+ llvm::Value* llvm_el_size = llvm::ConstantInt::get(llvm::Type::getInt32Ty(context), llvm::APInt(32, el_type_size));
+@@ -6150,7 +6150,7 @@ namespace LCompilers {
+ llvm_utils->create_if_else(builder->CreateICmpNE(
+ llvm_utils->CreateLoad(chain_itr_prev),
+ llvm::ConstantPointerNull::get(llvm::Type::getInt8Ty(context)->getPointerTo())), [&]() {
+- llvm::DataLayout data_layout(module);
++ llvm::DataLayout data_layout(module->getDataLayout());
+ size_t el_struct_size = data_layout.getTypeAllocSize(el_struct_type);
+ llvm::Value* malloc_size = llvm::ConstantInt::get(llvm::Type::getInt32Ty(context), el_struct_size);
+ llvm::Value* new_el_struct_i8 = LLVM::lfortran_malloc(context, *module, *builder, malloc_size);
+@@ -6248,7 +6248,7 @@ namespace LCompilers {
+ llvm_utils->list_api->list_init(el_type_code, new_el_list, *module, capacity, capacity);
+
+ llvm::Value* el_mask = llvm_utils->CreateLoad(get_pointer_to_mask(set));
+- llvm::DataLayout data_layout(module);
++ llvm::DataLayout data_layout(module->getDataLayout());
+ size_t mask_size = data_layout.getTypeAllocSize(llvm::Type::getInt8Ty(context));
+ llvm::Value* llvm_mask_size = llvm::ConstantInt::get(llvm::Type::getInt32Ty(context),
+ llvm::APInt(32, mask_size));
+@@ -6820,7 +6820,7 @@ namespace LCompilers {
+
+ llvm::Value* src_el_mask = llvm_utils->CreateLoad(get_pointer_to_mask(src));
+ llvm::Value* dest_el_mask_ptr = get_pointer_to_mask(dest);
+- llvm::DataLayout data_layout(module);
++ llvm::DataLayout data_layout(module->getDataLayout());
+ size_t mask_size = data_layout.getTypeAllocSize(llvm::Type::getInt8Ty(context));
+ llvm::Value* llvm_mask_size = llvm::ConstantInt::get(llvm::Type::getInt32Ty(context),
+ llvm::APInt(32, mask_size));
+@@ -6845,7 +6845,7 @@ namespace LCompilers {
+ LLVM::CreateStore(*builder, src_filled_buckets, get_pointer_to_number_of_filled_buckets(dest));
+ LLVM::CreateStore(*builder, src_capacity, get_pointer_to_capacity(dest));
+ LLVM::CreateStore(*builder, src_rehash_flag, get_pointer_to_rehash_flag(dest));
+- llvm::DataLayout data_layout(module);
++ llvm::DataLayout data_layout(module->getDataLayout());
+ size_t mask_size = data_layout.getTypeAllocSize(llvm::Type::getInt8Ty(context));
+ llvm::Value* llvm_mask_size = llvm::ConstantInt::get(llvm::Type::getInt32Ty(context),
+ llvm::APInt(32, mask_size));
diff --git a/lfortran.spec b/lfortran.spec
index 37725a5..21a4be7 100644
--- a/lfortran.spec
+++ b/lfortran.spec
@@ -1,6 +1,6 @@
Version: 0.48.0
Name: lfortran
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: A modern Fortran compiler
# Main code is BSD-3-Clause
@@ -9,6 +9,7 @@ Summary: A modern Fortran compiler
License: BSD-3-Clause AND Apache-2.0 WITH LLVM-exception
URL: https://lfortran.org/
Source0: https://github.com/lfortran/lfortran/releases/download/v%{version}/lfortran-%{version}.tar.gz
+Patch0: https://patch-diff.githubusercontent.com/raw/lfortran/lfortran/pull/6571.patch
# https://github.com/lfortran/lfortran/issues/2981
ExclusiveArch: x86_64
@@ -31,7 +32,7 @@ BuildRequires: json-devel
BuildRequires: libffi-devel
BuildRequires: libunwind-devel
BuildRequires: libuuid-devel
-BuildRequires: llvm19-devel
+BuildRequires: llvm-devel
BuildRequires: python3-devel
BuildRequires: rapidjson-devel
BuildRequires: re2c
@@ -115,7 +116,7 @@ This package contains the jupyter kernel for %{name}.
# not needed on Fedora
# WASM=OFF due to lfortran/lfortran#3899
# WITH_STACKTRACE=OFF due to lfortran/lfortran#5072
-%cmake -DCMAKE_PREFIX_PATH=%{_libdir}/llvm19/ \
+%cmake \
-DWITH_LLVM=ON \
-DWITH_ZSTD=OFF \
-DWITH_RUNTIME_LIBRARY=ON \
@@ -167,6 +168,9 @@ This package contains the jupyter kernel for %{name}.
%endif
%changelog
+* Mon Mar 10 2025 Christoph Junghans <junghans@votca.org> - 0.48.0-2
+- Fix build with llvm-20
+
* Mon Mar 10 2025 Christoph Junghans <junghans@votca.org> - 0.48.0-1
- Version bump to v0.48.0 (bug #2351164)
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2026-07-16 14:32 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-07-16 14:32 [rpms/lfortran] epel10: Fix build with llvm-20 Christoph Junghans
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox