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

            Bug ID: 80236
           Summary: ARM NEON: Crash in std::map
           Product: gcc
           Version: 6.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: d...@dominik-schmidt.de
  Target Milestone: ---

Created attachment 41065
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=41065&action=edit
part 1 of minimal example

Hey,

we are facing a crash when compiling the attached cpp files with:

`arm-oe-linux-gnueabi-g++   -march=armv7ve -marm -mfpu=neon-vfpv4 
-mfloat-abi=hard -mcpu=cortex-a7
--sysroot=/home/build/openembedded_sdk/tmp/sysroots/raspberrypi3 -O0 ../bar.cpp
../main.cpp  -o crashTest`
The crash only happens with optimizations disabled, it already doesn't happen 
anymore with `-O1`.
Also we could not trigger the faulty behavior in a single file, so this example
is really the bare minimum we could find.

gcc is installed from openembedded standard repository in version 6.3.0. Full
`--version --verbose` output is provided via attachments.
We could also reproduce this for another ARM target with GCC 5.4. I'm currently
lacking more information on that myself, but I will try to provide it later on.

The bt for 6.3 looks like this:
(gdb) run
Starting program: /tmp/crashTest 

Program received signal SIGSEGV, Segmentation fault.
0x000121bc in void __gnu_cxx::new_allocator<std::_Rb_tree_node<std::pair<int
const, double> > >::construct<std::pair<int const, double>, std::pair<int
const, double> const&>(std::pair<int const, double>*, std::pair<int const,
double> const&)
    ()
(gdb) bt
#0  0x000121bc in void
__gnu_cxx::new_allocator<std::_Rb_tree_node<std::pair<int const, double> >
>::construct<std::pair<int const, double>, std::pair<int const, double>
const&>(std::pair<int const, double>*, std::pair<int const, double> const&) ()
#1  0x000120e0 in void
std::allocator_traits<std::allocator<std::_Rb_tree_node<std::pair<int const,
double> > > >::construct<std::pair<int const, double>, std::pair<int const,
double> const&>(std::allocator<std::_Rb_tree_node<std::pair<int const, double>
> >&, std::pair<int const, double>*, std::pair<int const, double> const&) ()
#2  0x00011ffc in void std::_Rb_tree<int, std::pair<int const, double>,
std::_Select1st<std::pair<int const, double> >, std::less<int>,
std::allocator<std::pair<int const, double> >
>::_M_construct_node<std::pair<int const, double>
const&>(std::_Rb_tree_node<std::pair<int const, double> >*, std::pair<int
const, double> const&) ()
#3  0x00011df0 in std::_Rb_tree_node<std::pair<int const, double> >*
std::_Rb_tree<int, std::pair<int const, double>, std::_Select1st<std::pair<int
const, double> >, std::less<int>, std::allocator<std::pair<int const, double> >
>::_M_create_node<std::pair<int const, double> const&>(std::pair<int const,
double> const&) ()
#4  0x00011c0c in std::_Rb_tree_node<std::pair<int const, double> >*
std::_Rb_tree<int, std::pair<int const, double>, std::_Select1st<std::pair<int
const, double> >, std::less<int>, std::allocator<std::pair<int const, double> >
>::_Alloc_node::operator()<std::pair<int const, double> const&>(std::pair<int
const, double> const&) const ()
#5  0x00011728 in std::_Rb_tree_iterator<std::pair<int const, double> >
std::_Rb_tree<int, std::pair<int const, double>, std::_Select1st<std::pair<int
const, double> >, std::less<int>, std::allocator<std::pair<int const, double> >
>::_M_insert_<std::pair<int const, double> const&, std::_Rb_tree<int,
std::pair<int const, double>, std::_Select1st<std::pair<int const, double> >,
std::less<int>, std::allocator<std::pair<int const, double> >
>::_Alloc_node>(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*,
std::pair<int const, double> const&, std::_Rb_tree<int, std::pair<int const,
double>, std::_Select1st<std::pair<int const, double> >, std::less<int>,
std::allocator<std::pair<int const, double> > >::_Alloc_node&) ()
#6  0x00010f7c in std::_Rb_tree_iterator<std::pair<int const, double> >
std::_Rb_tree<int, std::pair<int const, double>, std::_Select1st<std::pair<int
const, double> >, std::less<int>, std::allocator<std::pair<int const, double> >
>::_M_insert_unique_<std::pair<int const, double> const&, std::_Rb_tree<int,
std::pair<int const, double>, std::_Select1st<std::pair<int const, double> >,
std::less<int>, std::allocator<std::pair<int const, double> >
>::_Alloc_node>(std::_Rb_tree_const_iterator<std::pair<int const, double> >,
std::pair<int const, double> const&, std::_Rb_tree<int, std::pair<int const,
double>, std::_Select1st<std::pair<int const, double> >, std::less<int>,
std::allocator<std::pair<int const, double> > >::_Alloc_node&) ()
#7  0x00010c8c in void std::_Rb_tree<int, std::pair<int const, double>,
std::_Select1st<std::pair<int const, double> >, std::less<int>,
std::allocator<std::pair<int const, double> > >::_M_insert_unique<std::pair<int
const, double> const*>(std::pair<int const, double> const*, std::pair<int
const, double> const*) ()
#8  0x00010a90 in std::map<int, double, std::less<int>,
std::allocator<std::pair<int const, double> >
>::map(std::initializer_list<std::pair<int const, double> >, std::less<int>
const&, std::allocator<std::pair<int const, double> > const&) ()
#9  0x0001227c in main ()

Reply via email to