This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Compiler crash with block numbers

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>

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): In function ‘std::string f(bool, bool)’: 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*, ...)
0x50c495 tree_check(tree_node*, char const*, int, char const*, tree_code)
0x9372a1 change_scope
0x937646 reemit_insn_block_notes
0x937822 final_start_function(rtx_def*, _IO_FILE*, int)
0x93c6ad rest_of_handle_final
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <> 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?



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]