crystal-lang / crystal

The Crystal Programming Language
https://crystal-lang.org
Apache License 2.0
19.24k stars 1.61k forks source link

BUG: `yield e` at enumerable.cr:1102:32 has no type (Exception) #7960

Open Blacksmoke16 opened 5 years ago

Blacksmoke16 commented 5 years ago

https://play.crystal-lang.org/#/r/7858

module Assertion
  abstract def valid? : Bool
end

class Validator
  def initialize : Nil
    ([] of Assertion).reject(&.valid?)
  end 
end

module CrSerializer(T)
  @validator : Validator = Validator.new
end

class Config
  include CrSerializer(Int32)
end

Config.new
BUG: `yield e` at ~/crystal/src/enumerable.cr:1120:32 has no type (Exception)
  from ~/crystal/src/compiler/crystal/semantic/bindings.cr:13:45 in 'type'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:843:20 in 'codegen_cond'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:836:12 in 'codegen_cond_branch'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:780:9 in 'visit'
  from ~/crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:2122:7 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:68:5 in 'visit'
  from ~/crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:2122:7 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:68:5 in 'visit'
  from ~/crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:2122:7 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:621:9 in 'visit'
  from ~/crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:2122:7 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:820:11 in 'visit'
  from ~/crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:2122:7 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:621:9 in 'visit'
  from ~/crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:2122:7 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/call.cr:288:13 in 'codegen_call_with_block'
  from ~/crystal/src/compiler/crystal/codegen/call.cr:34:9 in 'visit'
  from ~/crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:2122:7 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/call.cr:288:13 in 'codegen_call_with_block'
  from ~/crystal/src/compiler/crystal/codegen/call.cr:34:9 in 'visit'
  from ~/crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:2122:7 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:621:9 in 'visit'
  from ~/crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:2122:7 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/call.cr:288:13 in 'codegen_call_with_block'
  from ~/crystal/src/compiler/crystal/codegen/call.cr:34:9 in 'visit'
  from ~/crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:2122:7 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/fun.cr:160:11 in 'codegen_fun'
  from ~/crystal/src/compiler/crystal/codegen/fun.cr:51:3 in 'codegen_fun'
  from ~/crystal/src/compiler/crystal/codegen/fun.cr:8:54 in 'target_def_fun'
  from ~/crystal/src/compiler/crystal/codegen/call.cr:410:12 in 'codegen_call'
  from ~/crystal/src/compiler/crystal/codegen/call.cr:37:7 in 'visit'
  from ~/crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:2122:7 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:621:9 in 'visit'
  from ~/crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:2122:7 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/fun.cr:160:11 in 'codegen_fun'
  from ~/crystal/src/compiler/crystal/codegen/fun.cr:51:3 in 'codegen_fun'
  from ~/crystal/src/compiler/crystal/codegen/fun.cr:8:54 in 'target_def_fun'
  from ~/crystal/src/compiler/crystal/codegen/call.cr:410:12 in 'codegen_call'
  from ~/crystal/src/compiler/crystal/codegen/call.cr:37:7 in 'visit'
  from ~/crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:2122:7 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:1912:11 in 'run_instance_vars_initializers_non_recursive'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:1891:7 in 'run_instance_vars_initializers'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:1866:7 in 'allocate_aggregate'
  from ~/crystal/src/compiler/crystal/codegen/primitives.cr:784:5 in 'codegen_primitive_allocate'
  from ~/crystal/src/compiler/crystal/codegen/primitives.cr:30:15 in 'codegen_primitive'
  from ~/crystal/src/compiler/crystal/codegen/call.cr:405:7 in 'codegen_call'
  from ~/crystal/src/compiler/crystal/codegen/call.cr:37:7 in 'visit'
  from ~/crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:2122:7 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:957:9 in 'codegen_assign'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:921:7 in 'visit'
  from ~/crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:2122:7 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:621:9 in 'visit'
  from ~/crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:2122:7 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/fun.cr:160:11 in 'codegen_fun'
  from ~/crystal/src/compiler/crystal/codegen/fun.cr:51:3 in 'codegen_fun'
  from ~/crystal/src/compiler/crystal/codegen/fun.cr:8:54 in 'target_def_fun'
  from ~/crystal/src/compiler/crystal/codegen/call.cr:410:12 in 'codegen_call'
  from ~/crystal/src/compiler/crystal/codegen/call.cr:37:7 in 'visit'
  from ~/crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:2122:7 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:621:9 in 'visit'
  from ~/crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:2122:7 in 'accept'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:65:7 in 'codegen'
  from ~/crystal/src/compiler/crystal/codegen/codegen.cr:63:5 in 'codegen:debug:single_module'
  from ~/crystal/src/compiler/crystal/compiler.cr:22:7 in 'codegen'
  from ~/crystal/src/compiler/crystal/compiler.cr:167:16 in 'compile'
  from ~/crystal/src/compiler/crystal/command.cr:268:7 in 'compile'
  from ~/crystal/src/compiler/crystal/command.cr:184:14 in 'run_command'
  from ~/crystal/src/compiler/crystal/command.cr:103:7 in 'run'
  from ~/crystal/src/compiler/crystal/command.cr:46:5 in 'run'
  from ~/crystal/src/compiler/crystal/command.cr:45:3 in 'run'
  from ~/crystal/src/compiler/crystal.cr:8:1 in '__crystal_main'
  from ~/crystal/src/crystal/main.cr:97:5 in 'main_user_code'
  from ~/crystal/src/crystal/main.cr:86:7 in 'main'
  from ~/crystal/src/crystal/main.cr:106:3 in 'main'
  from __libc_start_main
  from _start
  from ???
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

Moving the @validator : Validator = Validator.new into a macro included seems to fix things.

yxhuvud commented 5 years ago

Have you verified against master? This looks like it could be affected by the fixes @asterite did regarding abstract methods.

Blacksmoke16 commented 5 years ago

Yea it still happens on master. I'm using the nightly via snap. I also tried again his branch (as it isn't merged in yet) and same issue.