d: Fix ICE using non-local variable: internal compiler error: Segmentation fault
authorIain Buclaw <ibuclaw@gdcproject.org>
Tue, 21 Jul 2020 17:59:00 +0000 (19:59 +0200)
committerIain Buclaw <ibuclaw@gdcproject.org>
Mon, 3 Aug 2020 09:18:46 +0000 (11:18 +0200)
commit2b1c2a4bd9fb555dccde5d67d6da64547064e0e6
tree5da49e400890cbbb33d45ca68f9c47e323bf2baf
parent58cfec3a6e756b534b33787e51c52f5fc63b53ab
d: Fix ICE using non-local variable: internal compiler error: Segmentation fault

Moves no frame access error to own function, adding use of it for both
when get_framedecl() cannot find a path to the outer function frame, and
guarding get_decl_tree() from recursively calling itself.

gcc/d/ChangeLog:

PR d/96254
* d-codegen.cc (error_no_frame_access): New.
(get_frame_for_symbol): Use fdparent name in error message.
(get_framedecl): Replace call to assert with error.
* d-tree.h (error_no_frame_access): Declare.
* decl.cc (get_decl_tree): Detect recursion and error.

gcc/testsuite/ChangeLog:

PR d/96254
* gdc.dg/pr96254a.d: New test.
* gdc.dg/pr96254b.d: New test.
gcc/d/d-codegen.cc
gcc/d/d-tree.h
gcc/d/decl.cc
gcc/testsuite/gdc.dg/pr96254a.d [new file with mode: 0644]
gcc/testsuite/gdc.dg/pr96254b.d [new file with mode: 0644]