Subtyping with union as type parameter

abstract type AbstractGrid{T, F, V} <: AbstractArray{Union{T,Missing},2} end

Why the Union{T,Missing} impedes the compilation here?
I always get a UndefRefError: access to undefined reference.

EDIT: Seems to be related to Revise @tim.holy

julia> using Revise

julia> abstract type AbstractGrid{T, F, V} <: AbstractArray{Union{T,Missing},2} end
# no error

?

use
includet("mod.jl")
where mod.jl contains:

module SomeModule
abstract type AbstractType <: AbstractArray{Union{Int,Missing},2} end
end

results in that error:

julia> includet("mod.jl")
UndefRefError: access to undefined reference
Stacktrace:
 [1] getindex at .\array.jl:744 [inlined]
 [2] lookup_var at C:\Users\Matthis\.julia\packages\JuliaInterpreter\ATirK\src\interpret.jl:4 [inlined]
 [3] lookup_or_eval(::Any, ::JuliaInterpreter.Frame, ::Any) at C:\Users\Matthis\.julia\packages\JuliaInterpreter\ATirK\src\interpret.jl:77
 [4] lookup_or_eval(::Any, ::JuliaInterpreter.Frame, ::Any) at C:\Users\Matthis\.julia\packages\JuliaInterpreter\ATirK\src\interpret.jl:87
 [5] evaluate_abstracttype(::Any, ::JuliaInterpreter.Frame, ::Expr) at C:\Users\Matthis\.julia\packages\JuliaInterpreter\ATirK\src\interpret.jl:318
 [6] step_expr!(::Any, ::JuliaInterpreter.Frame, ::Any, ::Bool) at C:\Users\Matthis\.julia\packages\JuliaInterpreter\ATirK\src\interpret.jl:467
 [7] #methods_by_execution!#14(::Bool, ::Bool, ::typeof(Revise.methods_by_execution!), ::Any, ::Revise.CodeTrackingMethodInfo, ::Dict{Module,Array{Expr,1}}, ::JuliaInterpreter.Frame) at C:\Users\Matthis\.julia\packages\Revise\cbX7Q\src\lowered.jl:70
 [8] #methods_by_execution! at .\none:0 [inlined]
 [9] #methods_by_execution!#9(::Base.Iterators.Pairs{Symbol,Bool,Tuple{Symbol},NamedTuple{(:define,),Tuple{Bool}}}, ::typeof(Revise.methods_by_execution!), ::Any, ::Revise.CodeTrackingMethodInfo, ::Dict{Module,Array{Expr,1}}, ::Module, ::Expr) at C:\Users\Matthis\.julia\packages\Revise\cbX7Q\src\lowered.jl:49
 [10] #methods_by_execution! at .\none:0 [inlined]
 [11] #eval_with_signatures#63(::Bool, ::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::typeof(Revise.eval_with_signatures), ::Module, ::Expr) at C:\Users\Matthis\.julia\packages\Revise\cbX7Q\src\Revise.jl:351
 [12] eval_with_signatures at C:\Users\Matthis\.julia\packages\Revise\cbX7Q\src\Revise.jl:349 [inlined]
 [13] (::Revise.var"#61#62"{OrderedCollections.OrderedDict{Revise.RelocatableExpr,Union{Nothing, Array{Any,1}}},OrderedCollections.OrderedDict{Revise.RelocatableExpr,Union{Nothing, Array{Any,1}}},Module})() at C:\Users\Matthis\.julia\packages\Revise\cbX7Q\src\Revise.jl:285
 [14] with_logstate(::Revise.var"#61#62"{OrderedCollections.OrderedDict{Revise.RelocatableExpr,Union{Nothing, Array{Any,1}}},OrderedCollections.OrderedDict{Revise.RelocatableExpr,Union{Nothing, Array{Any,1}}},Module}, ::Base.CoreLogging.LogState) at .\logging.jl:395
 [15] with_logger at .\logging.jl:491 [inlined]
 [16] eval_new! at C:\Users\Matthis\.julia\packages\Revise\cbX7Q\src\Revise.jl:275 [inlined]
 [17] eval_new!(::OrderedCollections.OrderedDict{Module,OrderedCollections.OrderedDict{Revise.RelocatableExpr,Union{Nothing, Array{Any,1}}}}, ::OrderedCollections.OrderedDict{Module,OrderedCollections.OrderedDict{Revise.RelocatableExpr,Union{Nothing, Array{Any,1}}}}) at C:\Users\Matthis\.julia\packages\Revise\cbX7Q\src\Revise.jl:327
 [18] revise() at C:\Users\Matthis\.julia\packages\Revise\cbX7Q\src\Revise.jl:543
 [19] revise at C:\Users\Matthis\.julia\packages\Revise\cbX7Q\src\Revise.jl:567 [inlined]
 [20] run_backend(::REPL.REPLBackend) at C:\Users\Matthis\.julia\packages\Revise\cbX7Q\src\Revise.jl:970
 [21] (::Revise.var"#79#81"{REPL.REPLBackend})() at .\task.jl:333
while evaluating
begin
    #= C:\Users\Matthis\.julia\dev\GridEnhancing\src\mod.jl:1 =#
    #= C:\Users\Matthis\.julia\dev\GridEnhancing\src\mod.jl:1 =#
    #= C:\Users\Matthis\.julia\dev\GridEnhancing\src\mod.jl:2 =#
    abstract type AbstractType <: AbstractArray{Union{Int, Missing}, 2} end
end
in module Main.SomeModule
┌ Error: evaluation error
│   mod = Main.SomeModule
│   ex =
│    quote
│        #= C:\Users\Matthis\.julia\dev\GridEnhancing\src\mod.jl:1 =#
│        #= C:\Users\Matthis\.julia\dev\GridEnhancing\src\mod.jl:1 =#
│        #= C:\Users\Matthis\.julia\dev\GridEnhancing\src\mod.jl:2 =#
│        abstract type AbstractType <: AbstractArray{Union{Int, Missing}, 2} end
│    end
│   exception =
│    UndefRefError: access to undefined reference
│    Stacktrace:
│     [1] getindex at .\array.jl:744 [inlined]
│     [2] lookup_var at C:\Users\Matthis\.julia\packages\JuliaInterpreter\ATirK\src\interpret.jl:4 [inlined]
│     [3] lookup_or_eval(::Any, ::JuliaInterpreter.Frame, ::Any) at C:\Users\Matthis\.julia\packages\JuliaInterpreter\ATirK\src\interpret.jl:77
│     [4] lookup_or_eval(::Any, ::JuliaInterpreter.Frame, ::Any) at C:\Users\Matthis\.julia\packages\JuliaInterpreter\ATirK\src\interpret.jl:87
│     [5] evaluate_abstracttype(::Any, ::JuliaInterpreter.Frame, ::Expr) at C:\Users\Matthis\.julia\packages\JuliaInterpreter\ATirK\src\interpret.jl:318
│     [6] step_expr!(::Any, ::JuliaInterpreter.Frame, ::Any, ::Bool) at C:\Users\Matthis\.julia\packages\JuliaInterpreter\ATirK\src\interpret.jl:467
│     [7] #methods_by_execution!#14(::Bool, ::Bool, ::typeof(Revise.methods_by_execution!), ::Any, ::Revise.CodeTrackingMethodInfo, ::Dict{Module,Array{Expr,1}}, ::JuliaInterpreter.Frame) at C:\Users\Matthis\.julia\packages\Revise\cbX7Q\src\lowered.jl:70
│     [8] #methods_by_execution! at C:\Users\Matthis\.julia\packages\Revise\cbX7Q\src\lowered.jl:0 [inlined]
│     [9] #methods_by_execution!#9(::Base.Iterators.Pairs{Symbol,Bool,Tuple{Symbol,Symbol},NamedTuple{(:define, :skip_include),Tuple{Bool,Bool}}}, ::typeof(Revise.methods_by_execution!), ::Any, ::Revise.CodeTrackingMethodInfo, ::Dict{Module,Array{Expr,1}}, ::Module, ::Expr) at C:\Users\Matthis\.julia\packages\Revise\cbX7Q\src\lowered.jl:49
│     [10] #methods_by_execution! at .\none:0 [inlined]
│     [11] #eval_with_signatures#63(::Bool, ::Base.Iterators.Pairs{Symbol,Bool,Tuple{Symbol},NamedTuple{(:skip_include,),Tuple{Bool}}}, ::typeof(Revise.eval_with_signatures), ::Module, ::Expr) at C:\Users\Matthis\.julia\packages\Revise\cbX7Q\src\Revise.jl:351
│     [12] #eval_with_signatures at .\none:0 [inlined]
│     [13] #instantiate_sigs!#64(::Bool, ::Base.Iterators.Pairs{Symbol,Bool,Tuple{Symbol},NamedTuple{(:skip_include,),Tuple{Bool}}}, ::typeof(Revise.instantiate_sigs!), ::OrderedCollections.OrderedDict{Module,OrderedCollections.OrderedDict{Revise.RelocatableExpr,Union{Nothing, Array{Any,1}}}}) at C:\Users\Matthis\.julia\packages\Revise\cbX7Q\src\Revise.jl:359
│     [14] #instantiate_sigs! at .\none:0 [inlined]
│     [15] #track#69(::Bool, ::Bool, ::typeof(Revise.track), ::Module, ::String) at C:\Users\Matthis\.julia\packages\Revise\cbX7Q\src\Revise.jl:614
│     [16] #track at .\none:0 [inlined]
│     [17] includet(::Module, ::String) at C:\Users\Matthis\.julia\packages\Revise\cbX7Q\src\Revise.jl:662
│     [18] includet(::String) at C:\Users\Matthis\.julia\packages\Revise\cbX7Q\src\Revise.jl:672
│     [19] top-level scope at REPL[3]:1
│     [20] eval(::Module, ::Any) at .\boot.jl:330
│     [21] eval_user_input(::Any, ::REPL.REPLBackend) at D:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.3\REPL\src\REPL.jl:86
│     [22] run_backend(::REPL.REPLBackend) at C:\Users\Matthis\.julia\packages\Revise\cbX7Q\src\Revise.jl:973
│     [23] (::Revise.var"#79#81"{REPL.REPLBackend})() at .\task.jl:333
└ @ Revise C:\Users\Matthis\.julia\packages\Revise\cbX7Q\src\lowered.jl:52

This will be fixed by JuliaInterpreter 0.7.6, scheduled to be released momentarily.

2 Likes