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