JuliaLang / julia

The Julia Programming Language
https://julialang.org/
MIT License
45.65k stars 5.48k forks source link

Crash in type inference #36407

Closed fingolfin closed 4 years ago

fingolfin commented 4 years ago

We have run into an error in the Julia type inference (see https://github.com/oscar-system/Oscar.jl/issues/104 for the original issue, for which we since implemented a workaround in https://github.com/oscar-system/Oscar.jl/pull/110). The issue happens in Julia 1.4.2 and also 1.5, but was fixed "by accident" (?) on the Julia master branch by PR #36200

To reproduce this, install Oscar but in a revision before the fix. So:

using Pkg
Pkg.add(PackageSpec(url="https://github.com/oscar-system/Oscar.jl", rev="781f5d00647da892f0bb51a4f09616d3223d1127"))

Then there are several ways to trigger an issue. For example, this input

using Oscar  # slooow :/ esp. the first time
k, a = wildanger_field(3, 13)
zk = maximal_order(k)
na = norm(rand(zk, 1:10))
norm_equation(zk, na)

results in this:

julia> using Oscar

julia> k, a = wildanger_field(3, 13)
(Number field over Rational Field with defining polynomial x^3-13*x^2+13*x-13, _$)

julia> zk = maximal_order(k)
Maximal order of Number field over Rational Field with defining polynomial x^3-13*x^2+13*x-13 
with basis nf_elem[1, _$, 1//2*_$^2 + 1//2]

julia> na = norm(rand(zk, 1:10))
17991

julia> norm_equation(zk, na)
Internal error: encountered unexpected error in runtime:
MethodError(f=typeof(Base.string)(), args=(Expr(:<:, :t, :r),), world=0x0000000000000f21)
jl_method_error_bare at /var/tmp/portage/dev-lang/julia-1.4.2/work/julia-1.4.2/src/gf.c:1719
jl_method_error at /var/tmp/portage/dev-lang/julia-1.4.2/work/julia-1.4.2/src/gf.c:1737
...
jl_toplevel_eval_in at /var/tmp/portage/dev-lang/julia-1.4.2/work/julia-1.4.2/src/toplevel.c:848
eval at ./boot.jl:331
eval_user_input at /var/tmp/portage/dev-lang/julia-1.4.2/work/julia-1.4.2/usr/share/julia/stdlib/v1.4/REPL/src/REPL.jl:86
macro expansion at /var/tmp/portage/dev-lang/julia-1.4.2/work/julia-1.4.2/usr/share/julia/stdlib/v1.4/REPL/src/REPL.jl:118 [inlined]
#26 at ./task.jl:358
jl_apply at /var/tmp/portage/dev-lang/julia-1.4.2/work/julia-1.4.2/src/julia.h:1700 [inlined]
start_task at /var/tmp/portage/dev-lang/julia-1.4.2/work/julia-1.4.2/src/task.c:687
unknown function (ip: (nil))

and then

Or run the full test suite:

julia> Pkg.test("Oscar")
    Testing Oscar
Status `/tmp/jl_DaghMs/Manifest.toml`
  [c3fe647b] AbstractAlgebra v0.9.2
  [9e28174c] BinDeps v1.0.1
  [b99e7846] BinaryProvider v0.5.10
  [631607c0] CMake v1.2.0
  [1f15a43c] CxxWrap v0.10.2
  [c863536a] GAP v0.4.1
  [3e1990a7] Hecke v0.8.3
  [682c06a0] JSON v0.21.0
  [472f376f] LoadFlint v0.1.3
  [1914dd2f] MacroTools v0.5.5
  [2edaba10] Nemo v0.17.5
  [f1435218] Oscar v0.3.0 [`~/.julia/dev/Oscar`]
  [69de0a69] Parsers v1.0.5
  [d720cf60] Polymake v0.4.2
  [ae029012] Requires v1.0.1
  [bcd08a7b] Singular v0.3.1
  [30578b45] URIParser v0.4.1
  [3eaa8342] libcxxwrap_julia_jll v0.7.1+1
  [2a0f44e3] Base64
  [ade2ca70] Dates
  [8ba89e20] Distributed
  [b77e0a4c] InteractiveUtils
  [76f85450] LibGit2
  [8f399da3] Libdl
  [37e2e46d] LinearAlgebra
  [56ddb016] Logging
  [d6f4376e] Markdown
  [a63ad114] Mmap
  [44cfe95a] Pkg
  [de0858da] Printf
  [9abbd945] Profile
  [3fa0cd96] REPL
  [9a3f8284] Random
  [ea8e919c] SHA
  [9e88b42a] Serialization
  [6462fe0b] Sockets
  [2f01184e] SparseArrays
  [10745b16] Statistics
  [8dfed614] Test
  [cf7118a7] UUIDs
  [4ec0a83e] Unicode
Test Summary:         | Pass  Total
Rings.ZZ.constructors |   14     14
Test Summary:       | Pass  Total
Rings.ZZ.properties |   41     41
Test Summary:       | Pass  Total
Rings.ZZ.arithmetic |   23     23
Test Summary:       | Pass  Total
Rings.ZZ.comparison |   50     50
Test Summary:     | Pass  Total
Rings.ZZ.divexact |   25     25
Test Summary:     | Pass  Total
Rings.ZZ.powering |   34     34
Test Summary:               | Pass  Total
Rings.ZZ.euclidean_division |   96     96
Test Summary:       | Pass  Total
Rings.ZZ.conversion |   17     17
Test Summary: | Pass  Total
Rings.ZZ.gcd  | 1205   1205
Test Summary:  | Pass  Total
Rings.ZZ.roots |   27     27
Test Summary:          | Pass  Total
Rings.ZZ.factorisation |   18     18
Test Summary:          | Pass  Total
Rings.ZZ.combinatorial |   91     91
Test Summary:               | Pass  Total
Rings.ZZ.number_theoretical |  103    103
Test Summary:         | Pass  Total
Rings.QQ.constructors |   68     68
Test Summary:       | Pass  Total
Rings.QQ.properties |   70     70
Test Summary:       | Pass  Total
Rings.QQ.arithmetic |   66     66
Test Summary:       | Pass  Total
Rings.QQ.comparison |   23     23
Test Summary:     | Pass  Total
Rings.QQ.divexact |   22     22
Test Summary:     | Pass  Total
Rings.QQ.powering |   23     23
Test Summary:        | Pass  Total
Polynomial Orderings |   18     18
Test Summary:           | Pass  Total
Polymake.factorisations |    2      2
Internal error: encountered unexpected error in runtime:
MethodError(f=typeof(Base.string)(), args=(Expr(:<:, :t, :r),), world=0x0000000000000f21)
jl_method_error_bare at /buildworker/worker/package_linux64/build/src/gf.c:1719
jl_method_error at /buildworker/worker/package_linux64/build/src/gf.c:1737
jl_lookup_generic_ at /buildworker/worker/package_linux64/build/src/gf.c:2298 [inlined]
jl_apply_generic at /buildworker/worker/package_linux64/build/src/gf.c:2319
macro expansion at ./error.jl:223 [inlined]
limit_type_size at ./compiler/typelimits.jl:23
jfptr_limit_type_size_4439.clone_1 at /home/wbhart/julia-1.4.2/lib/julia/sys.so (unknown line)
_jl_invoke at /buildworker/worker/package_linux64/build/src/gf.c:2145 [inlined]
jl_apply_generic at /buildworker/worker/package_linux64/build/src/gf.c:2323
abstract_call_method at ./compiler/abstractinterpretation.jl:359
abstract_call_gf_by_type at ./compiler/abstractinterpretation.jl:101
abstract_call_known at ./compiler/abstractinterpretation.jl:873
abstract_call at ./compiler/abstractinterpretation.jl:895
abstract_call at ./compiler/abstractinterpretation.jl:880
abstract_eval at ./compiler/abstractinterpretation.jl:974
typeinf_local at ./compiler/abstractinterpretation.jl:1227
typeinf_nocycle at ./compiler/abstractinterpretation.jl:1283
typeinf at ./compiler/typeinfer.jl:12
typeinf_edge at ./compiler/typeinfer.jl:488
abstract_call_method at ./compiler/abstractinterpretation.jl:404
abstract_call_gf_by_type at ./compiler/abstractinterpretation.jl:101
abstract_call_known at ./compiler/abstractinterpretation.jl:873
abstract_call at ./compiler/abstractinterpretation.jl:895
abstract_call at ./compiler/abstractinterpretation.jl:880
abstract_eval at ./compiler/abstractinterpretation.jl:974
typeinf_local at ./compiler/abstractinterpretation.jl:1213
typeinf_nocycle at ./compiler/abstractinterpretation.jl:1295
typeinf at ./compiler/typeinfer.jl:12
typeinf_edge at ./compiler/typeinfer.jl:488
abstract_call_method at ./compiler/abstractinterpretation.jl:404
abstract_call_gf_by_type at ./compiler/abstractinterpretation.jl:101
abstract_call_known at ./compiler/abstractinterpretation.jl:873
abstract_call at ./compiler/abstractinterpretation.jl:895
abstract_call at ./compiler/abstractinterpretation.jl:880
abstract_eval at ./compiler/abstractinterpretation.jl:974
typeinf_local at ./compiler/abstractinterpretation.jl:1227
typeinf_nocycle at ./compiler/abstractinterpretation.jl:1283
typeinf at ./compiler/typeinfer.jl:12
typeinf_edge at ./compiler/typeinfer.jl:488
abstract_call_method at ./compiler/abstractinterpretation.jl:404
abstract_call_gf_by_type at ./compiler/abstractinterpretation.jl:101
abstract_call_known at ./compiler/abstractinterpretation.jl:873
abstract_call at ./compiler/abstractinterpretation.jl:895
abstract_call at ./compiler/abstractinterpretation.jl:880
abstract_eval at ./compiler/abstractinterpretation.jl:974
typeinf_local at ./compiler/abstractinterpretation.jl:1227
typeinf_nocycle at ./compiler/abstractinterpretation.jl:1283
typeinf at ./compiler/typeinfer.jl:12
typeinf_edge at ./compiler/typeinfer.jl:488
abstract_call_method at ./compiler/abstractinterpretation.jl:404
abstract_call_gf_by_type at ./compiler/abstractinterpretation.jl:101
abstract_call_known at ./compiler/abstractinterpretation.jl:873
abstract_call at ./compiler/abstractinterpretation.jl:895
abstract_call at ./compiler/abstractinterpretation.jl:880
abstract_eval at ./compiler/abstractinterpretation.jl:974
typeinf_local at ./compiler/abstractinterpretation.jl:1227
typeinf_nocycle at ./compiler/abstractinterpretation.jl:1283
typeinf at ./compiler/typeinfer.jl:12
typeinf_edge at ./compiler/typeinfer.jl:488
abstract_call_method at ./compiler/abstractinterpretation.jl:404
abstract_call_gf_by_type at ./compiler/abstractinterpretation.jl:101
abstract_call_known at ./compiler/abstractinterpretation.jl:873
abstract_call at ./compiler/abstractinterpretation.jl:895
abstract_call at ./compiler/abstractinterpretation.jl:880
abstract_eval at ./compiler/abstractinterpretation.jl:974
typeinf_local at ./compiler/abstractinterpretation.jl:1213
typeinf_nocycle at ./compiler/abstractinterpretation.jl:1283
typeinf at ./compiler/typeinfer.jl:12
typeinf_edge at ./compiler/typeinfer.jl:488
abstract_call_method at ./compiler/abstractinterpretation.jl:404
abstract_call_gf_by_type at ./compiler/abstractinterpretation.jl:101
abstract_call_known at ./compiler/abstractinterpretation.jl:873
abstract_call at ./compiler/abstractinterpretation.jl:895
abstract_call at ./compiler/abstractinterpretation.jl:880
abstract_eval at ./compiler/abstractinterpretation.jl:974
typeinf_local at ./compiler/abstractinterpretation.jl:1227
typeinf_nocycle at ./compiler/abstractinterpretation.jl:1283
typeinf at ./compiler/typeinfer.jl:12
typeinf_edge at ./compiler/typeinfer.jl:488
abstract_call_method at ./compiler/abstractinterpretation.jl:404
abstract_call_gf_by_type at ./compiler/abstractinterpretation.jl:101
abstract_call_known at ./compiler/abstractinterpretation.jl:873
abstract_call at ./compiler/abstractinterpretation.jl:895
abstract_call at ./compiler/abstractinterpretation.jl:880
abstract_eval at ./compiler/abstractinterpretation.jl:974
typeinf_local at ./compiler/abstractinterpretation.jl:1227
typeinf_nocycle at ./compiler/abstractinterpretation.jl:1295
typeinf at ./compiler/typeinfer.jl:12
typeinf_edge at ./compiler/typeinfer.jl:488
abstract_call_method at ./compiler/abstractinterpretation.jl:404
abstract_call_gf_by_type at ./compiler/abstractinterpretation.jl:101
abstract_call_known at ./compiler/abstractinterpretation.jl:873
abstract_call at ./compiler/abstractinterpretation.jl:895
abstract_call at ./compiler/abstractinterpretation.jl:880
abstract_eval at ./compiler/abstractinterpretation.jl:974
typeinf_local at ./compiler/abstractinterpretation.jl:1227
typeinf_nocycle at ./compiler/abstractinterpretation.jl:1283
typeinf at ./compiler/typeinfer.jl:12
typeinf_edge at ./compiler/typeinfer.jl:488
abstract_call_method at ./compiler/abstractinterpretation.jl:404
abstract_call_gf_by_type at ./compiler/abstractinterpretation.jl:101
abstract_call_known at ./compiler/abstractinterpretation.jl:873
abstract_call at ./compiler/abstractinterpretation.jl:895
abstract_call at ./compiler/abstractinterpretation.jl:880
abstract_eval at ./compiler/abstractinterpretation.jl:974
typeinf_local at ./compiler/abstractinterpretation.jl:1227
typeinf_nocycle at ./compiler/abstractinterpretation.jl:1283
typeinf at ./compiler/typeinfer.jl:12
typeinf_edge at ./compiler/typeinfer.jl:488
abstract_call_method at ./compiler/abstractinterpretation.jl:404
abstract_call_gf_by_type at ./compiler/abstractinterpretation.jl:101
abstract_call_known at ./compiler/abstractinterpretation.jl:873
abstract_call at ./compiler/abstractinterpretation.jl:895
abstract_call at ./compiler/abstractinterpretation.jl:880
abstract_eval at ./compiler/abstractinterpretation.jl:974
typeinf_local at ./compiler/abstractinterpretation.jl:1227
typeinf_nocycle at ./compiler/abstractinterpretation.jl:1283
typeinf at ./compiler/typeinfer.jl:12
typeinf_edge at ./compiler/typeinfer.jl:488
abstract_call_method at ./compiler/abstractinterpretation.jl:404
abstract_call_gf_by_type at ./compiler/abstractinterpretation.jl:101
abstract_call_known at ./compiler/abstractinterpretation.jl:873
abstract_call at ./compiler/abstractinterpretation.jl:895
abstract_call at ./compiler/abstractinterpretation.jl:880
abstract_eval at ./compiler/abstractinterpretation.jl:974
typeinf_local at ./compiler/abstractinterpretation.jl:1227
typeinf_nocycle at ./compiler/abstractinterpretation.jl:1283
typeinf at ./compiler/typeinfer.jl:12
typeinf_edge at ./compiler/typeinfer.jl:488
abstract_call_method at ./compiler/abstractinterpretation.jl:404
abstract_call_gf_by_type at ./compiler/abstractinterpretation.jl:101
abstract_call_known at ./compiler/abstractinterpretation.jl:873
abstract_call at ./compiler/abstractinterpretation.jl:895
abstract_call at ./compiler/abstractinterpretation.jl:880
abstract_eval at ./compiler/abstractinterpretation.jl:974
typeinf_local at ./compiler/abstractinterpretation.jl:1213
typeinf_nocycle at ./compiler/abstractinterpretation.jl:1283
typeinf at ./compiler/typeinfer.jl:12
typeinf_edge at ./compiler/typeinfer.jl:488
abstract_call_method at ./compiler/abstractinterpretation.jl:404
abstract_call_gf_by_type at ./compiler/abstractinterpretation.jl:101
abstract_call_known at ./compiler/abstractinterpretation.jl:873
abstract_call at ./compiler/abstractinterpretation.jl:895
abstract_call at ./compiler/abstractinterpretation.jl:880
abstract_eval at ./compiler/abstractinterpretation.jl:974
typeinf_local at ./compiler/abstractinterpretation.jl:1213
typeinf_nocycle at ./compiler/abstractinterpretation.jl:1283
typeinf at ./compiler/typeinfer.jl:12
typeinf_edge at ./compiler/typeinfer.jl:488
abstract_call_method at ./compiler/abstractinterpretation.jl:404
abstract_call_gf_by_type at ./compiler/abstractinterpretation.jl:101
abstract_call_known at ./compiler/abstractinterpretation.jl:873
abstract_call at ./compiler/abstractinterpretation.jl:895
abstract_call at ./compiler/abstractinterpretation.jl:880
abstract_eval at ./compiler/abstractinterpretation.jl:974
typeinf_local at ./compiler/abstractinterpretation.jl:1213
typeinf_nocycle at ./compiler/abstractinterpretation.jl:1283
typeinf at ./compiler/typeinfer.jl:12
typeinf_edge at ./compiler/typeinfer.jl:488
abstract_call_method at ./compiler/abstractinterpretation.jl:404
abstract_call_gf_by_type at ./compiler/abstractinterpretation.jl:101
abstract_call_known at ./compiler/abstractinterpretation.jl:873
abstract_call at ./compiler/abstractinterpretation.jl:895
abstract_call at ./compiler/abstractinterpretation.jl:880
abstract_eval at ./compiler/abstractinterpretation.jl:974
typeinf_local at ./compiler/abstractinterpretation.jl:1213
typeinf_nocycle at ./compiler/abstractinterpretation.jl:1283
typeinf at ./compiler/typeinfer.jl:12
typeinf_edge at ./compiler/typeinfer.jl:488
abstract_call_method at ./compiler/abstractinterpretation.jl:404
abstract_call_gf_by_type at ./compiler/abstractinterpretation.jl:101
abstract_call_known at ./compiler/abstractinterpretation.jl:873
abstract_call at ./compiler/abstractinterpretation.jl:895
abstract_call at ./compiler/abstractinterpretation.jl:880
abstract_eval at ./compiler/abstractinterpretation.jl:974
typeinf_local at ./compiler/abstractinterpretation.jl:1227
typeinf_nocycle at ./compiler/abstractinterpretation.jl:1283
typeinf at ./compiler/typeinfer.jl:12
typeinf_edge at ./compiler/typeinfer.jl:488
abstract_call_method at ./compiler/abstractinterpretation.jl:404
abstract_call_gf_by_type at ./compiler/abstractinterpretation.jl:101
abstract_call_known at ./compiler/abstractinterpretation.jl:873
abstract_call at ./compiler/abstractinterpretation.jl:895
abstract_call at ./compiler/abstractinterpretation.jl:880
abstract_eval at ./compiler/abstractinterpretation.jl:974
typeinf_local at ./compiler/abstractinterpretation.jl:1227
typeinf_nocycle at ./compiler/abstractinterpretation.jl:1283
typeinf at ./compiler/typeinfer.jl:12
typeinf_edge at ./compiler/typeinfer.jl:488
abstract_call_method at ./compiler/abstractinterpretation.jl:404
abstract_call_gf_by_type at ./compiler/abstractinterpretation.jl:101
abstract_call_known at ./compiler/abstractinterpretation.jl:873
abstract_call at ./compiler/abstractinterpretation.jl:895
abstract_call at ./compiler/abstractinterpretation.jl:880
abstract_eval at ./compiler/abstractinterpretation.jl:974
typeinf_local at ./compiler/abstractinterpretation.jl:1227
typeinf_nocycle at ./compiler/abstractinterpretation.jl:1283
typeinf at ./compiler/typeinfer.jl:12
typeinf_edge at ./compiler/typeinfer.jl:488
abstract_call_method at ./compiler/abstractinterpretation.jl:404
abstract_call_gf_by_type at ./compiler/abstractinterpretation.jl:101
abstract_call_known at ./compiler/abstractinterpretation.jl:873
abstract_call at ./compiler/abstractinterpretation.jl:895
abstract_call at ./compiler/abstractinterpretation.jl:880
abstract_eval at ./compiler/abstractinterpretation.jl:974
typeinf_local at ./compiler/abstractinterpretation.jl:1213
typeinf_nocycle at ./compiler/abstractinterpretation.jl:1283
typeinf at ./compiler/typeinfer.jl:12
typeinf_edge at ./compiler/typeinfer.jl:488
abstract_call_method at ./compiler/abstractinterpretation.jl:404
abstract_call_gf_by_type at ./compiler/abstractinterpretation.jl:101
abstract_call_known at ./compiler/abstractinterpretation.jl:873
abstract_call at ./compiler/abstractinterpretation.jl:895
abstract_call at ./compiler/abstractinterpretation.jl:880
abstract_eval at ./compiler/abstractinterpretation.jl:974
typeinf_local at ./compiler/abstractinterpretation.jl:1227
typeinf_nocycle at ./compiler/abstractinterpretation.jl:1283
typeinf at ./compiler/typeinfer.jl:12
typeinf_ext at ./compiler/typeinfer.jl:574
typeinf_ext at ./compiler/typeinfer.jl:605
jfptr_typeinf_ext_1.clone_1 at /home/wbhart/julia-1.4.2/lib/julia/sys.so (unknown line)
_jl_invoke at /buildworker/worker/package_linux64/build/src/gf.c:2145 [inlined]
jl_apply_generic at /buildworker/worker/package_linux64/build/src/gf.c:2323
jl_apply at /buildworker/worker/package_linux64/build/src/julia.h:1700 [inlined]
jl_type_infer at /buildworker/worker/package_linux64/build/src/gf.c:213
jl_compile_method_internal at /buildworker/worker/package_linux64/build/src/gf.c:1888
_jl_invoke at /buildworker/worker/package_linux64/build/src/gf.c:2154 [inlined]
jl_apply_generic at /buildworker/worker/package_linux64/build/src/gf.c:2323
jl_apply at /buildworker/worker/package_linux64/build/src/julia.h:1700 [inlined]
do_call at /buildworker/worker/package_linux64/build/src/interpreter.c:369
eval_value at /buildworker/worker/package_linux64/build/src/interpreter.c:458
eval_body at /buildworker/worker/package_linux64/build/src/interpreter.c:680
eval_body at /buildworker/worker/package_linux64/build/src/interpreter.c:744
eval_body at /buildworker/worker/package_linux64/build/src/interpreter.c:744
jl_interpret_toplevel_thunk at /buildworker/worker/package_linux64/build/src/interpreter.c:911
macro expansion at /home/wbhart/.julia/dev/Oscar/test/Polymake/nmbthy-test.jl:16 [inlined]
macro expansion at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.4/Test/src/Test.jl:1113 [inlined]
top-level scope at /home/wbhart/.julia/dev/Oscar/test/Polymake/nmbthy-test.jl:13
jl_toplevel_eval_flex at /buildworker/worker/package_linux64/build/src/toplevel.c:819
jl_parse_eval_all at /buildworker/worker/package_linux64/build/src/ast.c:872
jl_load at /buildworker/worker/package_linux64/build/src/toplevel.c:877
include at ./client.jl:439
_jl_invoke at /buildworker/worker/package_linux64/build/src/gf.c:2145 [inlined]
jl_apply_generic at /buildworker/worker/package_linux64/build/src/gf.c:2323
jl_apply at /buildworker/worker/package_linux64/build/src/julia.h:1700 [inlined]
do_call at /buildworker/worker/package_linux64/build/src/interpreter.c:369
eval_value at /buildworker/worker/package_linux64/build/src/interpreter.c:458
eval_stmt_value at /buildworker/worker/package_linux64/build/src/interpreter.c:409 [inlined]
eval_body at /buildworker/worker/package_linux64/build/src/interpreter.c:817
jl_interpret_toplevel_thunk at /buildworker/worker/package_linux64/build/src/interpreter.c:911
top-level scope at none:7
jl_toplevel_eval_flex at /buildworker/worker/package_linux64/build/src/toplevel.c:819
jl_parse_eval_all at /buildworker/worker/package_linux64/build/src/ast.c:872
jl_load at /buildworker/worker/package_linux64/build/src/toplevel.c:877
include at ./client.jl:439
_jl_invoke at /buildworker/worker/package_linux64/build/src/gf.c:2145 [inlined]
jl_apply_generic at /buildworker/worker/package_linux64/build/src/gf.c:2323
jl_apply at /buildworker/worker/package_linux64/build/src/julia.h:1700 [inlined]
do_call at /buildworker/worker/package_linux64/build/src/interpreter.c:369
eval_value at /buildworker/worker/package_linux64/build/src/interpreter.c:458
eval_stmt_value at /buildworker/worker/package_linux64/build/src/interpreter.c:409 [inlined]
eval_body at /buildworker/worker/package_linux64/build/src/interpreter.c:817
jl_interpret_toplevel_thunk at /buildworker/worker/package_linux64/build/src/interpreter.c:911
top-level scope at none:6
jl_toplevel_eval_flex at /buildworker/worker/package_linux64/build/src/toplevel.c:819
jl_toplevel_eval_flex at /buildworker/worker/package_linux64/build/src/toplevel.c:769
jl_toplevel_eval_in at /buildworker/worker/package_linux64/build/src/toplevel.c:848
eval at ./boot.jl:331
_jl_invoke at /buildworker/worker/package_linux64/build/src/gf.c:2145 [inlined]
jl_apply_generic at /buildworker/worker/package_linux64/build/src/gf.c:2323
exec_options at ./client.jl:264
_start at ./client.jl:484
jfptr__start_2075.clone_1 at /home/wbhart/julia-1.4.2/lib/julia/sys.so (unknown line)
_jl_invoke at /buildworker/worker/package_linux64/build/src/gf.c:2145 [inlined]
jl_apply_generic at /buildworker/worker/package_linux64/build/src/gf.c:2323
jl_apply at /buildworker/worker/package_linux64/build/ui/../src/julia.h:1700 [inlined]
true_main at /buildworker/worker/package_linux64/build/ui/repl.c:96
main at /buildworker/worker/package_linux64/build/ui/repl.c:217
__libc_start_main at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
_start at /home/wbhart/julia-1.4.2/bin/julia (unknown line)
Test Summary:          | Pass  Total
Polymake.norm_equation |    1      1
Test Summary:                   | Pass  Total
GAPGroups_interface_conformance |  183    183
Iteration: Error During Test at /home/wbhart/.julia/dev/Oscar/test/Groups/testing.jl:178
  Got exception outside of a @test
  failed to convert GapObj to any known type:
   GAP: ()
  Stacktrace:
   [1] gap_to_julia(::Main.ForeignGAP.MPtr; recursive::Bool) at /home/wbhart/.julia/packages/GAP/7sFvk/src/gap_to_julia.jl:311
   [2] #gap_to_julia#9 at /home/wbhart/.julia/packages/GAP/7sFvk/src/gap_to_julia.jl:57 [inlined]
   [3] #gap_to_julia#7 at /home/wbhart/.julia/packages/GAP/7sFvk/src/gap_to_julia.jl:53 [inlined]
   [4] #13 at /home/wbhart/.julia/packages/GAP/7sFvk/src/gap_to_julia.jl:163 [inlined]
   [5] get!(::GAP.var"#13#14"{Any,IdDict{Any,Any},Main.ForeignGAP.MPtr}, ::IdDict{Any,Any}, ::Any) at ./abstractdict.jl:663
   [6] gap_to_julia(::Type{Array{Any,1}}, ::Main.ForeignGAP.MPtr, ::IdDict{Any,Any}; recursive::Bool) at /home/wbhart/.julia/packages/GAP/7sFvk/src/gap_to_julia.jl:162
   [7] gap_to_julia(::Main.ForeignGAP.MPtr; recursive::Bool) at /home/wbhart/.julia/packages/GAP/7sFvk/src/gap_to_julia.jl:309
   [8] gap_to_julia(::Main.ForeignGAP.MPtr) at /home/wbhart/.julia/packages/GAP/7sFvk/src/gap_to_julia.jl:299
   [9] elements(::PermGroup) at /home/wbhart/.julia/dev/Oscar/src/Groups/GAPGroups.jl:67
   [10] macro expansion at /home/wbhart/.julia/dev/Oscar/test/Groups/testing.jl:181 [inlined]
   [11] macro expansion at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.4/Test/src/Test.jl:1113 [inlined]
   [12] top-level scope at /home/wbhart/.julia/dev/Oscar/test/Groups/testing.jl:179
   [13] include(::String) at ./client.jl:439
   [14] top-level scope at /home/wbhart/.julia/dev/Oscar/test/Groups/runtests.jl:4
   [15] include(::String) at ./client.jl:439
   [16] top-level scope at none:8
   [17] include(::String) at ./client.jl:439
   [18] top-level scope at none:6
   [19] eval(::Module, ::Any) at ./boot.jl:331
   [20] exec_options(::Base.JLOptions) at ./client.jl:264
   [21] _start() at ./client.jl:484

Test Summary: | Error  Total
Iteration     |     1      1
ERROR: LoadError: LoadError: LoadError: Some tests did not pass: 0 passed, 0 failed, 1 errored, 0 broken.
in expression starting at /home/wbhart/.julia/dev/Oscar/test/Groups/testing.jl:178
in expression starting at /home/wbhart/.julia/dev/Oscar/test/Groups/runtests.jl:4
in expression starting at /home/wbhart/.julia/dev/Oscar/test/runtests.jl:8
ERROR: Package Oscar errored during testing
Stacktrace:
 [1] pkgerror(::String, ::Vararg{String,N} where N) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.4/Pkg/src/Types.jl:53
 [2] test(::Pkg.Types.Context, ::Array{Pkg.Types.PackageSpec,1}; coverage::Bool, julia_args::Cmd, test_args::Cmd, test_fn::Nothing) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.4/Pkg/src/Operations.jl:1510
 [3] test(::Pkg.Types.Context, ::Array{Pkg.Types.PackageSpec,1}; coverage::Bool, test_fn::Nothing, julia_args::Cmd, test_args::Cmd, kwargs::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.4/Pkg/src/API.jl:316
 [4] test(::Pkg.Types.Context, ::Array{Pkg.Types.PackageSpec,1}) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.4/Pkg/src/API.jl:303
 [5] #test#68 at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.4/Pkg/src/API.jl:297 [inlined]
 [6] test at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.4/Pkg/src/API.jl:297 [inlined]
 [7] #test#67 at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.4/Pkg/src/API.jl:296 [inlined]
 [8] test at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.4/Pkg/src/API.jl:296 [inlined]
 [9] test(::String; kwargs::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.4/Pkg/src/API.jl:295
 [10] test(::String) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.4/Pkg/src/API.jl:295
 [11] top-level scope at REPL[8]:1
martinholters commented 4 years ago

It's this assertion that is triggered: https://github.com/JuliaLang/julia/blob/6cd329c371c1db3d9876bc337e82e274e50420e8/base/compiler/typelimits.jl#L23 (And then it errors because it can't format it's message, which is unfortunate, because it makes it a bit harder to pinpoint the problem.)

The situation that leads to the assertion being triggered is this:

julia> t = Tuple{typeof(Hecke.ideal), Hecke.NfRelOrd{T, S, U}, U, U, S, S, Bool} where U where S<:(Hecke.NfRelOrdIdl{T, S, U} where U where S where T) where T
Tuple{typeof(ideal),Hecke.NfRelOrd{T,S,U},U,U,S,S,Bool} where U where S<:(Hecke.NfRelOrdIdl{T,S,U} where U where S where T) where T

julia> compare = Tuple{typeof(Hecke.ideal), Hecke.NfRelOrd{T, S, U}, U, U, S, S, Bool} where U where S where T
Tuple{typeof(ideal),Hecke.NfRelOrd{T,S,U},U,U,S,S,Bool} where U where S where T

julia> source = Core.svec() # more complicated in reality, but irrelevant
svec()

julia> r = Core.Compiler._limit_type_size(t, compare, source, 1, 8)
Tuple{typeof(ideal),Hecke.NfRelOrd,U,U,Hecke.NfRelOrdIdl,Hecke.NfRelOrdIdl,Bool} where U

julia> t <: r
false

The problem here is that U is subject to the diagonal rule in r, but it isn't in t.

rfourquet commented 4 years ago

[The issue] was fixed "by accident" (?) on the Julia master branch by PR #30623

I believe you meant #36200.

vtjnash commented 4 years ago

I'm not certain if this is fixable without #24614

martinholters commented 4 years ago

In this case, Tuple{typeof(ideal),Hecke.NfRelOrd,U1,U2,Hecke.NfRelOrdIdl,Hecke.NfRelOrdIdl,Bool} where U1 where U2 would be a valid answer, I guess. We probably could try to figure out whether any variable is subject to the diagonal rule in the result but not in the input and then do this kind of replacement. But that seams finicky and somewhat expensive.

In the meantime, maybe we could replace the assertion with some fallback that widens even more aggressively.

rikhuijzer commented 3 years ago

I had a similar type error as the one reported here. For me, it was solved by switching from Julia 1.5.3 to 1.6.