public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/103832] New: vectorized code segfaults due to misaligned access
@ 2021-12-26 11:58 joakim.rosqvist at gmail dot com
2021-12-26 12:09 ` [Bug c++/103832] " pinskia at gcc dot gnu.org
2021-12-27 18:05 ` joakim.rosqvist at gmail dot com
0 siblings, 2 replies; 3+ messages in thread
From: joakim.rosqvist at gmail dot com @ 2021-12-26 11:58 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103832
Bug ID: 103832
Summary: vectorized code segfaults due to misaligned access
Product: gcc
Version: 11.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: joakim.rosqvist at gmail dot com
Target Milestone: ---
Created attachment 52059
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=52059&action=edit
preprocessed version of source file optim.cc
The attached code, which adds up values in an array, crashes due to a
misaligned memory access. The array is properly aligned at index 0, but the sum
starts at index 1 and so I expected the optimizer to either not vectorize the
loop or to add up the first few elements separately and vectorize the sum from
the first "aligned" index.
>g++ -v
Using built-in specs.
COLLECT_GCC=g++orig
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.2.0-7ubuntu2'
--with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs
--enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr
--with-gcc-major-version-only --program-suffix=-11
--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 --enable-bootstrap --enable-clocale=gnu
--enable-libstdcxx-debug --enable-libstdcxx-time=yes
--with-default-libstdcxx-abi=new --enable-gnu-unique-object
--disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib
--enable-libphobos-checking=release --with-target-system-zlib=auto
--enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet
--with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32
--enable-multilib --with-tune=generic
--enable-offload-targets=nvptx-none=/build/gcc-11-ZPT0kp/gcc-11-11.2.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-ZPT0kp/gcc-11-11.2.0/debian/tmp-gcn/usr
--without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu
--host=x86_64-linux-gnu --target=x86_64-linux-gnu
--with-build-config=bootstrap-lto-lean --enable-link-serialization=2
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 11.2.0 (Ubuntu 11.2.0-7ubuntu2)
System used is Ubuntu 21.10 on an AMD Ryzen 3700X cpu.
Commandline used to compile, which gives no output:
>g++ -O -Wall -Wextra -ftree-loop-vectorize -fno-strict-aliasing -fwrapv -fno-aggressive-loop-optimizations -fsanitize=undefined -save-temps -o optim optim.cc
Commandline to trigger the issue with output
>./optim
optim.cc:12:15: runtime error: load of misaligned address 0x564849975f04 for
type 'aligned_float', which requires 64 byte alignment
0x564849975f04: note: pointer points here
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00
^
^ permalink raw reply [flat|nested] 3+ messages in thread
* [Bug c++/103832] vectorized code segfaults due to misaligned access
2021-12-26 11:58 [Bug c++/103832] New: vectorized code segfaults due to misaligned access joakim.rosqvist at gmail dot com
@ 2021-12-26 12:09 ` pinskia at gcc dot gnu.org
2021-12-27 18:05 ` joakim.rosqvist at gmail dot com
1 sibling, 0 replies; 3+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-12-26 12:09 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103832
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution|--- |INVALID
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
You are using the attribute aligned incorrectly.
aligned_float *data = static_cast<aligned_float *>(aligned_alloc(64,
8192*sizeof(float)));
float sum = 0.0f;
for (int i=1; i<8192; i++)
sum += data[i];
You are saying data+i are all 64byte aligned which is obviously not correct.
If you want to say data+0 is aligned at a 64byte boundary you should use
instead __builtin_assume_aligned .
https://gcc.gnu.org/onlinedocs/gcc-11.2.0/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005fassume_005faligned
^ permalink raw reply [flat|nested] 3+ messages in thread
* [Bug c++/103832] vectorized code segfaults due to misaligned access
2021-12-26 11:58 [Bug c++/103832] New: vectorized code segfaults due to misaligned access joakim.rosqvist at gmail dot com
2021-12-26 12:09 ` [Bug c++/103832] " pinskia at gcc dot gnu.org
@ 2021-12-27 18:05 ` joakim.rosqvist at gmail dot com
1 sibling, 0 replies; 3+ messages in thread
From: joakim.rosqvist at gmail dot com @ 2021-12-27 18:05 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103832
--- Comment #2 from Joakim Rosqvist <joakim.rosqvist at gmail dot com> ---
Ok, may I then suggest that the docs at
https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html#Common-Variable-Attributes
for the aligned attribute be augmented with a mention that if you
typedef float aligned_float __attribute__ ((aligned (64)));
and then make an array of aligned_float, then every single element of that
array will be assumed to have the specified alignment, which may not be what
one intended.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2021-12-27 18:05 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-26 11:58 [Bug c++/103832] New: vectorized code segfaults due to misaligned access joakim.rosqvist at gmail dot com
2021-12-26 12:09 ` [Bug c++/103832] " pinskia at gcc dot gnu.org
2021-12-27 18:05 ` joakim.rosqvist at gmail dot com
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).