Crystal: Reproducible codegen bug

Created on 12 Sep 2016  路  6Comments  路  Source: crystal-lang/crystal

Project code (ZIP)

Crystal project attached: shards update and crystal src/compiler_crash.cr will reproduce this output:

$ crystal src/compiler_crash.cr
Bug: trying to downcast Query::NotEquals(T) <- Query::Query+
[4562990017] *raise<Exception>:NoReturn +81
[4562989804] *raise<String>:NoReturn +92
[4571662879] *Crystal::CodeGenVisitor#downcast_distinct<LLVM::Value, Crystal::Type+, Crystal::Type+>:NoReturn +671
[4571579947] *Crystal::CodeGenVisitor#downcast<LLVM::Value, Crystal::Type+, Crystal::Type+, Bool>:LLVM::Value +2267
[4571986489] *Crystal::CodeGenVisitor#visit<Crystal::Var+>:LLVM::Value +473
[4571694101] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +197
[4571886135] *Crystal::CodeGenVisitor#prepare_call_args_non_external<Crystal::Call, Crystal::Def+, Crystal::Type+>:Tuple(Array(LLVM::Value), Bool) +887
[4571871529] *Crystal::CodeGenVisitor#prepare_call_args<Crystal::Call, Crystal::Type+>:Tuple(Array(LLVM::Value), Bool) +121
[4571850437] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +213
[4571856095] *Crystal::CodeGenVisitor#codegen_dispatch<Crystal::Call, Array(Crystal::Def+)>:Bool +4207
[4571850298] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +74
[4571694912] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1008
[4571815764] *Crystal::CodeGenVisitor#visit<Crystal::Assign>:(Bool | Nil) +244
[4571695727] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1823
[4571695119] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1215
[4571775734] *Crystal::CodeGenVisitor#codegen_fun<String, Crystal::Def+, Crystal::Type+, Bool, LLVM::Module, Bool, Bool>:LLVM::Function +1702
[4571794826] *Crystal::CodeGenVisitor#target_def_fun<Crystal::Def+, Crystal::Type+>:LLVM::Function +202
[4571900274] *Crystal::CodeGenVisitor#codegen_call<Crystal::Call, Crystal::Def+, Crystal::Type+, Array(LLVM::Value)>:(Bool | LLVM::Value | Nil) +146
[4571850655] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +431
[4571694912] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1008
[4571695119] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1215
[4571775734] *Crystal::CodeGenVisitor#codegen_fun<String, Crystal::Def+, Crystal::Type+, Bool, LLVM::Module, Bool, Bool>:LLVM::Function +1702
[4571794826] *Crystal::CodeGenVisitor#target_def_fun<Crystal::Def+, Crystal::Type+>:LLVM::Function +202
[4571900274] *Crystal::CodeGenVisitor#codegen_call<Crystal::Call, Crystal::Def+, Crystal::Type+, Array(LLVM::Value)>:(Bool | LLVM::Value | Nil) +146
[4571850655] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +431
[4571694912] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1008
[4571775734] *Crystal::CodeGenVisitor#codegen_fun<String, Crystal::Def+, Crystal::Type+, Bool, LLVM::Module, Bool, Bool>:LLVM::Function +1702
[4571794826] *Crystal::CodeGenVisitor#target_def_fun<Crystal::Def+, Crystal::Type+>:LLVM::Function +202
[4571900274] *Crystal::CodeGenVisitor#codegen_call<Crystal::Call, Crystal::Def+, Crystal::Type+, Array(LLVM::Value)>:(Bool | LLVM::Value | Nil) +146
[4571850655] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +431
[4571856095] *Crystal::CodeGenVisitor#codegen_dispatch<Crystal::Call, Array(Crystal::Def+)>:Bool +4207
[4571850298] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +74
[4571694912] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1008
[4571886135] *Crystal::CodeGenVisitor#prepare_call_args_non_external<Crystal::Call, Crystal::Def+, Crystal::Type+>:Tuple(Array(LLVM::Value), Bool) +887
[4571871529] *Crystal::CodeGenVisitor#prepare_call_args<Crystal::Call, Crystal::Type+>:Tuple(Array(LLVM::Value), Bool) +121
[4571850437] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +213
[4571694912] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1008
[4572155917] *Crystal::CodeGenVisitor#visit<Crystal::ExceptionHandler>:Bool +557
[4571697506] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +3602
[4571775734] *Crystal::CodeGenVisitor#codegen_fun<String, Crystal::Def+, Crystal::Type+, Bool, LLVM::Module, Bool, Bool>:LLVM::Function +1702
[4571794826] *Crystal::CodeGenVisitor#target_def_fun<Crystal::Def+, Crystal::Type+>:LLVM::Function +202
[4571900274] *Crystal::CodeGenVisitor#codegen_call<Crystal::Call, Crystal::Def+, Crystal::Type+, Array(LLVM::Value)>:(Bool | LLVM::Value | Nil) +146
[4571850655] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +431
[4571694912] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1008
[4571775734] *Crystal::CodeGenVisitor#codegen_fun<String, Crystal::Def+, Crystal::Type+, Bool, LLVM::Module, Bool, Bool>:LLVM::Function +1702
[4571794826] *Crystal::CodeGenVisitor#target_def_fun<Crystal::Def+, Crystal::Type+>:LLVM::Function +202
[4571900274] *Crystal::CodeGenVisitor#codegen_call<Crystal::Call, Crystal::Def+, Crystal::Type+, Array(LLVM::Value)>:(Bool | LLVM::Value | Nil) +146
[4571850655] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +431
[4571694912] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1008
[4571695119] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1215
[4571775734] *Crystal::CodeGenVisitor#codegen_fun<String, Crystal::Def+, Crystal::Type+, Bool, LLVM::Module, Bool, Bool>:LLVM::Function +1702
[4571794826] *Crystal::CodeGenVisitor#target_def_fun<Crystal::Def+, Crystal::Type+>:LLVM::Function +202
[4571900274] *Crystal::CodeGenVisitor#codegen_call<Crystal::Call, Crystal::Def+, Crystal::Type+, Array(LLVM::Value)>:(Bool | LLVM::Value | Nil) +146
[4571850655] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +431
[4571694912] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1008
[4571885414] *Crystal::CodeGenVisitor#prepare_call_args_non_external<Crystal::Call, Crystal::Def+, Crystal::Type+>:Tuple(Array(LLVM::Value), Bool) +166
[4571871529] *Crystal::CodeGenVisitor#prepare_call_args<Crystal::Call, Crystal::Type+>:Tuple(Array(LLVM::Value), Bool) +121
[4571850437] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +213
[4571694912] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1008
[4572036775] *Crystal::CodeGenVisitor#visit<Crystal::Yield>:Bool +2359
[4571694996] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1092
[4572036775] *Crystal::CodeGenVisitor#visit<Crystal::Yield>:Bool +2359
[4571694996] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1092
[4571695119] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1215
[4572003823] *Crystal::CodeGenVisitor#visit<Crystal::While>:Bool +607
[4571696142] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +2238
[4571695119] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1215
[4571893455] *Crystal::CodeGenVisitor#codegen_call_with_block<Crystal::Call, Crystal::Block, Crystal::Type+, Array(LLVM::Value)>:LLVM::Value +1071
[4571850681] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +457
[4571694912] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1008
[4571893455] *Crystal::CodeGenVisitor#codegen_call_with_block<Crystal::Call, Crystal::Block, Crystal::Type+, Array(LLVM::Value)>:LLVM::Value +1071
[4571850681] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +457
[4571694912] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1008
[4571695119] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1215
[4571775734] *Crystal::CodeGenVisitor#codegen_fun<String, Crystal::Def+, Crystal::Type+, Bool, LLVM::Module, Bool, Bool>:LLVM::Function +1702
[4571794826] *Crystal::CodeGenVisitor#target_def_fun<Crystal::Def+, Crystal::Type+>:LLVM::Function +202
[4571900274] *Crystal::CodeGenVisitor#codegen_call<Crystal::Call, Crystal::Def+, Crystal::Type+, Array(LLVM::Value)>:(Bool | LLVM::Value | Nil) +146
[4571850655] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +431
[4571694912] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1008
[4571851996] *Crystal::CodeGenVisitor#codegen_dispatch<Crystal::Call, Array(Crystal::Def+)>:Bool +108
[4571850298] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +74
[4571694912] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1008
[4571815764] *Crystal::CodeGenVisitor#visit<Crystal::Assign>:(Bool | Nil) +244
[4571695727] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1823
[4571695119] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1215
[4571775734] *Crystal::CodeGenVisitor#codegen_fun<String, Crystal::Def+, Crystal::Type+, Bool, LLVM::Module, Bool, Bool>:LLVM::Function +1702
[4571794826] *Crystal::CodeGenVisitor#target_def_fun<Crystal::Def+, Crystal::Type+>:LLVM::Function +202
[4571900274] *Crystal::CodeGenVisitor#codegen_call<Crystal::Call, Crystal::Def+, Crystal::Type+, Array(LLVM::Value)>:(Bool | LLVM::Value | Nil) +146
[4571850655] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +431
[4571856095] *Crystal::CodeGenVisitor#codegen_dispatch<Crystal::Call, Array(Crystal::Def+)>:Bool +4207
[4571850298] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +74
[4571694912] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1008
[4571695119] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1215
[4571775734] *Crystal::CodeGenVisitor#codegen_fun<String, Crystal::Def+, Crystal::Type+, Bool, LLVM::Module, Bool, Bool>:LLVM::Function +1702
[4571794826] *Crystal::CodeGenVisitor#target_def_fun<Crystal::Def+, Crystal::Type+>:LLVM::Function +202
[4571900274] *Crystal::CodeGenVisitor#codegen_call<Crystal::Call, Crystal::Def+, Crystal::Type+, Array(LLVM::Value)>:(Bool | LLVM::Value | Nil) +146
[4571850655] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +431
[4571694912] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1008
[4571885414] *Crystal::CodeGenVisitor#prepare_call_args_non_external<Crystal::Call, Crystal::Def+, Crystal::Type+>:Tuple(Array(LLVM::Value), Bool) +166
[4571871529] *Crystal::CodeGenVisitor#prepare_call_args<Crystal::Call, Crystal::Type+>:Tuple(Array(LLVM::Value), Bool) +121
[4571850437] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +213
[4571694912] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1008
[4572036775] *Crystal::CodeGenVisitor#visit<Crystal::Yield>:Bool +2359
[4571694996] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1092
[4571695119] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1215
[4572155917] *Crystal::CodeGenVisitor#visit<Crystal::ExceptionHandler>:Bool +557
[4571697506] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +3602
[4571893455] *Crystal::CodeGenVisitor#codegen_call_with_block<Crystal::Call, Crystal::Block, Crystal::Type+, Array(LLVM::Value)>:LLVM::Value +1071
[4571850681] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +457
[4571694912] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1008
[4571775734] *Crystal::CodeGenVisitor#codegen_fun<String, Crystal::Def+, Crystal::Type+, Bool, LLVM::Module, Bool, Bool>:LLVM::Function +1702
[4571794826] *Crystal::CodeGenVisitor#target_def_fun<Crystal::Def+, Crystal::Type+>:LLVM::Function +202
[4571900274] *Crystal::CodeGenVisitor#codegen_call<Crystal::Call, Crystal::Def+, Crystal::Type+, Array(LLVM::Value)>:(Bool | LLVM::Value | Nil) +146
[4571850655] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +431
[4571694912] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1008
[4571885414] *Crystal::CodeGenVisitor#prepare_call_args_non_external<Crystal::Call, Crystal::Def+, Crystal::Type+>:Tuple(Array(LLVM::Value), Bool) +166
[4571871529] *Crystal::CodeGenVisitor#prepare_call_args<Crystal::Call, Crystal::Type+>:Tuple(Array(LLVM::Value), Bool) +121
[4571850437] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +213
[4571694912] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1008
[4571775734] *Crystal::CodeGenVisitor#codegen_fun<String, Crystal::Def+, Crystal::Type+, Bool, LLVM::Module, Bool, Bool>:LLVM::Function +1702
[4571794826] *Crystal::CodeGenVisitor#target_def_fun<Crystal::Def+, Crystal::Type+>:LLVM::Function +202
[4571900274] *Crystal::CodeGenVisitor#codegen_call<Crystal::Call, Crystal::Def+, Crystal::Type+, Array(LLVM::Value)>:(Bool | LLVM::Value | Nil) +146
[4571850655] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +431
[4571694912] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1008
[4571695119] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1215
[4571377880] *Crystal::Compiler#codegen<Crystal::Program, Crystal::ASTNode+, Array(Crystal::Compiler::Source), String>:(Array(String) | Nil) +1224
[4576046597] *Crystal::Command#run_command<Bool>:Nil +277
[4563521221] *Crystal::Command#run:(Array(Crystal::ImplementationTrace) | Array(Crystal::Init::View+:Class) | Array(String) | Bool | Crystal::Compiler::Result | Hash(String, String) | IO::FileDescriptor | Nil) +4005
[4563117462] main +24278

Error: you've found a bug in the Crystal compiler. Please open an issue, including source code that will allow us to reproduce the bug: https://github.com/crystal-lang/crystal/issues

Running Crystal 0.19.1 via Homebrew on OS X 10.11.4 (15E65).

bug compiler topicgenerics

Most helpful comment

Hi!

It's unlikely that we'll fix this soon, we'll probably dedicate more time now to continue with concurrency and parallelism.

We'll eventually fix it, just not soon... so you'll have to model this in another way. For example using methods on NotEquals instead of passing them as arguments should work well. Or not using generics at all. For example NotEquals(T) could be replaced with a non-generic type where T is a union Nil | Bool | Int32 | String | Time (because I don't think SQL allows all types). Or... maybe using crystal_db for now.

All 6 comments

That stack trace is more low-level than I'm comfortable with, but as much as possible I'd love to understand why this is happening and how it would get fixed, so I can submit fixes (not just issues) in the future!

Reduced:

class Query
end

class Equals < Query
end

class NotEquals(T) < Query
end

def gen(query : NotEquals)
end

def gen(query)
end

q = Equals.new.as(Query)
gen(q)

Hi!

It's unlikely that we'll fix this soon, we'll probably dedicate more time now to continue with concurrency and parallelism.

We'll eventually fix it, just not soon... so you'll have to model this in another way. For example using methods on NotEquals instead of passing them as arguments should work well. Or not using generics at all. For example NotEquals(T) could be replaced with a non-generic type where T is a union Nil | Bool | Int32 | String | Time (because I don't think SQL allows all types). Or... maybe using crystal_db for now.

Ok, thanks for the alternative suggestions!

If I was curious about trying to figure out why this is happening, where would be a good place to start digging?

@feifanzhou Yes, check my snippet. There's this dispatch:

def gen(query : NotEquals)
end

def gen(query)
end

So if you invoke gen(query) with query of type Query+ (Query or any of its subclasses) then in the first overload... what's the type of query? It's any of NotEquals, which isn't supported right now in the compiler. So that needs to be supported, but it's far from trivial and needs a big redesign and change in type analysis to do it. But since generics used like this is not very common (in fact, I think NotQuery should not be generic, T should be replaced with a union of all primitive types you can use in SQL), and since we have a higher priority right now (concurrency and threads) this will have to wait.

You can redesign your code to change this:

def gen(query : NotEquals)
end

def gen(query)
end

To this:

class Query
  def gen
  end
end

class NotEquals
  def gen
  end
end

Basically, virtual dispatch on self currently works well, but it doesn't work well if it's just an argument to a method.

Again, I don't think you'll be able to "fix" this, merely because there's no fix to find, it's a redesign.

I just got this bug as well, so instead of opening a new issue, I'll just leave this here.

[20:13PM] active_record.cr (master)$ crystal spec/
Bug: trying to downcast Query::Or(T) <- Query::Query+
[4317339953] *raise<Exception>:NoReturn +81
[4317339740] *raise<String>:NoReturn +92
[4326357071] *Crystal::CodeGenVisitor#downcast_distinct<LLVM::Value, Crystal::Type+, Crystal::Type+>:NoReturn +671
[4326260859] *Crystal::CodeGenVisitor#downcast<LLVM::Value, Crystal::Type+, Crystal::Type+, Bool>:LLVM::Value +2267
[4326667153] *Crystal::CodeGenVisitor#visit<Crystal::Var+>:(LLVM::Value | Nil) +497
[4326384583] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +199
[4326558023] *Crystal::CodeGenVisitor#prepare_call_args_non_external<Crystal::Call, Crystal::Def+, Crystal::Type+>:Tuple(Array(LLVM::Value), Bool) +887
[4326522137] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +393
[4326527775] *Crystal::CodeGenVisitor#codegen_dispatch<Crystal::Call, Array(Crystal::Def+)>:Bool +4207
[4326521816] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +72
[4326385388] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1004
[4326496404] *Crystal::CodeGenVisitor#visit<Crystal::Assign>:(Bool | Nil) +244
[4326386203] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1819
[4326385595] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1211
[4326451749] *Crystal::CodeGenVisitor#codegen_fun<String, Crystal::Def+, Crystal::Type+, Bool, LLVM::Module, Bool, Bool>:LLVM::Function +1861
[4326475418] *Crystal::CodeGenVisitor#target_def_fun<Crystal::Def+, Crystal::Type+>:LLVM::Function +202
[4326572806] *Crystal::CodeGenVisitor#codegen_call<Crystal::Call, Crystal::Def+, Crystal::Type+, Array(LLVM::Value)>:(Bool | LLVM::Value | Nil) +150
[4326522354] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +610
[4326385388] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1004
[4326385595] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1211
[4326451749] *Crystal::CodeGenVisitor#codegen_fun<String, Crystal::Def+, Crystal::Type+, Bool, LLVM::Module, Bool, Bool>:LLVM::Function +1861
[4326475418] *Crystal::CodeGenVisitor#target_def_fun<Crystal::Def+, Crystal::Type+>:LLVM::Function +202
[4326572806] *Crystal::CodeGenVisitor#codegen_call<Crystal::Call, Crystal::Def+, Crystal::Type+, Array(LLVM::Value)>:(Bool | LLVM::Value | Nil) +150
[4326522354] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +610
[4326385388] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1004
[4326451749] *Crystal::CodeGenVisitor#codegen_fun<String, Crystal::Def+, Crystal::Type+, Bool, LLVM::Module, Bool, Bool>:LLVM::Function +1861
[4326475418] *Crystal::CodeGenVisitor#target_def_fun<Crystal::Def+, Crystal::Type+>:LLVM::Function +202
[4326572806] *Crystal::CodeGenVisitor#codegen_call<Crystal::Call, Crystal::Def+, Crystal::Type+, Array(LLVM::Value)>:(Bool | LLVM::Value | Nil) +150
[4326522354] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +610
[4326527775] *Crystal::CodeGenVisitor#codegen_dispatch<Crystal::Call, Array(Crystal::Def+)>:Bool +4207
[4326521816] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +72
[4326385388] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1004
[4326496404] *Crystal::CodeGenVisitor#visit<Crystal::Assign>:(Bool | Nil) +244
[4326386203] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1819
[4326385595] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1211
[4326451749] *Crystal::CodeGenVisitor#codegen_fun<String, Crystal::Def+, Crystal::Type+, Bool, LLVM::Module, Bool, Bool>:LLVM::Function +1861
[4326475418] *Crystal::CodeGenVisitor#target_def_fun<Crystal::Def+, Crystal::Type+>:LLVM::Function +202
[4326572806] *Crystal::CodeGenVisitor#codegen_call<Crystal::Call, Crystal::Def+, Crystal::Type+, Array(LLVM::Value)>:(Bool | LLVM::Value | Nil) +150
[4326522354] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +610
[4326385388] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1004
[4326385595] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1211
[4326451749] *Crystal::CodeGenVisitor#codegen_fun<String, Crystal::Def+, Crystal::Type+, Bool, LLVM::Module, Bool, Bool>:LLVM::Function +1861
[4326475418] *Crystal::CodeGenVisitor#target_def_fun<Crystal::Def+, Crystal::Type+>:LLVM::Function +202
[4326572806] *Crystal::CodeGenVisitor#codegen_call<Crystal::Call, Crystal::Def+, Crystal::Type+, Array(LLVM::Value)>:(Bool | LLVM::Value | Nil) +150
[4326522354] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +610
[4326385388] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1004
[4326451749] *Crystal::CodeGenVisitor#codegen_fun<String, Crystal::Def+, Crystal::Type+, Bool, LLVM::Module, Bool, Bool>:LLVM::Function +1861
[4326475418] *Crystal::CodeGenVisitor#target_def_fun<Crystal::Def+, Crystal::Type+>:LLVM::Function +202
[4326572806] *Crystal::CodeGenVisitor#codegen_call<Crystal::Call, Crystal::Def+, Crystal::Type+, Array(LLVM::Value)>:(Bool | LLVM::Value | Nil) +150
[4326522354] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +610
[4326385388] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1004
[4326558023] *Crystal::CodeGenVisitor#prepare_call_args_non_external<Crystal::Call, Crystal::Def+, Crystal::Type+>:Tuple(Array(LLVM::Value), Bool) +887
[4326522137] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +393
[4326385388] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1004
[4326794349] *Crystal::CodeGenVisitor#visit<Crystal::ExceptionHandler>:Bool +557
[4326387982] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +3598
[4326451749] *Crystal::CodeGenVisitor#codegen_fun<String, Crystal::Def+, Crystal::Type+, Bool, LLVM::Module, Bool, Bool>:LLVM::Function +1861
[4326475418] *Crystal::CodeGenVisitor#target_def_fun<Crystal::Def+, Crystal::Type+>:LLVM::Function +202
[4326572806] *Crystal::CodeGenVisitor#codegen_call<Crystal::Call, Crystal::Def+, Crystal::Type+, Array(LLVM::Value)>:(Bool | LLVM::Value | Nil) +150
[4326522354] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +610
[4326385388] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1004
[4326451749] *Crystal::CodeGenVisitor#codegen_fun<String, Crystal::Def+, Crystal::Type+, Bool, LLVM::Module, Bool, Bool>:LLVM::Function +1861
[4326475418] *Crystal::CodeGenVisitor#target_def_fun<Crystal::Def+, Crystal::Type+>:LLVM::Function +202
[4326572806] *Crystal::CodeGenVisitor#codegen_call<Crystal::Call, Crystal::Def+, Crystal::Type+, Array(LLVM::Value)>:(Bool | LLVM::Value | Nil) +150
[4326522354] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +610
[4326385388] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1004
[4326385595] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1211
[4326451749] *Crystal::CodeGenVisitor#codegen_fun<String, Crystal::Def+, Crystal::Type+, Bool, LLVM::Module, Bool, Bool>:LLVM::Function +1861
[4326475418] *Crystal::CodeGenVisitor#target_def_fun<Crystal::Def+, Crystal::Type+>:LLVM::Function +202
[4326572806] *Crystal::CodeGenVisitor#codegen_call<Crystal::Call, Crystal::Def+, Crystal::Type+, Array(LLVM::Value)>:(Bool | LLVM::Value | Nil) +150
[4326522354] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +610
[4326385388] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1004
[4326557302] *Crystal::CodeGenVisitor#prepare_call_args_non_external<Crystal::Call, Crystal::Def+, Crystal::Type+>:Tuple(Array(LLVM::Value), Bool) +166
[4326522137] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +393
[4326385388] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1004
[4326709127] *Crystal::CodeGenVisitor#visit<Crystal::Yield>:Bool +2359
[4326385472] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1088
[4326709127] *Crystal::CodeGenVisitor#visit<Crystal::Yield>:Bool +2359
[4326385472] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1088
[4326385595] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1211
[4326684431] *Crystal::CodeGenVisitor#visit<Crystal::While>:Bool +607
[4326386618] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +2234
[4326385595] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1211
[4326565775] *Crystal::CodeGenVisitor#codegen_call_with_block<Crystal::Call, Crystal::Block, Crystal::Type+, Array(LLVM::Value)>:LLVM::Value +1215
[4326522378] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +634
[4326385388] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1004
[4326565775] *Crystal::CodeGenVisitor#codegen_call_with_block<Crystal::Call, Crystal::Block, Crystal::Type+, Array(LLVM::Value)>:LLVM::Value +1215
[4326522378] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +634
[4326385388] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1004
[4326385595] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1211
[4326451749] *Crystal::CodeGenVisitor#codegen_fun<String, Crystal::Def+, Crystal::Type+, Bool, LLVM::Module, Bool, Bool>:LLVM::Function +1861
[4326475418] *Crystal::CodeGenVisitor#target_def_fun<Crystal::Def+, Crystal::Type+>:LLVM::Function +202
[4326572806] *Crystal::CodeGenVisitor#codegen_call<Crystal::Call, Crystal::Def+, Crystal::Type+, Array(LLVM::Value)>:(Bool | LLVM::Value | Nil) +150
[4326522354] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +610
[4326385388] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1004
[4326523676] *Crystal::CodeGenVisitor#codegen_dispatch<Crystal::Call, Array(Crystal::Def+)>:Bool +108
[4326521816] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +72
[4326385388] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1004
[4326496404] *Crystal::CodeGenVisitor#visit<Crystal::Assign>:(Bool | Nil) +244
[4326386203] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1819
[4326385595] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1211
[4326451749] *Crystal::CodeGenVisitor#codegen_fun<String, Crystal::Def+, Crystal::Type+, Bool, LLVM::Module, Bool, Bool>:LLVM::Function +1861
[4326475418] *Crystal::CodeGenVisitor#target_def_fun<Crystal::Def+, Crystal::Type+>:LLVM::Function +202
[4326572806] *Crystal::CodeGenVisitor#codegen_call<Crystal::Call, Crystal::Def+, Crystal::Type+, Array(LLVM::Value)>:(Bool | LLVM::Value | Nil) +150
[4326522354] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +610
[4326385388] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1004
[4326451749] *Crystal::CodeGenVisitor#codegen_fun<String, Crystal::Def+, Crystal::Type+, Bool, LLVM::Module, Bool, Bool>:LLVM::Function +1861
[4326475418] *Crystal::CodeGenVisitor#target_def_fun<Crystal::Def+, Crystal::Type+>:LLVM::Function +202
[4326572806] *Crystal::CodeGenVisitor#codegen_call<Crystal::Call, Crystal::Def+, Crystal::Type+, Array(LLVM::Value)>:(Bool | LLVM::Value | Nil) +150
[4326522354] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +610
[4326527775] *Crystal::CodeGenVisitor#codegen_dispatch<Crystal::Call, Array(Crystal::Def+)>:Bool +4207
[4326521816] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +72
[4326385388] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1004
[4326557302] *Crystal::CodeGenVisitor#prepare_call_args_non_external<Crystal::Call, Crystal::Def+, Crystal::Type+>:Tuple(Array(LLVM::Value), Bool) +166
[4326522137] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +393
[4326385388] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1004
[4326709127] *Crystal::CodeGenVisitor#visit<Crystal::Yield>:Bool +2359
[4326385472] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1088
[4326385595] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1211
[4326794349] *Crystal::CodeGenVisitor#visit<Crystal::ExceptionHandler>:Bool +557
[4326387982] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +3598
[4326565775] *Crystal::CodeGenVisitor#codegen_call_with_block<Crystal::Call, Crystal::Block, Crystal::Type+, Array(LLVM::Value)>:LLVM::Value +1215
[4326522378] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +634
[4326385388] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1004
[4326451749] *Crystal::CodeGenVisitor#codegen_fun<String, Crystal::Def+, Crystal::Type+, Bool, LLVM::Module, Bool, Bool>:LLVM::Function +1861
[4326475418] *Crystal::CodeGenVisitor#target_def_fun<Crystal::Def+, Crystal::Type+>:LLVM::Function +202
[4326572806] *Crystal::CodeGenVisitor#codegen_call<Crystal::Call, Crystal::Def+, Crystal::Type+, Array(LLVM::Value)>:(Bool | LLVM::Value | Nil) +150
[4326522354] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +610
[4326385388] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1004
[4326557302] *Crystal::CodeGenVisitor#prepare_call_args_non_external<Crystal::Call, Crystal::Def+, Crystal::Type+>:Tuple(Array(LLVM::Value), Bool) +166
[4326522137] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +393
[4326385388] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1004
[4326385595] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1211
[4326451749] *Crystal::CodeGenVisitor#codegen_fun<String, Crystal::Def+, Crystal::Type+, Bool, LLVM::Module, Bool, Bool>:LLVM::Function +1861
[4326443259] *Crystal::CodeGenVisitor#visit<Crystal::ProcLiteral>:Bool +155
[4326386797] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +2413
[4326522228] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +484
[4326385388] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1004
[4326385595] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1211
[4326451749] *Crystal::CodeGenVisitor#codegen_fun<String, Crystal::Def+, Crystal::Type+, Bool, LLVM::Module, Bool, Bool>:LLVM::Function +1861
[4326443259] *Crystal::CodeGenVisitor#visit<Crystal::ProcLiteral>:Bool +155
[4326386797] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +2413
[4326522228] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +484
[4326385388] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1004
[4326385595] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1211
[4326451749] *Crystal::CodeGenVisitor#codegen_fun<String, Crystal::Def+, Crystal::Type+, Bool, LLVM::Module, Bool, Bool>:LLVM::Function +1861
[4326443259] *Crystal::CodeGenVisitor#visit<Crystal::ProcLiteral>:Bool +155
[4326386797] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +2413
[4326522228] *Crystal::CodeGenVisitor#visit<Crystal::Call>:Bool +484
[4326385388] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1004
[4326386540] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +2156
[4326385595] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1211
[4326392219] *Crystal::CodeGenVisitor#visit<Crystal::FileNode>:Bool +507
[4326384535] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +151
[4326385595] *Crystal::ASTNode+@Crystal::ASTNode#accept<Crystal::CodeGenVisitor>:Nil +1211
[4326057142] *Crystal::Compiler#codegen<Crystal::Program, Crystal::ASTNode+, Array(Crystal::Compiler::Source), String>:(Array(String) | Nil) +1238
[4330882873] *Crystal::Command#spec:NoReturn +3657
[4317864757] *Crystal::Command#run:(Array(Crystal::ImplementationTrace) | Array(Crystal::Init::View+:Class) | Array(String) | Bool | Crystal::Compiler::Result | Hash(String, String) | IO::FileDescriptor | Nil) +2885
[4317469046] main +24278

Error: you've found a bug in the Crystal compiler. Please open an issue, including source code that will allow us to reproduce the bug: https://github.com/crystal-lang/crystal/issues
Was this page helpful?
0 / 5 - 0 ratings