Summary: | dev-util/gperf-3.1-r1 fails to compile (lto): keyword-list.icc:50:11: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing] | ||
---|---|---|---|
Product: | Gentoo Linux | Reporter: | Agostino Sarubbo <ago> |
Component: | Current packages | Assignee: | Gentoo's Team for Core System packages <base-system> |
Status: | CONFIRMED --- | ||
Severity: | normal | CC: | anthonyryan1, kocelfc |
Priority: | Normal | ||
Version: | unspecified | ||
Hardware: | All | ||
OS: | Linux | ||
Whiteboard: | |||
Package list: | Runtime testing required: | --- | |
Bug Depends on: | |||
Bug Blocks: | 618550 | ||
Attachments: | build.log |
Description
Agostino Sarubbo
![]() Created attachment 791738 [details]
build.log
build log and emerge --info
Here is a bit of explanation: -Werror=lto-type-mismatch: User to find possible runtime issues in packages. It likely means the package is unsafe to build & use with LTO. For projects using the same identifier but with different types across different files, they must be fixed to be consistent across the codebase. -Werror=odr: Used to find possible runtime issues in packages. These bugs are a problem anyway but may be even worse when combined with LTO. C++ code must comply with the One Definition Rule (ODR) - see https://en.cppreference.com/w/cpp/language/definition#One_Definition_Rule. -Werror=strict-aliasing: Used to find possible runtime issues in packages. These bugs are a problem anyway but may be even worse when combined with LTO. Workarounds: - If upstream is friendly and still active, file a bug upstream. For emulators, codecs, games, or multimedia packages, it may be worth just applying a workaround instead, as upstreams sometimes aren't receptive to these bugs (VALID FOR ALL). - Use the new 'filter-lto' from flag-o-matic.eclass as it's likely to be unsafe with LTO (VALID FOR lto-type-mismatch - odr). - Fix it yourself if interested, of course (VALID FOR ALL). - Append-flags -fno-strict-aliasing (VALID FOR strict-aliasing). - Use memcpy() but a union is sometimes suitable too (VALID FOR strict-aliasing). - -fstrict-aliasing is implied by -O2, so this must be addressed in some form (VALID FOR strict-aliasing). See also: https://marc.info/?l=gentoo-dev&m=165639574126280&w=2 lto_tinderbox has reproduced this issue with version 3.1-r1 - Updating summary. Not restricted to LTO - same on non-lto
cd src; make all
make[1]: Entering directory '/var/tmp/portage/dev-util/gperf-3.1-r1/work/gperf-3.1/src'
x86_64-pc-linux-gnu-g++ -O2 -pipe -march=native -Werror=strict-aliasing -Werror=odr -Werror=lto-type-mismatch -flifetime-dse=1 -I. -I./../lib -c ./version.cc
x86_64-pc-linux-gnu-g++ -O2 -pipe -march=native -Werror=strict-aliasing -Werror=odr -Werror=lto-type-mismatch -flifetime-dse=1 -I. -I./../lib -c ./positions.cc
x86_64-pc-linux-gnu-g++ -O2 -pipe -march=native -Werror=strict-aliasing -Werror=odr -Werror=lto-type-mismatch -flifetime-dse=1 -I. -I./../lib -c ./options.cc
x86_64-pc-linux-gnu-g++ -O2 -pipe -march=native -Werror=strict-aliasing -Werror=odr -Werror=lto-type-mismatch -flifetime-dse=1 -I. -I./../lib -c ./keyword.cc
x86_64-pc-linux-gnu-g++ -O2 -pipe -march=native -Werror=strict-aliasing -Werror=odr -Werror=lto-type-mismatch -flifetime-dse=1 -I. -I./../lib -c ./keyword-list.cc
In file included from ./keyword-list.h:78,
from ./keyword-list.cc:22:
./keyword-list.icc: In member function ‘KeywordExt_List*& KeywordExt_List::rest()’:
./keyword-list.icc:50:11: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
50 | return *reinterpret_cast<KeywordExt_List**>(&_cdr);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1plus: some warnings being treated as errors
make[1]: *** [Makefile:107: keyword-list.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make[1]: Leaving directory '/var/tmp/portage/dev-util/gperf-3.1-r1/work/gperf-3.1/src'
make: *** [Makefile:34: all] Error 2
* ERROR: dev-util/gperf-3.1-r1::gentoo failed (compile phase):
* emake failed
*
* If you need support, post the output of `emerge --info '=dev-util/gperf-3.1-r1::gentoo'`,
* the complete build log and the output of `emerge -pqv '=dev-util/gperf-3.1-r1::gentoo'`.
* The complete build log is located at '/var/log/portage/dev-util:gperf-3.1-r1:20230115-225352.log'.
* For convenience, a symlink to the build log is located at '/var/tmp/portage/dev-util/gperf-3.1-r1/temp/build.log'.
* The ebuild environment file is located at '/var/tmp/portage/dev-util/gperf-3.1-r1/temp/environment'.
* Working directory: '/var/tmp/portage/dev-util/gperf-3.1-r1/work/gperf-3.1'
* S: '/var/tmp/portage/dev-util/gperf-3.1-r1/work/gperf-3.1'
>>> Failed to emerge dev-util/gperf-3.1-r1, Log file:
Unfortunately I can reproduce the issue as well.
I created the following nolto.conf file and added the program in question to nolto.conf but made no difference
>>>
CFLAGS="${CFLAGS} -fno-lto"
CXXFLAGS="${CXXFLAGS} -fno-lto"
FCFLAGS="${FCFLAGS} -fno-lto"
FFLAGS="${FFLAGS} -fno-lto"
<<<
I am using the following COMMON_FLAGS in make.conf:
COMMON_FLAGS="-march=alderlake -O2 -pipe -flto -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing"
Any help to fix / bybass the error would be appreciated.
Thanks
A workaround would be to make an env file which appends -fno-strict-aliasing for all the packages that fail because of that error until they are fixed upstream. https://marc.info/?l=gentoo-dev&m=165639574126280&w=2 |