Ran in to this bug. I'm having a hard time actually pin pointing what code causes this crash
Bug: `yield e` at /usr/local/Cellar/crystal-lang/HEAD/src/enumerable.cr:796:28 has no type
[4404476555] *raise<String>:NoReturn +139
[4404887422] *Crystal::ASTNode+@Crystal::ASTNode#type<Crystal::ASTNode+>:Crystal::Type+ +510
[4408016851] *Crystal::CodeGenVisitor#codegen_cond<Crystal::CodeGenVisitor, Crystal::ASTNode+>:LLVM::Value +35
[4407937580] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::ASTNode+, Crystal::CodeGenVisitor>:Nil +12092
[4407935767] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::ASTNode+, Crystal::CodeGenVisitor>:Nil +10279
[4407935767] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::ASTNode+, Crystal::CodeGenVisitor>:Nil +10279
[4407926893] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::ASTNode+, Crystal::CodeGenVisitor>:Nil +1405
[4407938151] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::ASTNode+, Crystal::CodeGenVisitor>:Nil +12663
[4407926893] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::ASTNode+, Crystal::CodeGenVisitor>:Nil +1405
[4408036563] *Crystal::CodeGenVisitor#visit<Crystal::CodeGenVisitor, Crystal::Call>:Bool +3059
[4407926590] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::ASTNode+, Crystal::CodeGenVisitor>:Nil +1102
[4408036563] *Crystal::CodeGenVisitor#visit<Crystal::CodeGenVisitor, Crystal::Call>:Bool +3059
[4407926590] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::ASTNode+, Crystal::CodeGenVisitor>:Nil +1102
[4407926893] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::ASTNode+, Crystal::CodeGenVisitor>:Nil +1405
[4408036563] *Crystal::CodeGenVisitor#visit<Crystal::CodeGenVisitor, Crystal::Call>:Bool +3059
[4407926590] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::ASTNode+, Crystal::CodeGenVisitor>:Nil +1102
[4408052755] *Crystal::CodeGenVisitor#prepare_call_args_non_external<Crystal::CodeGenVisitor, Crystal::Call, Crystal::Def+, Crystal::Type+>:{Array(LLVM::Value), Bool} +211
[4408033981] *Crystal::CodeGenVisitor#visit<Crystal::CodeGenVisitor, Crystal::Call>:Bool +477
[4407926590] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::ASTNode+, Crystal::CodeGenVisitor>:Nil +1102
[4408052755] *Crystal::CodeGenVisitor#prepare_call_args_non_external<Crystal::CodeGenVisitor, Crystal::Call, Crystal::Def+, Crystal::Type+>:{Array(LLVM::Value), Bool} +211
[4408033981] *Crystal::CodeGenVisitor#visit<Crystal::CodeGenVisitor, Crystal::Call>:Bool +477
[4407926590] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::ASTNode+, Crystal::CodeGenVisitor>:Nil +1102
[4408014728] *Crystal::CodeGenVisitor#visit<Crystal::CodeGenVisitor, Crystal::Assign>:(Nil | Bool) +344
[4407927721] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::ASTNode+, Crystal::CodeGenVisitor>:Nil +2233
[4407926893] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::ASTNode+, Crystal::CodeGenVisitor>:Nil +1405
[4408036563] *Crystal::CodeGenVisitor#visit<Crystal::CodeGenVisitor, Crystal::Call>:Bool +3059
[4407926590] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::ASTNode+, Crystal::CodeGenVisitor>:Nil +1102
[4407926893] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::ASTNode+, Crystal::CodeGenVisitor>:Nil +1405
[4408003730] *Crystal::CodeGenVisitor#codegen_fun<Crystal::CodeGenVisitor, String, Crystal::Def+, Crystal::Type+, Bool, LLVM::Module, Bool, Bool>:LLVM::Function +3346
[4407993665] *Crystal::CodeGenVisitor#target_def_fun<Crystal::CodeGenVisitor, Crystal::Def+, Crystal::Type+>:LLVM::Function +4705
[4408036669] *Crystal::CodeGenVisitor#visit<Crystal::CodeGenVisitor, Crystal::Call>:Bool +3165
[4407926590] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::ASTNode+, Crystal::CodeGenVisitor>:Nil +1102
[4407926893] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::ASTNode+, Crystal::CodeGenVisitor>:Nil +1405
[4407979709] *Crystal::CodeGenVisitor#codegen_fun<Crystal::CodeGenVisitor, String, Crystal::Def, Crystal::Type+, Bool, LLVM::Module, Bool, Bool>:LLVM::Function +2989
[4407929041] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::ASTNode+, Crystal::CodeGenVisitor>:Nil +3553
[4408053239] *Crystal::CodeGenVisitor#prepare_call_args_non_external<Crystal::CodeGenVisitor, Crystal::Call, Crystal::Def+, Crystal::Type+>:{Array(LLVM::Value), Bool} +695
[4408033981] *Crystal::CodeGenVisitor#visit<Crystal::CodeGenVisitor, Crystal::Call>:Bool +477
[4407926590] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::ASTNode+, Crystal::CodeGenVisitor>:Nil +1102
[4408053239] *Crystal::CodeGenVisitor#prepare_call_args_non_external<Crystal::CodeGenVisitor, Crystal::Call, Crystal::Def+, Crystal::Type+>:{Array(LLVM::Value), Bool} +695
[4408033981] *Crystal::CodeGenVisitor#visit<Crystal::CodeGenVisitor, Crystal::Call>:Bool +477
[4407926590] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::ASTNode+, Crystal::CodeGenVisitor>:Nil +1102
[4407926893] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::ASTNode+, Crystal::CodeGenVisitor>:Nil +1405
[4407927958] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::ASTNode+, Crystal::CodeGenVisitor>:Nil +2470
[4406893965] *Crystal::Compiler#compile<Crystal::Compiler, Array(Crystal::Compiler::Source), String>:Crystal::Compiler::Result +4429
[4410852801] *Crystal::Command#run<Crystal::Command>:(Nil | Bool | Process::Status | Array(String) | IO::FileDescriptor+ | Crystal::Compiler::Result | Array(Crystal::ImplementationTrace) | Array(Crystal::Init::View+:Class)) +1121
[4410850649] main +19065
I'm afraid without at least some code to reproduce this will be impossible to fix.
Fair enough, I'll keep digging and hopefully come with an update
If you checkout this version
https://github.com/benoist/carbon-crystal/tree/6e9e2833ce3811788c1009fae530ed14abf56d76
cd example
crystal server.cr
Swapping line 24 and 25 causes the server to built again
https://github.com/benoist/carbon-crystal/blob/6e9e2833ce3811788c1009fae530ed14abf56d76/src/carbon_controller/base.cr#L24
Als commenting out the callbacks code causes it to compile again
https://github.com/benoist/carbon-crystal/blob/6e9e2833ce3811788c1009fae530ed14abf56d76/src/carbon_support/callbacks.cr
Just have the function yield.
Could reduce it quite a bit, I'll leave the two arrays and Enumerable methods to @asterite
class CarbonSupport::Callbacks::Callback
def initialize
@method = nil
end
def method
@method
end
end
class CarbonController::Metal
def dispatch(block)
run_callbacks do
end
end
def run_callbacks
yield
([] of CarbonSupport::Callbacks::Callback).all? do |after|
([] of CarbonSupport::Callbacks::Callback).includes?(after.method)
end
end
end
class ApplicationController < CarbonController::Metal
def index
end
end
class WelcomeController < ApplicationController
def index
1
end
end
proc = ->(controller : ApplicationController) { controller.index }
ApplicationController.new.dispatch(proc)
With #2443 in place the above snippet no longer compiles, and adding explicitly specifying the type of @method makes it compile fine.
Nice!! Thank you. Looking forward to the release! Would it be an idea to ask volunteers to checkout the master branch to test some shards before the next release?
@benoist Sounds like a good idea. I don't know how many know how to compile the compiler and use it, but I'll drop a message on our Google Groups to ask volunteers to try to migrate their code to work with master.
I don't know how many know how to compile the compiler
True, there's always the option of creating an RC. As this release would probably require most shards to be updated, it might be worth it. I know it's just about naming a version and there is not much difference between 0.16.0.rc1 and 0.16.1 but at least you'd have to specifically request the RC to be installed. This might make sure newcomers to the language aren't scared off by all the failing shards with the latest release. I know that's what put me off to continue with rust (not saying I will do the same with crystal, cause I already love it :)).
Sounds really good and wise. I will include a ".rc" in the version and also announce it as a release candidate.
:+1: