https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70925

            Bug ID: 70925
           Summary: Vectorized loop segfaults: read exceeds vector
                    boundary
           Product: gcc
           Version: 5.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: gentryx at gmx dot de
  Target Milestone: ---

I've stumbled across a case where may vectorize a loop and the resulting
assembly will cause a segfault when the read operation exceeds a vector
boundary. Only happens with -O3 and -march=native.

Tested compilers:

icpc 15.0.6:   works
clang++ 3.8.0: works
g++-4.7.4:     works
g++-4.8.5:     works
g++-4.9.3:     fails
g++-5.3.0:     fails

System: Gentoo Linux (observed on other systems, too), Intel Core i7-6700HQ

Command line: g++-5.3.0 test_lfa_lgd.ii -o test -O3  -fno-strict-aliasing
-fwrapv -std=c++11 && ./test

Output: Segmentation fault. GDB disassembly of the segfault site:

=> 0x0000000000406612 <+22514>: vmovapd (%r11,%rcx,1),%ymm0
   0x0000000000406618 <+22520>: add    $0x1,%rdi
   0x000000000040661c <+22524>: vmovups %xmm0,(%rsi,%rcx,1)
   0x0000000000406621 <+22529>: vextractf128 $0x1,%ymm0,0x10(%rsi,%rcx,1)
   0x0000000000406629 <+22537>: add    $0x20,%rcx
   0x000000000040662d <+22541>: cmp    %rdi,%r12
   0x0000000000406630 <+22544>: ja     0x406612 <main+22514>

Please let me know if I can provide any further details.

Reply via email to