This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug other/67738] New: infinite recursion in libiberty/cp-demangle.c


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

            Bug ID: 67738
           Summary: infinite recursion in libiberty/cp-demangle.c
           Product: gcc
           Version: 6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: other
          Assignee: unassigned at gcc dot gnu.org
          Reporter: rschiele at gmail dot com
  Target Milestone: ---

Trying to demangle the symbol
_ZNK6Common15ConvertingRangeIN5boost12range_detail17transformed_rangeIZN1a1b1cEbEUljE_KSt6vectorIjSaIjEEEEEcvT_IS7_INS4_1dESaISF_EEEEv
causes an infinite recursion in libiberty/cp-demangle.c that finally leads to
SIGSEGV once the stack is exhausted.

This issue was introduced with

commit f89ffc3b24e78dd4c9706bc3502941cf08edd56d
Author: ccoutant <ccoutant@138bc75d-0d04-0410-961f-82ee72b054a4>
Date:   Fri Nov 22 22:25:49 2013 +0000

    Fix demangler to handle conversion operators correctly.

    libiberty/
        PR other/59195
        * cp-demangle.c (struct d_info_checkpoint): New struct.
        (struct d_print_info): Add current_template field.
        (d_operator_name): Set flag when processing a conversion
        operator.
        (cplus_demangle_type): When processing <template-args> for
        a conversion operator, backtrack if necessary.
        (d_expression_1): Renamed from d_expression.
        (d_expression): New wrapper around d_expression_1.
        (d_checkpoint): New function.
        (d_backtrack): New function.
        (d_print_init): Initialize current_template.
        (d_print_comp): Set current_template.
        (d_print_cast): Put current_template in scope for
        printing conversion operator name.
        (cplus_demangle_init_info): Initialize is_expression and
        is_conversion.
        * cp-demangle.h (struct d_info): Add is_expression and
        is_conversion fields.
        * testsuite/demangle-expected: New test cases.


    git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@205292
138bc75d-0d04-0410-961f-82ee72b054a4

Before that patch was applied this symbol resolved to:

Common::ConvertingRange<boost::range_detail::transformed_range<a::b::c(bool)::{lambda(unsigned
int)#1}, std::vector<unsigned int, std::allocator<unsigned int> > const>
>::operator a::b::c(bool)::{lambda(unsigned int)#1}<a::d, std::allocator<a::d>
><a::b::c(bool)::{lambda(unsigned int)#1}<a::d, std::allocator<a::d> > >()
const

The infinite recursion this is causing is:

[... recursion ongoing ...]
#32659 0x000000000040890a in d_print_comp (dpi=0x7fffffffb790, options=259,
dc=0x7fffffffc160)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5424
#32660 0x0000000000409397 in d_print_conversion (dpi=0x7fffffffb790,
options=259, dc=0x7fffffffc178)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5819
#32661 0x00000000004079fb in d_print_comp_inner (dpi=0x7fffffffb790,
options=259, dc=0x7fffffffc178)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5062
#32662 0x000000000040890a in d_print_comp (dpi=0x7fffffffb790, options=259,
dc=0x7fffffffc178)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5424
#32663 0x000000000040623b in d_print_comp_inner (dpi=0x7fffffffb790,
options=259, dc=0x7fffffffc190)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:4397
#32664 0x000000000040890a in d_print_comp (dpi=0x7fffffffb790, options=259,
dc=0x7fffffffc190)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5424
#32665 0x00000000004068ce in d_print_comp_inner (dpi=0x7fffffffb790,
options=259, dc=0x7fffffffc160)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:4593
#32666 0x000000000040890a in d_print_comp (dpi=0x7fffffffb790, options=259,
dc=0x7fffffffc160)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5424
#32667 0x0000000000409397 in d_print_conversion (dpi=0x7fffffffb790,
options=259, dc=0x7fffffffc178)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5819
#32668 0x00000000004079fb in d_print_comp_inner (dpi=0x7fffffffb790,
options=259, dc=0x7fffffffc178)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5062
#32669 0x000000000040890a in d_print_comp (dpi=0x7fffffffb790, options=259,
dc=0x7fffffffc178)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5424
#32670 0x000000000040623b in d_print_comp_inner (dpi=0x7fffffffb790,
options=259, dc=0x7fffffffc190)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:4397
#32671 0x000000000040890a in d_print_comp (dpi=0x7fffffffb790, options=259,
dc=0x7fffffffc190)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5424
#32672 0x00000000004068ce in d_print_comp_inner (dpi=0x7fffffffb790,
options=259, dc=0x7fffffffc160)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:4593
#32673 0x000000000040890a in d_print_comp (dpi=0x7fffffffb790, options=259,
dc=0x7fffffffc160)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5424
#32674 0x0000000000409397 in d_print_conversion (dpi=0x7fffffffb790,
options=259, dc=0x7fffffffc178)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5819
#32675 0x00000000004079fb in d_print_comp_inner (dpi=0x7fffffffb790,
options=259, dc=0x7fffffffc178)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5062
#32676 0x000000000040890a in d_print_comp (dpi=0x7fffffffb790, options=259,
dc=0x7fffffffc178)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5424
#32677 0x000000000040623b in d_print_comp_inner (dpi=0x7fffffffb790,
options=259, dc=0x7fffffffc190)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:4397
#32678 0x000000000040890a in d_print_comp (dpi=0x7fffffffb790, options=259,
dc=0x7fffffffc190)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5424
#32679 0x00000000004068ce in d_print_comp_inner (dpi=0x7fffffffb790,
options=259, dc=0x7fffffffc160)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:4593
#32680 0x000000000040890a in d_print_comp (dpi=0x7fffffffb790, options=259,
dc=0x7fffffffc160)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5424
#32681 0x0000000000409397 in d_print_conversion (dpi=0x7fffffffb790,
options=259, dc=0x7fffffffc178)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5819
#32682 0x00000000004079fb in d_print_comp_inner (dpi=0x7fffffffb790,
options=259, dc=0x7fffffffc178)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5062
#32683 0x000000000040890a in d_print_comp (dpi=0x7fffffffb790, options=259,
dc=0x7fffffffc178)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5424
#32684 0x000000000040623b in d_print_comp_inner (dpi=0x7fffffffb790,
options=259, dc=0x7fffffffc190)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:4397
#32685 0x000000000040890a in d_print_comp (dpi=0x7fffffffb790, options=259,
dc=0x7fffffffc190)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5424
#32686 0x0000000000407750 in d_print_comp_inner (dpi=0x7fffffffb790,
options=259, dc=0x7fffffffc220)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5006
#32687 0x000000000040890a in d_print_comp (dpi=0x7fffffffb790, options=259,
dc=0x7fffffffc220)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5424
#32688 0x00000000004067b3 in d_print_comp_inner (dpi=0x7fffffffb790,
options=259, dc=0x7fffffffc238)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:4557
#32689 0x000000000040890a in d_print_comp (dpi=0x7fffffffb790, options=259,
dc=0x7fffffffc238)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5424
#32690 0x0000000000407750 in d_print_comp_inner (dpi=0x7fffffffb790,
options=259, dc=0x7fffffffc250)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5006
#32691 0x000000000040890a in d_print_comp (dpi=0x7fffffffb790, options=259,
dc=0x7fffffffc250)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5424
#32692 0x00000000004077e9 in d_print_comp_inner (dpi=0x7fffffffb790,
options=259, dc=0x7fffffffc1d8)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5018
#32693 0x000000000040890a in d_print_comp (dpi=0x7fffffffb790, options=259,
dc=0x7fffffffc1d8)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5424
#32694 0x00000000004067b3 in d_print_comp_inner (dpi=0x7fffffffb790,
options=259, dc=0x7fffffffc268)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:4557
#32695 0x000000000040890a in d_print_comp (dpi=0x7fffffffb790, options=259,
dc=0x7fffffffc268)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5424
#32696 0x00000000004068ce in d_print_comp_inner (dpi=0x7fffffffb790,
options=259, dc=0x7fffffffc160)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:4593
#32697 0x000000000040890a in d_print_comp (dpi=0x7fffffffb790, options=259,
dc=0x7fffffffc160)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5424
#32698 0x0000000000409397 in d_print_conversion (dpi=0x7fffffffb790,
options=259, dc=0x7fffffffc178)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5819
#32699 0x00000000004079fb in d_print_comp_inner (dpi=0x7fffffffb790,
options=259, dc=0x7fffffffc178)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5062
#32700 0x000000000040890a in d_print_comp (dpi=0x7fffffffb790, options=259,
dc=0x7fffffffc178)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5424
#32701 0x000000000040623b in d_print_comp_inner (dpi=0x7fffffffb790,
options=259, dc=0x7fffffffc190)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:4397
#32702 0x000000000040890a in d_print_comp (dpi=0x7fffffffb790, options=259,
dc=0x7fffffffc190)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5424
#32703 0x0000000000406756 in d_print_comp_inner (dpi=0x7fffffffb790,
options=259, dc=0x7fffffffc298)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:4553
#32704 0x000000000040890a in d_print_comp (dpi=0x7fffffffb790, options=259,
dc=0x7fffffffc298)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5424
#32705 0x0000000000408fb1 in d_print_mod (dpi=0x7fffffffb790, options=259,
mod=0x7fffffffc298)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5637
#32706 0x0000000000408d8c in d_print_mod_list (dpi=0x7fffffffb790, options=259,
mods=0x7fffffffb530, suffix=0)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5566
#32707 0x00000000004090e3 in d_print_function_type (dpi=0x7fffffffb790,
options=259, dc=0x7fffffffc2e0, mods=0x7fffffffb530)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5707
#32708 0x0000000000407385 in d_print_comp_inner (dpi=0x7fffffffb790,
options=259, dc=0x7fffffffc2e0)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:4891
#32709 0x000000000040890a in d_print_comp (dpi=0x7fffffffb790, options=259,
dc=0x7fffffffc2e0)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5424
#32710 0x00000000004065b4 in d_print_comp_inner (dpi=0x7fffffffb790,
options=259, dc=0x7fffffffc2f8)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:4498
#32711 0x000000000040890a in d_print_comp (dpi=0x7fffffffb790, options=259,
dc=0x7fffffffc2f8)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5424
#32712 0x0000000000405ae7 in cplus_demangle_print_callback (options=259,
dc=0x7fffffffc2f8, callback=0x4054be <d_growable_string_callback_adapter>,
    opaque=0x7fffffffd820) at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:4119
#32713 0x0000000000409904 in d_demangle_callback (
    mangled=0x409e08
"_ZNK6Common15ConvertingRangeIN5boost12range_detail17transformed_rangeIZN1a1b1cEbEUljE_KSt6vectorIjSaIjEEEEEcvT_IS7_INS4_1dESaISF_EEEEv",
    options=259, callback=0x4054be <d_growable_string_callback_adapter>,
opaque=0x7fffffffd820)
    at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5963
#32714 0x0000000000409966 in d_demangle (
    mangled=0x409e08
"_ZNK6Common15ConvertingRangeIN5boost12range_detail17transformed_rangeIZN1a1b1cEbEUljE_KSt6vectorIjSaIjEEEEEcvT_IS7_INS4_1dESaISF_EEEEv",
    options=259, palc=0x7fffffffd878) at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:5984
#32715 0x00000000004099d0 in cplus_demangle_v3 (
    mangled=0x409e08
"_ZNK6Common15ConvertingRangeIN5boost12range_detail17transformed_rangeIZN1a1b1cEbEUljE_KSt6vectorIjSaIjEEEEEcvT_IS7_INS4_1dESaISF_EEEEv",
    options=259) at
/home/rschiele/l/pkg/builds/x86_64-pc-linux-gnu/gdb64/srcdir/src/libiberty/cp-demangle.c:6141

While it looks a bit similar to #61321 it should be noted that the patch that
is proposed to that one does not fix the issue we are seeing here. Actually the
above stack trace is already with this proposed patch applied on top of current
gcc trunk.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]