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

            Bug ID: 69510
           Summary: segfault in write_template_prefix while compiling C++
                    template code
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: vapier at gcc dot gnu.org
  Target Milestone: ---
              Host: x86_64-linux-gnu
            Target: x86_64-linux-gnu

Created attachment 37485
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=37485&action=edit
test.ii reduced testcase

the attached test case (by Philippe Marti) crashes g++ starting with 4.9 (and
including 5.3).  4.8 and older work.


$ g++ -c test.ii -v
Using built-in specs.
COLLECT_GCC=/usr/x86_64-pc-linux-gnu/gcc-bin/5.3.0/g++
Target: x86_64-pc-linux-gnu
Configured with: /var/tmp/portage/sys-devel/gcc-5.3.0/work/gcc-5.3.0/configure
--host=x86_64-pc-linux-gnu --build=x86_64-pc-linux-gnu --prefix=/usr
--bindir=/usr/x86_64-pc-linux-gnu/gcc-bin/5.3.0
--includedir=/usr/lib/gcc/x86_64-pc-linux-gnu/5.3.0/include
--datadir=/usr/share/gcc-data/x86_64-pc-linux-gnu/5.3.0
--mandir=/usr/share/gcc-data/x86_64-pc-linux-gnu/5.3.0/man
--infodir=/usr/share/gcc-data/x86_64-pc-linux-gnu/5.3.0/info
--with-gxx-include-dir=/usr/lib/gcc/x86_64-pc-linux-gnu/5.3.0/include/g++-v5
--with-python-dir=/share/gcc-data/x86_64-pc-linux-gnu/5.3.0/python
--enable-languages=c,c++,java,go,fortran --enable-obsolete --enable-secureplt
--disable-werror --with-system-zlib --enable-nls --without-included-gettext
--enable-checking=release --with-bugurl=https://bugs.gentoo.org/
--with-pkgversion='Gentoo 5.3.0 p1.0, pie-0.6.5' --enable-libstdcxx-time
--enable-shared --enable-threads=posix --enable-__cxa_atexit
--enable-clocale=gnu --enable-multilib --with-multilib-list=mx32,m32,m64
--disable-altivec --disable-fixed-point --with-abi=m64 --enable-targets=all
--enable-libgomp --disable-libmudflap --disable-libssp --disable-libcilkrts
--enable-lto --with-isl --disable-isl-version-check --enable-libsanitizer
Thread model: posix
gcc version 5.3.0 (Gentoo 5.3.0 p1.0, pie-0.6.5) 
COLLECT_GCC_OPTIONS='-v' '-c' '-o' 'test.o' '-shared-libgcc' '-mtune=generic'
'-march=x86-64'
 /usr/libexec/gcc/x86_64-pc-linux-gnu/5.3.0/cc1plus -fpreprocessed test.ii
-quiet -dumpbase test.ii -mtune=generic -march=x86-64 -auxbase-strip test.o
-version -fstack-protector-strong -o /tmp/ccxZdwTF.s
GNU C++ (Gentoo 5.3.0 p1.0, pie-0.6.5) version 5.3.0 (x86_64-pc-linux-gnu)
        compiled by GNU C version 5.3.0, GMP version 6.1.0, MPFR version
3.1.3-p4, MPC version 1.0.3
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
GNU C++ (Gentoo 5.3.0 p1.0, pie-0.6.5) version 5.3.0 (x86_64-pc-linux-gnu)
        compiled by GNU C version 5.3.0, GMP version 6.1.0, MPFR version
3.1.3-p4, MPC version 1.0.3
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 542af32c761d4d0725ea4eab192ccd39

test.ii: In instantiation of 'void Test<TID>::func(typename TClass<TID>::Type)
[with TClass = A; int TID = 1; typename TClass<TID>::Type = double]':

test.ii:2:54: internal compiler error: Segmentation fault
  public: template <template <int> class TClass> void func(typename
TClass<TID>::Type x) {};
                                                      ^
Please submit a full bug report,
with preprocessed source if appropriate.


here's the gdb output:
$ gdb --args g++ test.ii 
Reading symbols from /usr/bin/g++...(no debugging symbols found)...done.
(gdb) set follow-fork-mode child 
(gdb) r
Starting program: /usr/bin/g++ test.ii
process 4832 is executing new program:
/usr/x86_64-pc-linux-gnu/gcc-bin/5.3.0/x86_64-pc-linux-gnu-g++
[New process 4836]
process 4836 is executing new program:
/usr/libexec/gcc/x86_64-pc-linux-gnu/5.3.0/cc1plus

Program received signal SIGSEGV, Segmentation fault.
[Switching to process 4836]
write_template_prefix (node=node@entry=0x7ffff65a6be0) at
.../gcc-5.3.0/gcc/cp/mangle.c:1163
1163    .../gcc-5.3.0/gcc/cp/mangle.c: No such file or directory.
(gdb) bt
#0  write_template_prefix (node=node@entry=0x7ffff65a6be0) at
.../gcc-5.3.0/gcc/cp/mangle.c:1163
#1  0x00000000006e6f0c in write_prefix (node=0x7ffff65acb28) at
.../gcc-5.3.0/gcc/cp/mangle.c:1078
#2  0x00000000006e7171 in write_nested_name (decl=0x7ffff65a6c78) at
.../gcc-5.3.0/gcc/cp/mangle.c:1009
#3  0x00000000006e37c9 in write_type (type=0x7ffff65acbd0) at
.../gcc-5.3.0/gcc/cp/mangle.c:2017
#4  0x00000000006e5c72 in write_method_parms (parm_types=0x7ffff65a3a00,
method_p=<optimized out>, decl=<optimized out>) at
.../gcc-5.3.0/gcc/cp/mangle.c:2540
#5  0x00000000006e5d8d in write_bare_function_type (type=0x7ffff65acd20,
include_return_type_p=0x1, decl=<optimized out>) at
.../gcc-5.3.0/gcc/cp/mangle.c:2482
#6  0x00000000006e8acc in mangle_decl_string (decl=decl@entry=0x7ffff65ad510)
at .../gcc-5.3.0/gcc/cp/mangle.c:3449
#7  0x00000000006e8c37 in get_mangled_id (decl=0x7ffff65ad510) at
.../gcc-5.3.0/gcc/cp/mangle.c:3471
#8  mangle_decl (decl=0x7ffff65ad510) at .../gcc-5.3.0/gcc/cp/mangle.c:3527
#9  0x0000000000cac229 in decl_assembler_name (decl=0x7ffff65ad510) at
.../gcc-5.3.0/gcc/tree.c:697
#10 0x00000000007c3ef5 in symtab_node::get_comdat_group_id
(this=0x7ffff64497a8) at .../gcc-5.3.0/gcc/cgraph.h:207
#11 analyze_functions () at .../gcc-5.3.0/gcc/cgraphunit.c:973
#12 0x00000000007c4c26 in symbol_table::finalize_compilation_unit
(this=0x7ffff643c000) at .../gcc-5.3.0/gcc/cgraphunit.c:2452
#13 0x0000000000659383 in cp_write_global_declarations () at
.../gcc-5.3.0/gcc/cp/decl2.c:4840
#14 0x0000000000acd7a5 in compile_file () at .../gcc-5.3.0/gcc/toplev.c:613
#15 0x00000000005e7af0 in do_compile () at .../gcc-5.3.0/gcc/toplev.c:2067
#16 toplev::main (this=this@entry=0x7fffffffca00, argc=argc@entry=0xd,
argv=argv@entry=0x7fffffffcb08) at .../gcc-5.3.0/gcc/toplev.c:2165
#17 0x00000000005e885e in main (argc=0xd, argv=0x7fffffffcb08) at
.../gcc-5.3.0/gcc/main.c:39

Reply via email to