|
Boost Users : |
Subject: [Boost-users] [xpressive] Stack overflow with small stacks without compiler optimization turned on
From: Ovanes Markarian (om_boost_at_[hidden])
Date: 2011-11-18 07:01:06
Hello *,
I currently ran into the issue with xpressive. One of our test suites
limits the stack usage to 32K and we have a stack overflow with over 600
function calls within xpressive. I stripped down our test case to the
minimally reproducible source:
#include <boost/xpressive/xpressive.hpp>
#include <iostream>
#include <string>
using namespace boost::xpressive;
namespace x=boost::xpressive;
using namespace std;
const sregex allowed_chars = x::set[alnum | (x::set= '_','-','+','.')];
sregex regex(string const& delim)
{
return
bos // begin of sequence followed by
>> !(s1=as_xpr(delim)) // zero or one delimiter (greedy)
>> (s2=*(allowed_chars|as_xpr(delim)))// any number of allowed characters
mixed with delim string
;
}
int main()
{
const string s = "Process.DiagBuffer";
string delim;
cout << "enter delim: ";
cin >> delim;
smatch what;
bool matched = regex_match(s, what, regex(delim));
const string suffix=what[s2];
cout << suffix << endl;
return 0;
}
Compilation Platform is Linux 32 bit.
Compiler call:
g++ -g -I"../software/boost_1_47_0" -o test main.cpp
For that source the stack has to be limited to 24K. You can set the stack
size and core dump file size like this:
$ ulimit -c 10000 -s 24
Consider using ulimit in the sub-shell, since stack size can't be increased
anymore.
If you are interested I can post the compiled executable and the core dump
file. When using optimization this works fine (it crashes with stack size
being less equal 12K), but the main question is: Is it really normal to
have more than 600 function calls in Debug mode?
Many thanks,
Ovanes
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