Created attachment 1377022 [details]
Preprocessed source produced by G++ for error reporting
Description of problem:
Invocation of G++ as 'g++ -std=c++1y -DONIX_MJ_VERSION=6 -DONIX_MN_VERSION=0 -DRUN_MODE_SIMULATOR=1 -D_GLIBCXX_USE_CXX11_ABI=0 -DMARKET_DATA_RX_TIMING_INSTRUMENTATION=1 -I../../External/include/zmq -I../../Signals -I../../External/include -I../../Lib/H5DataReader/ -I../../External/include/hdf5 -I../../External/include/protobuf -I../../External/include/Onix/ex-current -I../../External/include/Onix/md-current -I../. -O3 -g -Wall -isystem ../../External/include -c -fmessage-length=0 -fPIC -o Connectivity/Tmbuk/TmbukWlcjSnapshotListener.o ../Connectivity/Tmbuk/TmbukWlcjSnapshotListener.cpp
' causes G++ to abort with a segmentation fault
Version-Release number of selected component (if applicable):
g++ (GCC) 7.2.1 20170829 from Centos 7.4 devtoolset-7, installed using yum
100% consistent on my setup with the full source tree. Note however that it doesn't reproduce when running on the attached preprocessed source file.
Steps to Reproduce:
cc1plus segmentation fault. GDB transcript:
Thread 2.1 "cc1plus" received signal SIGSEGV, Segmentation fault.
[Switching to process 36594]
lookup_page_table_entry (p=0x100000004) at ../../gcc/ggc-page.c:635
635 while (table->high_bits != high_bits)
Missing separate debuginfos, use: debuginfo-install gmp-6.0.0-15.el7.x86_64 libmpc-1.0.1-3.el7.x86_64 mpfr-3.1.1-4.el7.x86_64
#0 lookup_page_table_entry (p=0x100000004) at ../../gcc/ggc-page.c:635
#1 0x0000000000675bdf in ggc_set_mark (p=p@entry=0x100000004) at ../../gcc/ggc-page.c:1532
#2 0x0000000000e99930 in gt_ggc_mx_lang_tree_node(void*) () at ./gt-cp-tree.h:133
#3 0x000000000060defc in gt_ggc_mx (x_r=...) at ./gt-cp-semantics.h:37
#4 0x000000000060c69f in gt_ggc_mx<deferred_access_check> (v=<optimized out>) at ../../gcc/vec.h:1110
#5 gt_ggc_mx_vec_deferred_access_check_va_gc_ (x_p=0x7fffd6cca870) at ./gt-cp-semantics.h:28
#6 0x00000000005ee683 in gt_ggc_mx_tree_check (x_p=0x7fffd6ca63d8) at ./gt-cp-parser.h:38
#7 0x00000000005ecfd0 in gt_ggc_mx<cp_token> (v=<optimized out>) at ../../gcc/vec.h:1110
#8 gt_ggc_mx_vec_cp_token_va_gc_ (x_p=0x7fffe51ce000) at ./gt-cp-parser.h:49
#9 0x00000000005ecef5 in gt_ggc_mx_cp_lexer (x_p=<optimized out>) at ./gt-cp-parser.h:76
#10 0x00000000005ece60 in gt_ggc_mx_cp_parser (x_p=0x7fffe2f7ed80) at ./gt-cp-parser.h:136
#11 0x000000000073f0c3 in ggc_mark_root_tab (rt=0x1501a20 <gt_ggc_r_gt_cp_parser_h>) at ../../gcc/ggc-common.c:77
#12 0x000000000073f21d in ggc_mark_roots () at ../../gcc/ggc-common.c:94
#13 0x00000000006751d9 in ggc_collect () at ../../gcc/ggc-page.c:2202
#14 0x0000000000f3e409 in cgraph_node::finalize_function(tree_node*, bool) () at ../../gcc/cgraphunit.c:480
#15 0x0000000000e8a106 in expand_or_defer_fn(tree_node*) () at ../../gcc/cp/semantics.c:4277
#16 0x0000000000e60b4f in cp_parser_function_definition_after_declarator(cp_parser*, bool) () at ../../gcc/cp/parser.c:26293
#17 0x0000000000e4e662 in cp_parser_function_definition_from_specifiers_and_declarator (declarator=0x2642be0, attributes=0x0, decl_specifiers=0x5ecfd0 <gt_ggc_mx_vec_cp_token_va_gc_(void*)+49>, parser=0x7fffe2f7ed80)
#18 cp_parser_init_declarator(cp_parser*, cp_decl_specifier_seq*, vec<deferred_access_check, va_gc, vl_embed>*, bool, bool, int, bool*, tree_node**, unsigned int*, tree_node**) () at ../../gcc/cp/parser.c:19182
#19 0x0000000000e4bad4 in cp_parser_simple_declaration(cp_parser*, bool, tree_node**) () at ../../gcc/cp/parser.c:12786
#20 0x0000000000e4b2d6 in cp_parser_block_declaration(cp_parser*, bool) () at ../../gcc/cp/parser.c:12611
#21 0x0000000000e4afba in cp_parser_declaration(cp_parser*) () at ../../gcc/cp/parser.c:12509
#22 0x0000000000e4accf in cp_parser_declaration_seq_opt (parser=parser@entry=0x7fffe2f7ed80) at ../../gcc/cp/parser.c:12385
#23 0x00000000013cdc45 in cp_parser_translation_unit (parser=0x7fffe2f7ed80) at ../../gcc/cp/parser.c:4368
#24 c_parse_file() () at ../../gcc/cp/parser.c:38454
#25 0x00000000013e5033 in c_common_parse_file() () at ../../gcc/c-family/c-opts.c:1107
#26 0x0000000001435c58 in compile_file() () at ../../gcc/toplev.c:470
#27 0x0000000000dd56d0 in do_compile () at ../../gcc/toplev.c:2006
#28 toplev::main(int, char**) () at ../../gcc/toplev.c:2142
#29 0x0000000000dd6fbb in main () at ../../gcc/main.c:39
#30 0x00007ffff6c32c05 in __libc_start_main (main=0xdd6f80 <main>, argc=51, ubp_av=0x7fffffffd9e8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffd9d8) at ../csu/libc-start.c:274
#31 0x00000000013c2d2f in _start ()
(gdb) p table
$1 = (page_table) 0x0
A clean compilation of the code without errors or warnings, like I get with G++ 5.3.1 from Devtoolset-4
The filenames in the command line and the preprocessed code have been slightly obfuscated since this is proprietary production code. I can supply an unobfuscated version as well as the core file privately.
Unfortunately, I can't reproduce it with the preprocessed source file even if I use --param ggc-min-expand=1 --param ggc-min-heapsize=0.
Would a core-file be helpful? If so, how can I upload it given that its size would be around 80MB?
Alternatively, how can I quickly get a list of all the include files that my source file would require so I can build a stripped-down version of my source-tree that does reproduce the issue?
I've tried to create a scaled-down version of the code that reproduces the issue, and it would still contain a sizable amount of proprietary code. I can only send it privately, pursuant to an understanding that it will not be made public.
(In reply to Yitzik Casapu from comment #4)
> I've tried to create a scaled-down version of the code that reproduces the
> issue, and it would still contain a sizable amount of proprietary code. I
> can only send it privately, pursuant to an understanding that it will not be
> made public.
Thanks. A core file wouldn't help much; what we need is a stand-alone test case that reproduces the issue. Is this scaled-down version of the code a pre-processed source file (i.e. doesn't need any additional headers that I don't have access to)? Anyway, you can send me the scaled-down version privately and I will try to reduce it to something minimal. (Even if I succeed in reducing it, I won't make it public unless you explicitly approve.)
Thanks Marek. I've sent you privately an archive with a source tree that can reproduce the issue + exact command-line. I've also tried to reproduce it with the preprocessed source file generated by g++, but could not. Please let me know that you have received the source archive and that you g++ also segfaults with it on your setup.
I've also seen the issue with G++ 7.2.0 on an Ubuntu 16.04 workstation, which suggests it's not very setup specific.
Unfortunately I couldn't reproduce the failure, so there's not much I can do, sorry.
If you ever find a different testcase that demonstrates the crash reliably, please reopen the BZ.
Reopening this since I can consistently reproduce it and provide access to the reproducer.
For those following this BZ, you may be able to work around this segfault by adding "--param ggc-min-expand=1 --param ggc-min-heapsize=0" to the compiler command line.
Adjusting the component. Not a problem with the container itself.
I wanted to check but couldn't reproduce as the ./install-deps.sh step fails. So moving to DTS 10.0 in the hope that maybe someone can try this with DTS 9.
(In reply to Marek Polacek from comment #33)
> I wanted to check but couldn't reproduce as the ./install-deps.sh step
> fails. So moving to DTS 10.0 in the hope that maybe someone can try this
> with DTS 9.
I'll be in a position to attempt this next week and will report results.