[MDEV-11914] LTO-enabled compilation fails due to type mismatch in TokuDB XZ code. Created: 2017-01-26  Updated: 2017-06-10  Resolved: 2017-06-10

Status: Closed
Project: MariaDB Server
Component/s: Compiling, Storage Engine - TokuDB
Affects Version/s: 10.1.21
Fix Version/s: N/A

Type: Bug Priority: Major
Reporter: Hans Kristian Rosbach Assignee: Unassigned
Resolution: Incomplete Votes: 0
Labels: need_feedback
Environment:

Scientific Linux 7.3 with SCL devtoolset v6
GCC 6.2.1



 Description   

Compilation with LTO enabled fails due to mismatching types in the XZ part of TokuDB, throwing the following errors.

/builddir/build/BUILD/mariadb-10.1.21/release/storage/tokudb/PerconaFT/xz/src/build_lzma/src/liblzma/lzma/lzma_encoder.h:39:17: error: type of 'lzma_lzma_encoder_create' does not match original declaration [-Werror=lto-type-mismatch]
 extern lzma_ret lzma_lzma_encoder_create(
                 ^
/builddir/build/BUILD/mariadb-10.1.21/release/storage/tokudb/PerconaFT/xz/src/build_lzma/src/liblzma/lzma/lzma_encoder.c:550:1: note: 'lzma_lzma_encoder_create' was previously declared here
 lzma_lzma_encoder_create(lzma_coder **coder_ptr, lzma_allocator *allocator,
 ^
/builddir/build/BUILD/mariadb-10.1.21/release/storage/tokudb/PerconaFT/xz/src/build_lzma/src/liblzma/lzma/lzma_encoder.c:550:1: note: code may be misoptimized unless -fno-strict-aliasing is used
 
/builddir/build/BUILD/mariadb-10.1.21/release/storage/tokudb/PerconaFT/xz/src/build_lzma/src/liblzma/lzma/lzma_encoder.h:45:17: error: type of 'lzma_lzma_encoder_reset' does not match original declaration [-Werror=lto-type-mismatch]
 extern lzma_ret lzma_lzma_encoder_reset(
                 ^
/builddir/build/BUILD/mariadb-10.1.21/release/storage/tokudb/PerconaFT/xz/src/build_lzma/src/liblzma/lzma/lzma_encoder.c:478:1: note: 'lzma_lzma_encoder_reset' was previously declared here
 lzma_lzma_encoder_reset(lzma_coder *coder, const lzma_options_lzma *options)
 ^
/builddir/build/BUILD/mariadb-10.1.21/release/storage/tokudb/PerconaFT/xz/src/build_lzma/src/liblzma/lzma/lzma_encoder.c:478:1: note: code may be misoptimized unless -fno-strict-aliasing is used
 
/builddir/build/BUILD/mariadb-10.1.21/release/storage/tokudb/PerconaFT/xz/src/build_lzma/src/liblzma/lzma/lzma_encoder.h:49:17: error: type of 'lzma_lzma_encode' does not match original declaration [-Werror=lto-type-mismatch]
 extern lzma_ret lzma_lzma_encode(lzma_coder *restrict coder,
                 ^
/builddir/build/BUILD/mariadb-10.1.21/release/storage/tokudb/PerconaFT/xz/src/build_lzma/src/liblzma/lzma/lzma_encoder.c:314:1: note: 'lzma_lzma_encode' was previously declared here
 lzma_lzma_encode(lzma_coder *restrict coder, lzma_mf *restrict mf,
 ^
/builddir/build/BUILD/mariadb-10.1.21/release/storage/tokudb/PerconaFT/xz/src/build_lzma/src/liblzma/lzma/lzma_encoder.c:314:1: note: code may be misoptimized unless -fno-strict-aliasing is used
lto1: all warnings being treated as errors

Compiling with -Wno-error=lto-type-mismatch allows the compilation to complete. However due to the differing definitions, this might potentially lead to data-corrupting bugs (I have not investigated whether corruption is actually possible here, but until someone does, it should be assumed to be possible).



 Comments   
Comment by Sergei Golubchik [ 2017-05-12 ]

Definitions look identical to me. Where do they differ?

Generated at Thu Feb 08 07:53:38 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.