From 65ac20807c1303e80fb8fc28ec810d740078e328 Mon Sep 17 00:00:00 2001 From: Sergey Kosukhin Date: Wed, 13 Mar 2024 13:07:13 +0100 Subject: [PATCH] liblzma: Fix building with NVHPC (NVIDIA HPC SDK). NVHPC compiler has several issues that make it impossible to build liblzma: - the compiler cannot handle unions that contain pointers that are not the first members; - the compiler fails to produce valid code for delta_decode if the vectorization is enabled, which results in failed tests. This introduces NVHPC-specific workarounds that address the issues. (This commit was contributed under 0BSD but the author confirmed that it is fine to backport it to the public domain branches. See https://github.com/tukaani-project/xz/pull/90#issuecomment-2100185936 and the next two messages.) (cherry picked from commit 096bc0e3f8fb4bfc4d2f3f64a7f219401ffb4c31) --- src/liblzma/common/string_conversion.c | 6 ++++-- src/liblzma/delta/delta_decoder.c | 3 +++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/liblzma/common/string_conversion.c b/src/liblzma/common/string_conversion.c index d2c1e809..8d6b3fb9 100644 --- a/src/liblzma/common/string_conversion.c +++ b/src/liblzma/common/string_conversion.c @@ -218,12 +218,14 @@ typedef struct { uint16_t offset; union { +// NVHPC has problems with unions that contain pointers that are not the first +// members + const name_value_map *map; + struct { uint32_t min; uint32_t max; } range; - - const name_value_map *map; } u; } option_map; diff --git a/src/liblzma/delta/delta_decoder.c b/src/liblzma/delta/delta_decoder.c index 77cf65cc..3953bc4a 100644 --- a/src/liblzma/delta/delta_decoder.c +++ b/src/liblzma/delta/delta_decoder.c @@ -26,6 +26,9 @@ decode_buffer(lzma_delta_coder *coder, uint8_t *buffer, size_t size) } +#ifdef __NVCOMPILER +# pragma routine novector +#endif static lzma_ret delta_decode(void *coder_ptr, const lzma_allocator *allocator, const uint8_t *restrict in, size_t *restrict in_pos,