--- struct map(alias fun) { @property run() { } } struct Task(Args) { Args _args; } template reduce(functions...) { auto reduce(Args)(Args args) { alias RTask = Task!(typeof(args)); auto task = RTask(); } } void main() { immutable delta = 1; reduce!"a + b"(map!({ immutable x = delta; })()); }
The master branch has been updated by Iain Buclaw <ibuclaw@gcc.gnu.org>: https://gcc.gnu.org/g:2b1c2a4bd9fb555dccde5d67d6da64547064e0e6 commit r11-2497-g2b1c2a4bd9fb555dccde5d67d6da64547064e0e6 Author: Iain Buclaw <ibuclaw@gdcproject.org> Date: Tue Jul 21 19:59:00 2020 +0200 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.
The releases/gcc-10 branch has been updated by Iain Buclaw <ibuclaw@gcc.gnu.org>: https://gcc.gnu.org/g:a5d07caca15958980ae9cc4570a784f8b1a43403 commit r10-8647-ga5d07caca15958980ae9cc4570a784f8b1a43403 Author: Iain Buclaw <ibuclaw@gdcproject.org> Date: Tue Jul 21 19:59:00 2020 +0200 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. (cherry picked from commit 2b1c2a4bd9fb555dccde5d67d6da64547064e0e6)
Done.