Public bug reported:

Test :
         
./boost1.55-1.55.0/bin.v2/libs/spirit/test/lex_lexertl2-p3.test/gcc-4.8/debug/phoenix_v3-on/lex_lexertl2-p3

SegFaults on 64 bits machines (AMD64 and PPC64).


The issue is that :
           CharT curr_char_ = (std::numeric_limits<CharT>::min)();
returns  
           0x80000000
when CharT is wchar_t .


And curr_char (0x80000000)  is then used in:
           ptr_[curr_char_]
which cores.


I think that some macros have been defined in /usr/include/c++/4.8.2/limits  
that work fine for "char" type but not for "wchar_t" type in 64bits world.

 min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min(char); }     returns  0 .
 min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min(wchar_t); }    returns  
0x80000000 .

So, that could be an issue in libC++ . Or not. I'm not an expert and I
need someone to look at this.

See PPC64/BE part for more details (values of registers and names of
files).


=========================================================

On AMD64 (Ubuntu 14.04):

gdb
./boost1.55-1.55.0/bin.v2/libs/spirit/test/lex_lexertl2-p3.test/gcc-4.8/debug/phoenix_v3-on/lex_lexertl2-p3

(gdb) break generator.hpp:564
Breakpoint 1 at 0x424945: generator.hpp:564. (2 locations)

(gdb) run
Starting program: 
/home/ubuntu/BOOST/boost1.55/boost1.55-1.55.0/bin.v2/libs/spirit/test/lex_lexertl2-p3.test/gcc-4.8/debug/phoenix_v3-on/lex_lexertl2-p3
 

Breakpoint 1, boost::lexer::basic_generator<char, 
boost::lexer::char_traits<char> >::fill_lookup (token_=..., lookup_=0x690030, 
index_=4) at ../boost/spirit/home/support/detail/lexer/generator.hpp:564
564     ../boost/spirit/home/support/detail/lexer/generator.hpp: No such file 
or directory.
(gdb) c
Continuing.

Breakpoint 1, boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> >::fill_lookup (token_=..., 
lookup_=0x6901b0, index_=4)
    at ../boost/spirit/home/support/detail/lexer/generator.hpp:564
564     in ../boost/spirit/home/support/detail/lexer/generator.hpp
(gdb) c
Continuing.

Program received signal SIGSEGV, Segmentation fault.
0x000000000042907b in boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> >::fill_lookup (token_=..., 
lookup_=0x6901b0, index_=4)
    at ../boost/spirit/home/support/detail/lexer/generator.hpp:571
571     in ../boost/spirit/home/support/detail/lexer/generator.hpp


(gdb) run
The program being debugged has been started already.
Start it from the beginning? (y or n) y

Starting program:
/home/ubuntu/BOOST/boost1.55/boost1.55-1.55.0/bin.v2/libs/spirit/test/lex_lexertl2-p3.test/gcc-4.8/debug/phoenix_v3-on/lex_lexertl2-p3

Breakpoint 1, boost::lexer::basic_generator<char, 
boost::lexer::char_traits<char> >::fill_lookup (token_=..., lookup_=0x690030, 
index_=4) at ../boost/spirit/home/support/detail/lexer/generator.hpp:564
564     in ../boost/spirit/home/support/detail/lexer/generator.hpp
(gdb) c
Continuing.

Breakpoint 1, boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> >::fill_lookup (token_=..., 
lookup_=0x6901b0, index_=4)
    at ../boost/spirit/home/support/detail/lexer/generator.hpp:564
564     in ../boost/spirit/home/support/detail/lexer/generator.hpp
(gdb) p curr_char_
$1 = 0 L'\000'
(gdb) si
std::numeric_limits<wchar_t>::min () at /usr/include/c++/4.8/limits:655
655           min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (wchar_t); }
(gdb) si
0x0000000000404b47      655           min() _GLIBCXX_USE_NOEXCEPT { return 
__glibcxx_min (wchar_t); }
(gdb) si
655           min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (wchar_t); }
(gdb) si
0x0000000000404b4f      655           min() _GLIBCXX_USE_NOEXCEPT { return 
__glibcxx_min (wchar_t); }
(gdb) display/i $pc
1: x/i $pc
=> 0x404b4f <std::numeric_limits<wchar_t>::min()+9>:    shl    $0x3,%eax
(gdb) si
0x0000000000404b52      655           min() _GLIBCXX_USE_NOEXCEPT { return 
__glibcxx_min (wchar_t); }
1: x/i $pc
=> 0x404b52 <std::numeric_limits<wchar_t>::min()+12>:   sub    $0x2,%eax
(gdb) si
0x0000000000404b55      655           min() _GLIBCXX_USE_NOEXCEPT { return 
__glibcxx_min (wchar_t); }
1: x/i $pc
=> 0x404b55 <std::numeric_limits<wchar_t>::min()+15>:   mov    $0x1,%edx
(gdb) si
0x0000000000404b5a      655           min() _GLIBCXX_USE_NOEXCEPT { return 
__glibcxx_min (wchar_t); }
1: x/i $pc
=> 0x404b5a <std::numeric_limits<wchar_t>::min()+20>:   mov    %eax,%ecx
(gdb) si
0x0000000000404b5c      655           min() _GLIBCXX_USE_NOEXCEPT { return 
__glibcxx_min (wchar_t); }
1: x/i $pc
=> 0x404b5c <std::numeric_limits<wchar_t>::min()+22>:   shl    %cl,%edx
(gdb) si
0x0000000000404b5e      655           min() _GLIBCXX_USE_NOEXCEPT { return 
__glibcxx_min (wchar_t); }
1: x/i $pc
=> 0x404b5e <std::numeric_limits<wchar_t>::min()+24>:   mov    %edx,%eax
(gdb) si
0x0000000000404b60      655           min() _GLIBCXX_USE_NOEXCEPT { return 
__glibcxx_min (wchar_t); }
1: x/i $pc
=> 0x404b60 <std::numeric_limits<wchar_t>::min()+26>:   sub    $0x1,%eax
(gdb) si
0x0000000000404b63      655           min() _GLIBCXX_USE_NOEXCEPT { return 
__glibcxx_min (wchar_t); }
1: x/i $pc
=> 0x404b63 <std::numeric_limits<wchar_t>::min()+29>:   lea    
(%rax,%rax,1),%edx
(gdb) si
0x0000000000404b66      655           min() _GLIBCXX_USE_NOEXCEPT { return 
__glibcxx_min (wchar_t); }
1: x/i $pc
=> 0x404b66 <std::numeric_limits<wchar_t>::min()+32>:   mov    $0xfffffffe,%eax
(gdb) si
0x0000000000404b6b      655           min() _GLIBCXX_USE_NOEXCEPT { return 
__glibcxx_min (wchar_t); }
1: x/i $pc
=> 0x404b6b <std::numeric_limits<wchar_t>::min()+37>:   sub    %edx,%eax
(gdb) si
0x0000000000404b6d      655           min() _GLIBCXX_USE_NOEXCEPT { return 
__glibcxx_min (wchar_t); }
1: x/i $pc
=> 0x404b6d <std::numeric_limits<wchar_t>::min()+39>:   pop    %rbp
(gdb) si
0x0000000000404b6e      655           min() _GLIBCXX_USE_NOEXCEPT { return 
__glibcxx_min (wchar_t); }
1: x/i $pc
=> 0x404b6e <std::numeric_limits<wchar_t>::min()+40>:   retq   
(gdb) si
0x0000000000429050 in boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> >::fill_lookup (token_=..., 
lookup_=0x6901b0, index_=4)
    at ../boost/spirit/home/support/detail/lexer/generator.hpp:564
564     ../boost/spirit/home/support/detail/lexer/generator.hpp: No such file 
or directory.
1: x/i $pc
=> 0x429050 <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned 
long)+119>:       mov    %eax,-0x2c(%rbp)
(gdb) info registers
rax            0x80000000       2147483648
rbx            0x690b60 6884192
rcx            0x1e     30
rdx            0x7ffffffe       2147483646
rsi            0x6901b0 6881712
rdi            0x7fffffffdc30   140737488346160
rbp            0x7fffffffdca0   0x7fffffffdca0
rsp            0x7fffffffdc50   0x7fffffffdc50
r8             0x1      1
r9             0x3      3
r10            0x7fffffffd890   140737488345232
r11            0x7ffff7682001   140737344184321
r12            0x692320 6890272
r13            0x1      1
r14            0x0      0
r15            0x6900c8 6881480
rip            0x429050 0x429050 <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned long)+119>
eflags         0x286    [ PF SF IF ]
cs             0x33     51
ss             0x2b     43
ds             0x0      0
es             0x0      0
fs             0x0      0
gs             0x0      0
(gdb) si
565     in ../boost/spirit/home/support/detail/lexer/generator.hpp
1: x/i $pc
=> 0x429053 <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned 
long)+122>:       movq   $0x0,-0x20(%rbp)


(gdb) print curr_char_
$2 = -2147483648 L'\x80000000'
(gdb) p/x curr_char_
$3 = 0x80000000
(gdb) si
567     in ../boost/spirit/home/support/detail/lexer/generator.hpp
1: x/i $pc
=> 0x42905b <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned 
long)+130>:       
    jmp    0x4290a0 <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned long)+199>
(gdb) si
567     in ../boost/spirit/home/support/detail/lexer/generator.hpp
1: x/i $pc
=> 0x4290a0 <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned 
long)+199>:       mov    -0x28(%rbp),%rax
(gdb) si
0x00000000004290a4      567     in 
../boost/spirit/home/support/detail/lexer/generator.hpp
1: x/i $pc
=> 0x4290a4 <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned 
long)+203>:       cmp    -0x18(%rbp),%rax
(gdb) si
0x00000000004290a8      567     in 
../boost/spirit/home/support/detail/lexer/generator.hpp
1: x/i $pc
=> 0x4290a8 <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned 
long)+207>:       
    jb     0x42905d <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned long)+132>
(gdb) si
569     in ../boost/spirit/home/support/detail/lexer/generator.hpp
1: x/i $pc
=> 0x42905d <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned 
long)+132>:       
    jmp    0x429087 <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned long)+174>
(gdb) si
569     in ../boost/spirit/home/support/detail/lexer/generator.hpp
1: x/i $pc
=> 0x429087 <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned 
long)+174>:       mov    -0x28(%rbp),%rax
(gdb) si
0x000000000042908b      569     in 
../boost/spirit/home/support/detail/lexer/generator.hpp
1: x/i $pc
=> 0x42908b <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned 
long)+178>:       mov    (%rax),%eax
(gdb) si
0x000000000042908d      569     in 
../boost/spirit/home/support/detail/lexer/generator.hpp
1: x/i $pc
=> 0x42908d <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned 
long)+180>:       cmp    -0x2c(%rbp),%eax
(gdb) si
0x0000000000429090      569     in 
../boost/spirit/home/support/detail/lexer/generator.hpp
1: x/i $pc
=> 0x429090 <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned 
long)+183>:       
    jg     0x42905f <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned long)+134>
(gdb) si
571     in ../boost/spirit/home/support/detail/lexer/generator.hpp
1: x/i $pc
=> 0x42905f <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned 
long)+134>:       mov    -0x2c(%rbp),%eax
(gdb) si
0x0000000000429062      571     in 
../boost/spirit/home/support/detail/lexer/generator.hpp
1: x/i $pc
=> 0x429062 <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned 
long)+137>:       cltq   
(gdb) si
0x0000000000429064      571     in 
../boost/spirit/home/support/detail/lexer/generator.hpp
1: x/i $pc
=> 0x429064 <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned 
long)+139>:       lea    0x0(,%rax,8),%rdx
(gdb) s

Program received signal SIGSEGV, Segmentation fault.
0x000000000042907b in boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> >::fill_lookup (token_=..., 
lookup_=0x6901b0, index_=4)
    at ../boost/spirit/home/support/detail/lexer/generator.hpp:571
571     in ../boost/spirit/home/support/detail/lexer/generator.hpp
1: x/i $pc
=> 0x42907b <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned 
long)+162>:       mov    %rdx,(%rax)
(gdb) info registers
rax            0x7ffbf6971010   140720150614032
rbx            0x690b60 6884192
rcx            0x1e     30
rdx            0xb      11
rsi            0x6901b0 6881712
rdi            0x7fffffffdc30   140737488346160
rbp            0x7fffffffdca0   0x7fffffffdca0
rsp            0x7fffffffdc50   0x7fffffffdc50
r8             0x1      1
r9             0x3      3
r10            0x7fffffffd890   140737488345232
r11            0x7ffff7682001   140737344184321
r12            0x692320 6890272
r13            0x1      1
r14            0x0      0
r15            0x6900c8 6881480
rip            0x42907b 0x42907b <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned long)+162>
eflags         0x10202  [ IF RF ]
cs             0x33     51
ss             0x2b     43
ds             0x0      0
es             0x0      0
fs             0x0      0
gs             0x0      0


======================================================================

On PPC64

boost/spirit/home/support/detail/lexer/generator.hpp :

static void fill_lookup (
        const string_token      &token_,
        size_t_vector           *lookup_,
        const std::size_t       index_)
    {
        const CharT *curr_      = token_._charset.c_str ();
        const CharT *chars_end_ = curr_ + token_._charset.size ();
        std::size_t *ptr_       = &lookup_->front ();
        const std::size_t max_ = sizeof (CharT) == 1 ?  num_chars : 
num_wchar_ts;

        if (token_._negated)
        {
===>        CharT curr_char_ = (std::numeric_limits<CharT>::min)();
            curr_char_ : 0x80000000


{
CharT :::::::

boost/format/format_class.hpp :
namespace boost {
    template<class Ch, class Tr, class Alloc>
    class basic_format 
    {
    public:
        typedef Ch  CharT;   // borland fails in operator% if we use Ch and Tr 
directly


boost/property_tree/detail/json_parser_read.hpp :
     struct context { typedef typename Ptree::key_type::value_type Ch;


boost/accumulators/numeric/functional.hpp :
    template<typename T>
    struct default_
    {
        typedef T value_type;
}


            std::size_t i_ = 0;

            while (curr_ < chars_end_)
            {
                while (*curr_ > curr_char_)
                {

===>            ptr_[static_cast<typename Traits::index_type> (curr_char_)] = 
index_ + dfa_offset;
                ptr_[0x80000000] :Core

                ++curr_char_;
                ++i_;
                }


/usr/include/c++/4.8.2/limits :

  template<>
    struct numeric_limits<char>
    {
      static _GLIBCXX_CONSTEXPR char min() _GLIBCXX_USE_NOEXCEPT { return 
__glibcxx_min(char); }


  template<>
    struct numeric_limits<wchar_t>
    {
      static _GLIBCXX_CONSTEXPR wchar_t min() _GLIBCXX_USE_NOEXCEPT { return 
__glibcxx_min (wchar_t); }


#define __glibcxx_signed(T)     ((T)(-1) < 0)

#define __glibcxx_min(T)        (__glibcxx_signed (T) ? -__glibcxx_max
(T) - 1 : (T)0)

#define __glibcxx_max(T)        (__glibcxx_signed (T) ? (((((T)1 <<
(__glibcxx_digits (T) - 1)) - 1) << 1) + 1) : ~(T)0)

#define __glibcxx_digits(T)     (sizeof(T) * __CHAR_BIT__ - __glibcxx_signed 
(T))
                                4 * 8 - 2


gdb
boost_1_55_0/bin.v2/libs/spirit/test/lex_lexertl2-p3.test/gcc-4.8.2/debug/phoenix_v3-on/lex_lexertl2-p3


break generator.hpp:564

(gdb) run

Breakpoint 5, boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> >::fill_lookup (token_=..., 
lookup_=0x100f11b0, index_=4)
    at ../boost/spirit/home/support/detail/lexer/generator.hpp:564
564                 CharT curr_char_ = (std::numeric_limits<CharT>::min)();
5: /x curr_char_ = 0x0

(gdb) s
std::numeric_limits<wchar_t>::min () at /usr/include/c++/4.8.2/limits:655
655           min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (wchar_t); }


(gdb) s
boost::lexer::basic_generator<wchar_t, boost::lexer::char_traits<wchar_t> 
>::fill_lookup (token_=..., lookup_=0x100f11b0, index_=4)
    at ../boost/spirit/home/support/detail/lexer/generator.hpp:565
565                 std::size_t i_ = 0;
5: /x curr_char_ = 0x80000000

(gdb) p/t 0x80000000
$15 = 10000000000000000000000000000000


==============================================================

(gdb) run

......................


Breakpoint 5, boost::lexer::basic_generator<char, 
boost::lexer::char_traits<char> >::fill_lookup (token_=..., lookup_=0x100f1030, 
index_=4)
    at ../boost/spirit/home/support/detail/lexer/generator.hpp:564
564                 CharT curr_char_ = (std::numeric_limits<CharT>::min)();
7: /x curr_char_ = 0x0
3: /x *curr_ = 0xa
2: /x curr_ = 0x100f1f18
1: /x curr_char_ = 0x0


(gdb) c
Continuing.

Breakpoint 5, boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> >::fill_lookup (token_=..., 
lookup_=0x100f11b0, index_=4)
    at ../boost/spirit/home/support/detail/lexer/generator.hpp:564
564                 CharT curr_char_ = (std::numeric_limits<CharT>::min)();
5: /x curr_char_ = 0x0

(gdb) s
std::numeric_limits<wchar_t>::min () at /usr/include/c++/4.8.2/limits:655
655           min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (wchar_t); }

=> 0x10005600 <std::numeric_limits<wchar_t>::min()+12>: li      r9,4
=> 0x10005604 <std::numeric_limits<wchar_t>::min()+16>: rlwinm  r9,r9,3,0,28
=> 0x10005608 <std::numeric_limits<wchar_t>::min()+20>: clrldi  r9,r9,32
=> 0x1000560c <std::numeric_limits<wchar_t>::min()+24>: addi    r9,r9,-2
=> 0x10005610 <std::numeric_limits<wchar_t>::min()+28>: clrldi  r9,r9,32
=> 0x10005614 <std::numeric_limits<wchar_t>::min()+32>: extsw   r9,r9
=> 0x10005618 <std::numeric_limits<wchar_t>::min()+36>: li      r10,1
=> 0x1000561c <std::numeric_limits<wchar_t>::min()+40>: slw     r9,r10,r9
=> 0x10005620 <std::numeric_limits<wchar_t>::min()+44>: extsw   r9,r9
=> 0x10005624 <std::numeric_limits<wchar_t>::min()+48>: addi    r9,r9,-1
=> 0x10005628 <std::numeric_limits<wchar_t>::min()+52>: extsw   r9,r9
=> 0x1000562c <std::numeric_limits<wchar_t>::min()+56>: rlwinm  r9,r9,1,0,30
=> 0x10005630 <std::numeric_limits<wchar_t>::min()+60>: extsw   r9,r9
=> 0x10005634 <std::numeric_limits<wchar_t>::min()+64>: subfic  r9,r9,-2
=> 0x10005638 <std::numeric_limits<wchar_t>::min()+68>: extsw   r9,r9
=> 0x1000563c <std::numeric_limits<wchar_t>::min()+72>: mr      r3,r9
=> 0x10005640 <std::numeric_limits<wchar_t>::min()+76>: addi    r1,r31,64
=> 0x10005644 <std::numeric_limits<wchar_t>::min()+80>: ld      r31,-8(r1)
=> 0x10005648 <std::numeric_limits<wchar_t>::min()+84>: blr
=> 0x1004097c <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned 
long)+156>:     mr      r9,r3
=> 0x10040984 <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned 
long)+164>:     li      r9,0


(gdb) 
0x0000000010040978 in boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> >::fill_lookup (token_=..., 
lookup_=0x100f11b0, index_=4)
    at ../boost/spirit/home/support/detail/lexer/generator.hpp:564
564                 CharT curr_char_ = (std::numeric_limits<CharT>::min)();
8: x/i $pc
=> 0x10040978 <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned 
long)+152>:     nop
5: /x curr_char_ = 0x0

(gdb) 
0x000000001004097c      564                 CharT curr_char_ = 
(std::numeric_limits<CharT>::min)();
8: x/i $pc
=> 0x1004097c <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned 
long)+156>:     mr      r9,r3
5: /x curr_char_ = 0x0

(gdb) n
565                 std::size_t i_ = 0;
8: x/i $pc
=> 0x10040984 <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned 
long)+164>:     li      r9,0
5: /x curr_char_ = 0x80000000

(gdb) info registers
r3             0xffffffff80000000       18446744071562067968
r9             0xffffffff80000000       18446744071562067968
r10            0x1      1


r9             0x1      1
=> 0x10005600 <std::numeric_limits<wchar_t>::min()+12>: li      r9,4
r9             0x4      4
=> 0x10005604 <std::numeric_limits<wchar_t>::min()+16>: rlwinm  r9,r9,3,0,28
r9             0x20     32
=> 0x10005608 <std::numeric_limits<wchar_t>::min()+20>: clrldi  r9,r9,32
r9             0x20     32
=> 0x1000560c <std::numeric_limits<wchar_t>::min()+24>: addi    r9,r9,-2
r9             0x1e     30
=> 0x10005610 <std::numeric_limits<wchar_t>::min()+28>: clrldi  r9,r9,32
r9             0x1e     30
=> 0x10005614 <std::numeric_limits<wchar_t>::min()+32>: extsw   r9,r9
r9             0x1e     30
r10            0x1fffff750010   35184362979344
=> 0x10005618 <std::numeric_limits<wchar_t>::min()+36>: li      r10,1
r9             0x1e     30
r10            0x1      1
=> 0x1000561c <std::numeric_limits<wchar_t>::min()+40>: slw     r9,r10,r9
r9             0x40000000       1073741824
r10            0x1      1
=> 0x10005620 <std::numeric_limits<wchar_t>::min()+44>: extsw   r9,r9
r9             0x40000000       1073741824
=> 0x10005624 <std::numeric_limits<wchar_t>::min()+48>: addi    r9,r9,-1
r9             0x3fffffff       1073741823
=> 0x10005628 <std::numeric_limits<wchar_t>::min()+52>: extsw   r9,r9
r9             0x3fffffff       1073741823
=> 0x1000562c <std::numeric_limits<wchar_t>::min()+56>: rlwinm  r9,r9,1,0,30
r9             0x7ffffffe       2147483646
=> 0x10005630 <std::numeric_limits<wchar_t>::min()+60>: extsw   r9,r9
r9             0x7ffffffe       2147483646
=> 0x10005634 <std::numeric_limits<wchar_t>::min()+64>: subfic  r9,r9,-2
r9             0xffffffff80000000       18446744071562067968
=> 0x10005638 <std::numeric_limits<wchar_t>::min()+68>: extsw   r9,r9
r3             0x1fffff750010   35184362979344
r9             0xffffffff80000000       18446744071562067968
=> 0x1000563c <std::numeric_limits<wchar_t>::min()+72>: mr      r3,r9
r1             0x3fffffffe3f0   70368744170480
r31            0x3fffffffe3f0   70368744170480
=> 0x10005640 <std::numeric_limits<wchar_t>::min()+76>: addi    r1,r31,64
r1             0x3fffffffe430   70368744170544
r31            0x3fffffffe3f0   70368744170480
=> 0x10005644 <std::numeric_limits<wchar_t>::min()+80>: ld      r31,-8(r1)
=> 0x10005648 <std::numeric_limits<wchar_t>::min()+84>: blr
0x0000000010040978 in boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> >::fill_lookup (token_=..., 
lookup_=0x100f11b0, index_=4)
    at ../boost/spirit/home/support/detail/lexer/generator.hpp:564
564                 CharT curr_char_ = (std::numeric_limits<CharT>::min)();
=> 0x10040978 <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned 
long)+152>:     nop
5: /x curr_char_ = 0x0
(gdb) info registers
r3             0xffffffff80000000       18446744071562067968
r9             0xffffffff80000000       18446744071562067968
(gdb) p ~0xffffffff80000000
$17 = 2147483647
(gdb) p/x ~0xffffffff80000000
$18 = 0x7fffffff
=> 0x1004097c <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned 
long)+156>:     mr      r9,r3
5: /x curr_char_ = 0x0
r3             0xffffffff80000000       18446744071562067968
r9             0xffffffff80000000       18446744071562067968
r31            0x3fffffffe430   70368744170544
=> 0x10040980 <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned 
long)+160>:     stw     r9,120(r31)
5: /x curr_char_ = 0x0
(gdb) si
565                 std::size_t i_ = 0;
8: x/i $pc
=> 0x10040984 <boost::lexer::basic_generator<wchar_t, 
boost::lexer::char_traits<wchar_t> 
>::fill_lookup(boost::lexer::basic_string_token<wchar_t> const&, 
std::vector<unsigned long, std::allocator<unsigned long> >*, unsigned 
long)+164>:     li      r9,0
6: /x curr_char_ = 0x80000000
5: /x curr_char_ = 0x80000000
4: /x curr_char_ = 0x80000000
(gdb) p/x ~0x80000000
$19 = 0x7fffffff

** Affects: boost1.55 (Ubuntu)
     Importance: Undecided
         Status: New

** Package changed: boost1.54 (Ubuntu) => boost1.55 (Ubuntu)

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1282140

Title:
  core on 64bit arch in spirit ... lex_lexertl2-p3 test

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/boost1.55/+bug/1282140/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to