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).