https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69212
Bug ID: 69212 Summary: g++ ICE (segfault) at -O3 on x86_64-linux-gnu in fsm_find_control_statement_thread_paths Product: gcc Version: 6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: helloqirun at gmail dot com Target Milestone: --- The following code causes an ICE when compiled with the current g++ trunk at -O3 on x86_64-linux-gnu in both 32-bit and 64-bit modes. $ g++-trunk -v Using built-in specs. COLLECT_GCC=g++-trunk COLLECT_LTO_WRAPPER=/home/absozero/trunk/root-gcc/libexec/gcc/x86_64-pc-linux-gnu/6.0.0/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: ../gcc/configure --prefix=/home/absozero/trunk/root-gcc --enable-languages=c,c++ --disable-werror --enable-multilib Thread model: posix gcc version 6.0.0 20160109 (experimental) [trunk revision 232190] (GCC) $ g++-trunk -c -O3 abc.cc abc.cc: In function ?void fn2(int)?: abc.cc:10:19: error: unknown register name ?? in ?asm? asm("" : : : ""); ^ abc.cc:10:19: error: unknown register name ?? in ?asm? asm("" : : : ""); ^ abc.cc:10:19: error: unknown register name ?? in ?asm? asm("" : : : ""); ^ abc.cc:10:19: error: unknown register name ?? in ?asm? asm("" : : : ""); ^ abc.cc:10:19: error: unknown register name ?? in ?asm? asm("" : : : ""); ^ abc.cc:10:19: error: unknown register name ?? in ?asm? asm("" : : : ""); ^ abc.cc:10:19: error: unknown register name ?? in ?asm? asm("" : : : ""); ^ abc.cc:10:19: error: unknown register name ?? in ?asm? asm("" : : : ""); ^ abc.cc:10:19: error: unknown register name ?? in ?asm? asm("" : : : ""); ^ abc.cc: In function ?void fn2(int)?: abc.cc:4:6: internal compiler error: Segmentation fault void fn2(int p1) { ^~~ 0xd04cdf crash_signal ../../gcc/gcc/toplev.c:334 0x14549b5 fsm_find_control_statement_thread_paths ../../gcc/gcc/tree-ssa-threadbackward.c:102 0x1455be4 find_jump_threads_backwards(edge_def*) ../../gcc/gcc/tree-ssa-threadbackward.c:382 0xeec0b4 thread_across_edge(gcond*, edge_def*, bool, const_and_copies*, avail_exprs_stack*, tree_node* (*)(gimple*, gimple*, avail_exprs_stack*)) ../../gcc/gcc/tree-ssa-threadedge.c:1027 0xe25a37 dom_opt_dom_walker::thread_across_edge(edge_def*) ../../gcc/gcc/tree-ssa-dom.c:945 0xe25c79 dom_opt_dom_walker::after_dom_children(basic_block_def*) ../../gcc/gcc/tree-ssa-dom.c:1396 0x1385777 dom_walker::walk(basic_block_def*) ../../gcc/gcc/domwalk.c:307 0xe280a8 execute ../../gcc/gcc/tree-ssa-dom.c:613 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <http://gcc.gnu.org/bugs.html> for instructions. ------------- $ cat abc.cc double a; int b; void fn1(); void fn2(int p1) { l: b = a; if (p1) if (a) goto l; asm("" : : : ""); fn2(1); fn1(); }