https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114637
Bug ID: 114637
Summary: Problems when compiling with both undefined and
address sanitizer
Product: gcc
Version: 13.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: sanitizer
Assignee: unassigned at gcc dot gnu.org
Reporter: teodor_spaeren at riseup dot net
CC: dodji at gcc dot gnu.org, dvyukov at gcc dot gnu.org,
jakub at gcc dot gnu.org, kcc at gcc dot gnu.org
Target Milestone: ---
Here is the code:
#include <cstdint>
#include <memory>
struct RingBuffer
{
alignas(64) std::uint64_t m_head{ 0xFAFAFAFAFAFAFAFA };
int good()
{
return m_head == 2;
}
};
int main() {
RingBuffer buffer;
return buffer.good();
}
Gcc version:
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /build/gcc/src/gcc/configure
--enable-languages=ada,c,c++,d,fortran,go,lto,m2,objc,obj-c++
--enable-bootstrap --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib
--mandir=/usr/share/man --infodir=/usr/share/info
--with-bugurl=https://bugs.archlinux.org/ --with-build-config=bootstrap-lto
--with-linker-hash-style=gnu --with-system-zlib --enable-__cxa_atexit
--enable-cet=auto --enable-checking=release --enable-clocale=gnu
--enable-default-pie --enable-default-ssp --enable-gnu-indirect-function
--enable-gnu-unique-object --enable-libstdcxx-backtrace
--enable-link-serialization=1 --enable-linker-build-id --enable-lto
--enable-multilib --enable-plugin --enable-shared --enable-threads=posix
--disable-libssp --disable-libstdcxx-pch --disable-werror
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 13.2.1 20230801 (GCC)
The problem is that when compiling with:
g++ -std=c++2a -Wall -Wextra -fsanitize=undefined,address -o w
compiler_bug_2.cpp -g -D_GLIBCXX_DEBUG
Running gives:
dragon % ./w
compiler_bug_2.cpp:10:12: runtime error: member access within misaligned
address 0x7f4264f09020 for type 'struct RingBuffer', which requires 64 byte
alignment
0x7f4264f09020: note: pointer points here
fd 7f 00 00 fa fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00
Without `address` or without `undefined`, this runtime error does not occur.
I've checked the value of the pointer at runtime and it's aligned when running
under the debugger.
I have another repo, where I am able to force it in my debugger:
https://github.com/rHermes/hage/commit/b76cf0cddfadde1f647c575cb1a615d655e7dfbe
After building I am able to get it with:
/home/rhermes/commons/projects/hage/cmake-build-debug/tests/hage_test
"--test-case=ByteBuffer tests<hage::RingBuffer<4096>>" -ni
In the debugger.