Skip to content
This repository has been archived by the owner on Dec 26, 2023. It is now read-only.

ubsan: load/store of misaligned address & strange behavior with different -O levels (g++) #57

Closed
Nekrolm opened this issue Jan 9, 2020 · 5 comments
Assignees
Labels

Comments

@Nekrolm
Copy link

Nekrolm commented Jan 9, 2020

I have faced to strange behavior (suppose UB) while trying to use compound template-generated type as unordered_map KeyType: https://gist.github.com/Nekrolm/47be0ea8644247ee7390f59a4ac3a778

In Debug build with ubsan instrumentation I got warning about misaligned access (robin_hood.h line 1991).
With -O2 it works fine. But with -O3 it crushes with segfault.

g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.4.0-1ubuntu1~18.04.1' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1) 
@phprus
Copy link

phprus commented Jan 9, 2020

@martinus
Copy link
Owner

Hi, thanks for reporting this! I see what I can do

@martinus martinus self-assigned this Jan 16, 2020
martinus added a commit that referenced this issue Jan 16, 2020
…ad with unaligned_load and memcpy, which are compiled to the same code but are not undefined behavior.

Additionally, this fixes a bug where the sentinel got erased. So the reproducer works now successfully on my machines
@martinus
Copy link
Owner

I believe I have fixed this bug in the version 3.4.4. Can you give it a try? https://github.com/martinus/robin-hood-hashing/blob/master/src/include/robin_hood.h

@martinus martinus added the bug label Jan 16, 2020
@Nekrolm
Copy link
Author

Nekrolm commented Jan 17, 2020

Now it works as expected!

@martinus
Copy link
Owner

Fixed

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

3 participants