|
Boost Users : |
Subject: [Boost-users] [regex] segfault from construction
From: Andrew Troschinetz (ast_at_[hidden])
Date: 2008-11-25 09:28:52
Hello all,
I've got what I suspect is a relatively unique problem that's
resulting in a segfault whenever I try to construct a boost::regex.
First some machine information:
Red Hat Enterprise Linux Server release 5.1 (Tikanga)
Linux 2.6.18-53.el5, SMP, x86_64
gcc 4.1.2 20070626 (Red Hat 4.1.2-14)
boost 1.33.1-10
Here's a small example that shows the problem:
#include <boost/algorithm/string/regex.hpp>
#include <iostream>
#include <string>
using namespace std;
int main()
{
string input ("test test1 test2 test3");
string pattern ("\\btest\\b");
erase_regex (input, boost::regex (pattern));
cout << input << endl; // expecting " test1 test2 test3"
return 0;
}
Compile flags (and this is getting to the heart of the problem, I
think):
-g -m32 -malign-double -O3 -Wall -lboost_regex
Put all the above together in a bag, shake it up, and you get this
segfault:
0x08066beb in boost::re_detail::basic_regex_parser<char,
boost::regex_traits<char, boost::cpp_regex_traits<char> >
>::parse_extended (this=0xffde311c)
at /usr/include/boost/regex/v4/basic_regex_parser.hpp:235
235 switch*this->m_traits.syntax_type(*m_position))
(gdb) print m_position
$1 = 0x0
(gdb) bt
#0 0x08066beb in boost::re_detail::basic_regex_parser<char,
boost::regex_traits<char, boost::cpp_regex_traits<char> >
>::parse_extended
at /usr/include/boost/regex/v4/basic_regex_parser.hpp:235
#1 0xf7f9e364 in boost ::re_detail::basic_regex_parser<char,
boost::regex_traits<char, boost::cpp_regex_traits<char> > >::parse ()
from /usr/lib/libboost_regex.so.2
#2 0xf7fa0eba in boost::basic_regex<char, boost::regex_traits<char,
boost::cpp_regex_traits<char> > >::do_assign () from /usr/lib/
libboost_regex.so.2
#3 0x08050789 in main () at /usr/include/boost/regex/v4/
basic_regex.hpp:254
So the immediate culprit is a dereferencing-null problem.
Interestingly, the problem goes away at -O, -O1, and -O2. Or -O3 but
without -malign-double.
I was wondering if this is a known problem, and if anyone else who's
hand is forced to compile with -malign-double has seen this problem
and been able to work around it?
-- Andrew Troschinetz Applied Research Laboratories
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net