From ecd1767edbdf694d7444e8152c4a84e3370555a7 Mon Sep 17 00:00:00 2001 From: Yury Plyakhin Date: Thu, 5 Feb 2026 10:41:03 -0800 Subject: [PATCH] [offload] Fix DeviceImage to handle OffloadBinary::create returning vector (#180003) OffloadBinary::create() now returns `Expected>>` instead of a single unique_ptr, to support multiple entries in version 2 format. Updated DeviceImageTy constructor to extract the first binary from the returned vector, with empty check. In this context, only one image per OffloadBinary is expected. --- offload/libomptarget/DeviceImage.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/offload/libomptarget/DeviceImage.cpp b/offload/libomptarget/DeviceImage.cpp index e5b4bf552643..23a062986006 100644 --- a/offload/libomptarget/DeviceImage.cpp +++ b/offload/libomptarget/DeviceImage.cpp @@ -30,15 +30,21 @@ DeviceImageTy::DeviceImageTy(__tgt_bin_desc &BinaryDesc, llvm::StringRef ImageStr(static_cast(Image.ImageStart), utils::getPtrDiff(Image.ImageEnd, Image.ImageStart)); - auto BinaryOrErr = + auto BinariesOrErr = llvm::object::OffloadBinary::create(llvm::MemoryBufferRef(ImageStr, "")); - if (!BinaryOrErr) { - consumeError(BinaryOrErr.takeError()); + if (!BinariesOrErr) { + consumeError(BinariesOrErr.takeError()); return; } - Binary = std::move(*BinaryOrErr); + auto &Binaries = *BinariesOrErr; + if (Binaries.empty()) + return; + + // Offload Binary V2 supports multiple images, but in this context we only + // expect one image per Offload Binary. + Binary = std::move(Binaries[0]); void *Begin = const_cast( static_cast(Binary->getImage().bytes_begin())); void *End = const_cast(