<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - segmentation fault when using custom reduction in omp"
   href="https://bugs.llvm.org/show_bug.cgi?id=44134">44134</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>segmentation fault when using custom reduction in omp
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>OpenMP
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>unspecified
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Linux
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>enhancement
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>Clang Compiler Support
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedclangbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>steffen.seckler@tum.de
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>When using a custom reduction on an std::map in an omp parallel for, the
program compiles fine. I do, however, get a segmentation fault.

compilation via:
clang++-9 -fopenmp -std=c++17 test.cpp && ./a.out

clang++-9 --version:
clang version 9.0.1-+2019110812332108004e858e4ac00-1~exp1~20191108215024.72


both compiling and running with g++-9 (with and without address sanitizer) and
icc (19.0.5.281) work fine.



compiling clang with -fsanitize=address reveals:

AddressSanitizerAddressSanitizerAddressSanitizer:DEADLYSIGNAL
:DEADLYSIGNAL
AddressSanitizer=================================================================
:DEADLYSIGNAL
==28717==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000105 (pc
0x0000004cdab3 bp 0x7fa52f2f3910 sp 0x7fa52f2f3880 T5)
==28717==The signal is caused by a READ memory access.
:DEADLYSIGNAL
==28717==Hint: address points to the zero page.
    #0 0x4cdab2 in std::_Rb_tree<unsigned long, std::pair<unsigned long const,
double>, std::_Select1st<std::pair<unsigned long const, double> >,
std::less<unsigned long>, std::allocator<std::pair<unsigned long const, double>
<span class="quote">> >::_Reuse_or_alloc_node::_Reuse_or_alloc_node(std::_Rb_tree<unsigned long,</span >
std::pair<unsigned long const, double>, std::_Select1st<std::pair<unsigned long
const, double> >, std::less<unsigned long>, std::allocator<std::pair<unsigned
long const, double> > >&)
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_tree.h
    #1 0x4cd722 in std::_Rb_tree<unsigned long, std::pair<unsigned long const,
double>, std::_Select1st<std::pair<unsigned long const, double> >,
std::less<unsigned long>, std::allocator<std::pair<unsigned long const, double>
<span class="quote">> >::operator=(std::_Rb_tree<unsigned long, std::pair<unsigned long const,</span >
double>, std::_Select1st<std::pair<unsigned long const, double> >,
std::less<unsigned long>, std::allocator<std::pair<unsigned long const, double>
<span class="quote">> > const&)</span >
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_tree.h:1779:25
    #2 0x4c9693 in std::map<unsigned long, double, std::less<unsigned long>,
std::allocator<std::pair<unsigned long const, double> >
<span class="quote">>::operator=(std::map<unsigned long, double, std::less<unsigned long>,</span >
std::allocator<std::pair<unsigned long const, double> > > const&)
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_map.h:317:37
    #3 0x4c78bc in .omp_initializer.
/work/seckler/Documents/AutoPas/src/autopas/test.cpp:17:24
    #4 0x4c723e in .omp_outlined._debug__
/work/seckler/Documents/AutoPas/src/autopas/test.cpp:28:45
    #5 0x4c797c in .omp_outlined.
/work/seckler/Documents/AutoPas/src/autopas/test.cpp:29:3
    #6 0x7fa535cfd402 in __kmp_invoke_microtask
(/usr/lib/x86_64-linux-gnu/libomp.so.5+0xaa402)
    #7 0x7fa535c96c54  (/usr/lib/x86_64-linux-gnu/libomp.so.5+0x43c54)
    #8 0x7fa535c95821  (/usr/lib/x86_64-linux-gnu/libomp.so.5+0x42821)
    #9 0x7fa535ce9a80  (/usr/lib/x86_64-linux-gnu/libomp.so.5+0x96a80)
    #10 0x7fa5351dc6da in start_thread
(/lib/x86_64-linux-gnu/libpthread.so.0+0x76da)
    #11 0x7fa5348e188e in clone
/build/glibc-OTsEL5/glibc-2.27/misc/../sysdeps/unix/sysv/linux/x86_64/clone.S:95

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_tree.h
in std::_Rb_tree<unsigned long, std::pair<unsigned long const, double>,
std::_Select1st<std::pair<unsigned long const, double> >, std::less<unsigned
long>, std::allocator<std::pair<unsigned long const, double> >
<span class="quote">>::_Reuse_or_alloc_node::_Reuse_or_alloc_node(std::_Rb_tree<unsigned long,</span >
std::pair<unsigned long const, double>, std::_Select1st<std::pair<unsigned long
const, double> >, std::less<unsigned long>, std::allocator<std::pair<unsigned
long const, double> > >&)
Thread T5 created by T0 here:
    #0 0x47e2ea in pthread_create
(/work/seckler/Documents/AutoPas/src/autopas/a.out+0x47e2ea)
    #1 0x7fa535ce9130  (/usr/lib/x86_64-linux-gnu/libomp.so.5+0x96130)

==28717==ABORTING</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>