From 1292e741ff9d9e71bde6f4e7aacc8ee442ee2cfc Mon Sep 17 00:00:00 2001 From: Ary Borenszweig Date: Fri, 17 Jan 2020 17:21:40 -0300 Subject: [PATCH] Compiler: check typeof dependencies before cleanup (#8695) --- spec/compiler/semantic/block_spec.cr | 11 +++++++++++ src/compiler/crystal/semantic/cleanup_transformer.cr | 5 ++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/spec/compiler/semantic/block_spec.cr b/spec/compiler/semantic/block_spec.cr index ff56dc1b08e0..8d51198aac10 100644 --- a/spec/compiler/semantic/block_spec.cr +++ b/spec/compiler/semantic/block_spec.cr @@ -1432,4 +1432,15 @@ describe "Block inference" do Node.new.sum )) { int32 } end + + it "doesn't crash on cleaning up typeof node without dependencies (#8669)" do + semantic(%( + def foo(&) + end + + foo do + typeof(bar) + end + )) + end end diff --git a/src/compiler/crystal/semantic/cleanup_transformer.cr b/src/compiler/crystal/semantic/cleanup_transformer.cr index 267cceb6b6d0..bff52a8cbecd 100644 --- a/src/compiler/crystal/semantic/cleanup_transformer.cr +++ b/src/compiler/crystal/semantic/cleanup_transformer.cr @@ -783,7 +783,10 @@ module Crystal node = super unless node.type? - node.unbind_from node.dependencies + if dependencies = node.dependencies? + node.unbind_from node.dependencies + end + node.bind_to node.expressions end