C++: SYMBOL_REF in eh node->entry->outer_context

Zack Weinberg zack@bitmover.com
Tue Aug 24 17:46:00 GMT 1999


This error came up while fixing all the bugs exposed by RTL type
checking.

./xgcc -B./ -DIN_GCC -W -Wall -g -O2 -I./include -fPIC \
       -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED \
       -I. -I../../../src/egcs/gcc -I../../../src/egcs/gcc/config \
       -I../../../src/egcs/include \
       -c ../../../src/egcs/gcc/cp/new1.cc -DL_op_newnt -o opnewnt.o
cp/new1.cc: In function `void * operator new(unsigned int, const nothrow_t &)':
cp/new1.cc:60: RTL check: expected elt 0 type 'i' or 'n', have 's' (rtx symbol_ref)
cp/new1.cc:60: Internal compiler error in `expand_fixup_region_end', at except.c:1547
Please submit a full bug report.
See <URL: http://www.gnu.org/software/gcc/faq.html#bugreport > for instructions.

(gdb) l
1542         correct region for the outer context. If we did, then the label for
1543         the outer context will be WITHIN the begin/end labels, 
1544         and we could get an infinte loop when it tried to rethrow, or just
1545         generally incorrect execution following a throw. */
1546
1547      dont_issue = ((INSN_UID (node->entry->outer_context) == 0) 
1548                && (ehstack.top->entry != node->entry));
1549
1550      ehstack.top->entry->outer_context = node->entry->outer_context;
1551
(gdb) p *node
$1 = {entry = 0x8519318, chain = 0x0}
(gdb) p *node->entry
$2 = {outer_context = 0x8514b44, exception_handler_label = 0x8518fbc, 
  finalization = 0x84e3c04, label_used = 0, false_label = 0x0, 
  rethrow_label = 0x8514b44}
(gdb) p node->entry->outer_context
$3 = 0x8514b44
(gdb) pr
(symbol_ref/s:SI ("*.LRTH61"))

I have no idea how we got a SYMBOL_REF there - on a quick skim, all
the code in except.c treats it as a CODE_LABEL.

zw


More information about the Gcc-bugs mailing list