Hi Dehao, I suspect that your recent patch changing block handling has broken bootstrap with --enable-languages=go. I reduced the test case to this C++ code:
#include <string> std::string f(bool is_string, bool is_constant) { if (is_string) { std::string left_string; std::string right_string; if (is_constant) { return left_string + right_string; } } return ""; } When I compile that with current mainline with -O -g I get a crash (the backtrace is a local patch of mine): foo.cc: In function ‘std::string f(bool, bool)’: foo.cc:17:1: internal compiler error: tree check: expected block, have function_decl in change_scope, at final.c:1544 } ^ 0xe388bd tree_check_failed(tree_node const*, char const*, int, char const*, ...) ../../trunk/gcc/tree.c:8892 0x50c495 tree_check(tree_node*, char const*, int, char const*, tree_code) ../../trunk/gcc/tree.h:3659 0x9372a1 change_scope ../../trunk/gcc/final.c:1544 0x937646 reemit_insn_block_notes ../../trunk/gcc/final.c:1613 0x937822 final_start_function(rtx_def*, _IO_FILE*, int) ../../trunk/gcc/final.c:1670 0x93c6ad rest_of_handle_final ../../trunk/gcc/final.c:4291 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. At first glance the bug is that the block obtained from insn_scope (insn), called from reemit_insn_block_notes, has a block number of 0. That leads to the crash in insn_scope. It's interesting that it only occurs with -g. I'm not sure what that means. Could you take a look at this and see if it is due to your patch? Thanks. Ian