Sure, I'll look into this problem today. Thanks, Dehao
On Fri, Sep 21, 2012 at 2:25 AM, Ian Lance Taylor <i...@google.com> wrote: > 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