Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

5.2.0~alpha1: Issues with (x : Subtype.t list :> Type.t list) in presence of multiple destructive substitutions #12982

Closed
kit-ty-kate opened this issue Feb 19, 2024 · 7 comments

Comments

@kit-ty-kate
Copy link
Member

When testing 5.2.0~alpha1 against opam-repository i saw these two Janestreet packages that compiles just fine on 5.1 but fails with that 5.2 release:

#=== ERROR while compiling ecaml.v0.16.0 ======================================#
# context              2.2.0~beta2~dev | linux/x86_64 | ocaml-variants.5.2.0+trunk | file:///home/opam/opam-repository
# path                 ~/.opam/5.2/.opam-switch/build/ecaml.v0.16.0
# command              ~/.opam/5.2/bin/dune build -p ecaml -j 1
# exit-code            1
# env-file             ~/.opam/log/ecaml-19-467667.env
# output-file          ~/.opam/log/ecaml-19-467667.out
### output ###
# (cd _build/default && /home/opam/.opam/5.2/bin/ocamlc.opt -w -40 -g -bin-annot -I ecaml_value/src/.ecaml_value.objs/byte -I /home/opam/.opam/5.2/lib/async_kernel -I /home/opam/.opam/5.2/lib/async_kernel/config -I /home/opam/.opam/5.2/lib/async_kernel/eager_deferred -I /home/opam/.opam/5.2/lib/async_kernel/read_write_pair -I /home/opam/.opam/5.2/lib/async_unix -I /home/opam/.opam/5.2/lib/async_unix/thread_pool -I /home/opam/.opam/5.2/lib/async_unix/thread_safe_ivar -I /home/opam/.opam/5.2/lib/base -I /home/opam/.opam/5.2/lib/base/base_internalhash_types -I /home/opam/.opam/5.2/lib/base/caml -I /home/opam/.opam/5.2/lib/base/md5 -I /home/opam/.opam/5.2/lib/base/shadow_stdlib -I /home/opam/.opam/5.2/lib/base_bigstring -I /home/opam/.opam/5.2/lib/base_quickcheck -I /home/opam/.opam/5.2/lib/base_quickcheck/ppx_quickcheck/runtime -I /home/opam/.opam/5.2/lib/bin_prot -I /home/opam/.opam/5.2/lib/bin_prot/shape -I /home/opam/.opam/5.2/lib/core -I /home/opam/.opam/5.2/lib/core/base_for_tests -I /home/opam/.opam/5.2/lib/core/command -I /home/opam/.opam/5.2/lib/core/filename_base -I /home/opam/.opam/5.2/lib/core/heap_block -I /home/opam/.opam/5.2/lib/core/univ_map -I /home/opam/.opam/5.2/lib/core/validate -I /home/opam/.opam/5.2/lib/core_kernel/bounded_int_table -I /home/opam/.opam/5.2/lib/core_kernel/caml_threads -I /home/opam/.opam/5.2/lib/core_kernel/caml_unix -I /home/opam/.opam/5.2/lib/core_kernel/enum -I /home/opam/.opam/5.2/lib/core_kernel/flags -I /home/opam/.opam/5.2/lib/core_kernel/iobuf -I /home/opam/.opam/5.2/lib/core_kernel/moption -I /home/opam/.opam/5.2/lib/core_kernel/pairing_heap -I /home/opam/.opam/5.2/lib/core_kernel/sexp_hidden_in_test -I /home/opam/.opam/5.2/lib/core_kernel/thread_pool_cpu_affinity -I /home/opam/.opam/5.2/lib/core_kernel/thread_safe_queue -I /home/opam/.opam/5.2/lib/core_kernel/timing_wheel -I /home/opam/.opam/5.2/lib/core_kernel/tuple_pool -I /home/opam/.opam/5.2/lib/core_kernel/univ -I /home/opam/.opam/5.2/lib/core_kernel/uopt -I /home/opam/.opam/5.2/lib/core_kernel/uuid -I /home/opam/.opam/5.2/lib/core_unix -I /home/opam/.opam/5.2/lib/core_unix/bigstring_unix -I /home/opam/.opam/5.2/lib/core_unix/core_thread -I /home/opam/.opam/5.2/lib/core_unix/error_checking_mutex -I /home/opam/.opam/5.2/lib/core_unix/filename_unix -I /home/opam/.opam/5.2/lib/core_unix/iobuf_unix -I /home/opam/.opam/5.2/lib/core_unix/linux_ext -I /home/opam/.opam/5.2/lib/core_unix/nano_mutex -I /home/opam/.opam/5.2/lib/core_unix/ocaml_c_utils -I /home/opam/.opam/5.2/lib/core_unix/signal_unix -I /home/opam/.opam/5.2/lib/core_unix/squeue -I /home/opam/.opam/5.2/lib/core_unix/sys_unix -I /home/opam/.opam/5.2/lib/core_unix/time_float_unix -I /home/opam/.opam/5.2/lib/core_unix/time_ns_unix -I /home/opam/.opam/5.2/lib/core_unix/time_stamp_counter -I /home/opam/.opam/5.2/lib/core_unix/uuid -I /home/opam/.opam/5.2/lib/fieldslib -I /home/opam/.opam/5.2/lib/int_repr -I /home/opam/.opam/5.2/lib/jane-street-headers -I /home/opam/.opam/5.2/lib/ocaml/threads -I /home/opam/.opam/5.2/lib/ocaml/unix -I /home/opam/.opam/5.2/lib/ocaml_intrinsics -I /home/opam/.opam/5.2/lib/parsexp -I /home/opam/.opam/5.2/lib/ppx_assert/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_bench/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_compare/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_enumerate/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_expect/collector -I /home/opam/.opam/5.2/lib/ppx_expect/common -I /home/opam/.opam/5.2/lib/ppx_expect/config -I /home/opam/.opam/5.2/lib/ppx_expect/config_types -I /home/opam/.opam/5.2/lib/ppx_hash/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_here/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_inline_test/config -I /home/opam/.opam/5.2/lib/ppx_inline_test/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_log/types -I /home/opam/.opam/5.2/lib/ppx_module_timer/runtime -I /home/opam/.opam/5.2/lib/ppx_sexp_conv/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_stable_witness/runtime -I /home/opam/.opam/5.2/lib/ppx_stable_witness/stable_witness -I /home/opam/.opam/5.2/lib/sexplib -I /home/opam/.opam/5.2/lib/sexplib/unix -I /home/opam/.opam/5.2/lib/sexplib0 -I /home/opam/.opam/5.2/lib/spawn -I /home/opam/.opam/5.2/lib/splittable_random -I /home/opam/.opam/5.2/lib/stdio -I /home/opam/.opam/5.2/lib/time_now -I /home/opam/.opam/5.2/lib/timezone -I /home/opam/.opam/5.2/lib/typerep -I /home/opam/.opam/5.2/lib/variantslib -I nested_profile/src/.nested_profile.objs/byte -intf-suffix .ml -no-alias-deps -open Ecaml_value__ -o ecaml_value/src/.ecaml_value.objs/byte/ecaml_value__Form.cmo -c -impl ecaml_value/src/form.pp.ml)
# File "ecaml_value/src/form.ml", line 84, characters 19-54:
# 84 |       |> (fun x -> (x : Symbol.t list :> Value.t list))
#                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# Error: This expression has type "Ecaml_value__.Value.t list"
#        but an expression was expected of type "Ecaml_value__.Symbol.t list"
#        Type "Ecaml_value__.Value.t" = "Ecaml_value__Value0.t"
#        is not compatible with type
#          "Ecaml_value__.Symbol.t" = "Ecaml_value__Symbol.t"
# (cd _build/default && /home/opam/.opam/5.2/bin/ocamlopt.opt -w -40 -g -I ecaml_value/src/.ecaml_value.objs/byte -I ecaml_value/src/.ecaml_value.objs/native -I /home/opam/.opam/5.2/lib/async_kernel -I /home/opam/.opam/5.2/lib/async_kernel/config -I /home/opam/.opam/5.2/lib/async_kernel/eager_deferred -I /home/opam/.opam/5.2/lib/async_kernel/read_write_pair -I /home/opam/.opam/5.2/lib/async_unix -I /home/opam/.opam/5.2/lib/async_unix/thread_pool -I /home/opam/.opam/5.2/lib/async_unix/thread_safe_ivar -I /home/opam/.opam/5.2/lib/base -I /home/opam/.opam/5.2/lib/base/base_internalhash_types -I /home/opam/.opam/5.2/lib/base/caml -I /home/opam/.opam/5.2/lib/base/md5 -I /home/opam/.opam/5.2/lib/base/shadow_stdlib -I /home/opam/.opam/5.2/lib/base_bigstring -I /home/opam/.opam/5.2/lib/base_quickcheck -I /home/opam/.opam/5.2/lib/base_quickcheck/ppx_quickcheck/runtime -I /home/opam/.opam/5.2/lib/bin_prot -I /home/opam/.opam/5.2/lib/bin_prot/shape -I /home/opam/.opam/5.2/lib/core -I /home/opam/.opam/5.2/lib/core/base_for_tests -I /home/opam/.opam/5.2/lib/core/command -I /home/opam/.opam/5.2/lib/core/filename_base -I /home/opam/.opam/5.2/lib/core/heap_block -I /home/opam/.opam/5.2/lib/core/univ_map -I /home/opam/.opam/5.2/lib/core/validate -I /home/opam/.opam/5.2/lib/core_kernel/bounded_int_table -I /home/opam/.opam/5.2/lib/core_kernel/caml_threads -I /home/opam/.opam/5.2/lib/core_kernel/caml_unix -I /home/opam/.opam/5.2/lib/core_kernel/enum -I /home/opam/.opam/5.2/lib/core_kernel/flags -I /home/opam/.opam/5.2/lib/core_kernel/iobuf -I /home/opam/.opam/5.2/lib/core_kernel/moption -I /home/opam/.opam/5.2/lib/core_kernel/pairing_heap -I /home/opam/.opam/5.2/lib/core_kernel/sexp_hidden_in_test -I /home/opam/.opam/5.2/lib/core_kernel/thread_pool_cpu_affinity -I /home/opam/.opam/5.2/lib/core_kernel/thread_safe_queue -I /home/opam/.opam/5.2/lib/core_kernel/timing_wheel -I /home/opam/.opam/5.2/lib/core_kernel/tuple_pool -I /home/opam/.opam/5.2/lib/core_kernel/univ -I /home/opam/.opam/5.2/lib/core_kernel/uopt -I /home/opam/.opam/5.2/lib/core_kernel/uuid -I /home/opam/.opam/5.2/lib/core_unix -I /home/opam/.opam/5.2/lib/core_unix/bigstring_unix -I /home/opam/.opam/5.2/lib/core_unix/core_thread -I /home/opam/.opam/5.2/lib/core_unix/error_checking_mutex -I /home/opam/.opam/5.2/lib/core_unix/filename_unix -I /home/opam/.opam/5.2/lib/core_unix/iobuf_unix -I /home/opam/.opam/5.2/lib/core_unix/linux_ext -I /home/opam/.opam/5.2/lib/core_unix/nano_mutex -I /home/opam/.opam/5.2/lib/core_unix/ocaml_c_utils -I /home/opam/.opam/5.2/lib/core_unix/signal_unix -I /home/opam/.opam/5.2/lib/core_unix/squeue -I /home/opam/.opam/5.2/lib/core_unix/sys_unix -I /home/opam/.opam/5.2/lib/core_unix/time_float_unix -I /home/opam/.opam/5.2/lib/core_unix/time_ns_unix -I /home/opam/.opam/5.2/lib/core_unix/time_stamp_counter -I /home/opam/.opam/5.2/lib/core_unix/uuid -I /home/opam/.opam/5.2/lib/fieldslib -I /home/opam/.opam/5.2/lib/int_repr -I /home/opam/.opam/5.2/lib/jane-street-headers -I /home/opam/.opam/5.2/lib/ocaml/threads -I /home/opam/.opam/5.2/lib/ocaml/unix -I /home/opam/.opam/5.2/lib/ocaml_intrinsics -I /home/opam/.opam/5.2/lib/parsexp -I /home/opam/.opam/5.2/lib/ppx_assert/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_bench/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_compare/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_enumerate/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_expect/collector -I /home/opam/.opam/5.2/lib/ppx_expect/common -I /home/opam/.opam/5.2/lib/ppx_expect/config -I /home/opam/.opam/5.2/lib/ppx_expect/config_types -I /home/opam/.opam/5.2/lib/ppx_hash/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_here/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_inline_test/config -I /home/opam/.opam/5.2/lib/ppx_inline_test/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_log/types -I /home/opam/.opam/5.2/lib/ppx_module_timer/runtime -I /home/opam/.opam/5.2/lib/ppx_sexp_conv/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_stable_witness/runtime -I /home/opam/.opam/5.2/lib/ppx_stable_witness/stable_witness -I /home/opam/.opam/5.2/lib/sexplib -I /home/opam/.opam/5.2/lib/sexplib/unix -I /home/opam/.opam/5.2/lib/sexplib0 -I /home/opam/.opam/5.2/lib/spawn -I /home/opam/.opam/5.2/lib/splittable_random -I /home/opam/.opam/5.2/lib/stdio -I /home/opam/.opam/5.2/lib/time_now -I /home/opam/.opam/5.2/lib/timezone -I /home/opam/.opam/5.2/lib/typerep -I /home/opam/.opam/5.2/lib/variantslib -I nested_profile/src/.nested_profile.objs/byte -I nested_profile/src/.nested_profile.objs/native -intf-suffix .ml -no-alias-deps -open Ecaml_value__ -o ecaml_value/src/.ecaml_value.objs/native/ecaml_value__Form.cmx -c -impl ecaml_value/src/form.pp.ml)
# File "ecaml_value/src/form.ml", line 84, characters 19-54:
# 84 |       |> (fun x -> (x : Symbol.t list :> Value.t list))
#                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# Error: This expression has type "Ecaml_value__.Value.t list"
#        but an expression was expected of type "Ecaml_value__.Symbol.t list"
#        Type "Ecaml_value__.Value.t" = "Ecaml_value__Value0.t"
#        is not compatible with type
#          "Ecaml_value__.Symbol.t" = "Ecaml_value__Symbol.t"
#=== ERROR while compiling file_path.v0.16.0 ==================================#
# context              2.2.0~beta2~dev | linux/x86_64 | ocaml-variants.5.2.0+trunk | file:///home/opam/opam-repository
# path                 ~/.opam/5.2/.opam-switch/build/file_path.v0.16.0
# command              ~/.opam/5.2/bin/dune build -p file_path -j 1
# exit-code            1
# env-file             ~/.opam/log/file_path-19-53c44e.env
# output-file          ~/.opam/log/file_path-19-53c44e.out
### output ###
# (cd _build/default && /home/opam/.opam/5.2/bin/ocamlc.opt -w -40 -g -bin-annot -I src/.file_path.objs/byte -I /home/opam/.opam/5.2/lib/base -I /home/opam/.opam/5.2/lib/base/base_internalhash_types -I /home/opam/.opam/5.2/lib/base/caml -I /home/opam/.opam/5.2/lib/base/md5 -I /home/opam/.opam/5.2/lib/base/shadow_stdlib -I /home/opam/.opam/5.2/lib/base_bigstring -I /home/opam/.opam/5.2/lib/base_quickcheck -I /home/opam/.opam/5.2/lib/base_quickcheck/ppx_quickcheck/runtime -I /home/opam/.opam/5.2/lib/bin_prot -I /home/opam/.opam/5.2/lib/bin_prot/shape -I /home/opam/.opam/5.2/lib/core -I /home/opam/.opam/5.2/lib/core/base_for_tests -I /home/opam/.opam/5.2/lib/core/command -I /home/opam/.opam/5.2/lib/core/filename_base -I /home/opam/.opam/5.2/lib/core/heap_block -I /home/opam/.opam/5.2/lib/core/univ_map -I /home/opam/.opam/5.2/lib/core/validate -I /home/opam/.opam/5.2/lib/core_kernel/nonempty_list -I /home/opam/.opam/5.2/lib/core_kernel/reversed_list -I /home/opam/.opam/5.2/lib/fieldslib -I /home/opam/.opam/5.2/lib/int_repr -I /home/opam/.opam/5.2/lib/jane-street-headers -I /home/opam/.opam/5.2/lib/parsexp -I /home/opam/.opam/5.2/lib/ppx_assert/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_bench/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_compare/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_enumerate/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_expect/collector -I /home/opam/.opam/5.2/lib/ppx_expect/common -I /home/opam/.opam/5.2/lib/ppx_expect/config -I /home/opam/.opam/5.2/lib/ppx_expect/config_types -I /home/opam/.opam/5.2/lib/ppx_hash/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_here/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_inline_test/config -I /home/opam/.opam/5.2/lib/ppx_inline_test/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_log/types -I /home/opam/.opam/5.2/lib/ppx_module_timer/runtime -I /home/opam/.opam/5.2/lib/ppx_sexp_conv/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_stable_witness/runtime -I /home/opam/.opam/5.2/lib/ppx_stable_witness/stable_witness -I /home/opam/.opam/5.2/lib/sexplib -I /home/opam/.opam/5.2/lib/sexplib0 -I /home/opam/.opam/5.2/lib/splittable_random -I /home/opam/.opam/5.2/lib/stdio -I /home/opam/.opam/5.2/lib/time_now -I /home/opam/.opam/5.2/lib/typerep -I /home/opam/.opam/5.2/lib/variantslib -intf-suffix .ml -no-alias-deps -open File_path__ -o src/.file_path.objs/byte/file_path__Relative.cmo -c -impl src/relative.pp.ml)
# File "src/relative.ml", line 20, characters 19-39:
# 20 | let of_part part = (part : Part.t :> t)
#                         ^^^^^^^^^^^^^^^^^^^^
# Error: This expression has type "t" = "File_path__Types.Relative.t"
#        but an expression was expected of type
#          "File_path__.Part.t" = "File_path__Types.Part.t"
# (cd _build/default && /home/opam/.opam/5.2/bin/ocamlopt.opt -w -40 -g -I src/.file_path.objs/byte -I src/.file_path.objs/native -I /home/opam/.opam/5.2/lib/base -I /home/opam/.opam/5.2/lib/base/base_internalhash_types -I /home/opam/.opam/5.2/lib/base/caml -I /home/opam/.opam/5.2/lib/base/md5 -I /home/opam/.opam/5.2/lib/base/shadow_stdlib -I /home/opam/.opam/5.2/lib/base_bigstring -I /home/opam/.opam/5.2/lib/base_quickcheck -I /home/opam/.opam/5.2/lib/base_quickcheck/ppx_quickcheck/runtime -I /home/opam/.opam/5.2/lib/bin_prot -I /home/opam/.opam/5.2/lib/bin_prot/shape -I /home/opam/.opam/5.2/lib/core -I /home/opam/.opam/5.2/lib/core/base_for_tests -I /home/opam/.opam/5.2/lib/core/command -I /home/opam/.opam/5.2/lib/core/filename_base -I /home/opam/.opam/5.2/lib/core/heap_block -I /home/opam/.opam/5.2/lib/core/univ_map -I /home/opam/.opam/5.2/lib/core/validate -I /home/opam/.opam/5.2/lib/core_kernel/nonempty_list -I /home/opam/.opam/5.2/lib/core_kernel/reversed_list -I /home/opam/.opam/5.2/lib/fieldslib -I /home/opam/.opam/5.2/lib/int_repr -I /home/opam/.opam/5.2/lib/jane-street-headers -I /home/opam/.opam/5.2/lib/parsexp -I /home/opam/.opam/5.2/lib/ppx_assert/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_bench/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_compare/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_enumerate/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_expect/collector -I /home/opam/.opam/5.2/lib/ppx_expect/common -I /home/opam/.opam/5.2/lib/ppx_expect/config -I /home/opam/.opam/5.2/lib/ppx_expect/config_types -I /home/opam/.opam/5.2/lib/ppx_hash/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_here/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_inline_test/config -I /home/opam/.opam/5.2/lib/ppx_inline_test/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_log/types -I /home/opam/.opam/5.2/lib/ppx_module_timer/runtime -I /home/opam/.opam/5.2/lib/ppx_sexp_conv/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_stable_witness/runtime -I /home/opam/.opam/5.2/lib/ppx_stable_witness/stable_witness -I /home/opam/.opam/5.2/lib/sexplib -I /home/opam/.opam/5.2/lib/sexplib0 -I /home/opam/.opam/5.2/lib/splittable_random -I /home/opam/.opam/5.2/lib/stdio -I /home/opam/.opam/5.2/lib/time_now -I /home/opam/.opam/5.2/lib/typerep -I /home/opam/.opam/5.2/lib/variantslib -intf-suffix .ml -no-alias-deps -open File_path__ -o src/.file_path.objs/native/file_path__Relative.cmx -c -impl src/relative.pp.ml)
# File "src/relative.ml", line 20, characters 19-39:
# 20 | let of_part part = (part : Part.t :> t)
#                         ^^^^^^^^^^^^^^^^^^^^
# Error: This expression has type "t" = "File_path__Types.Relative.t"
#        but an expression was expected of type
#          "File_path__.Part.t" = "File_path__Types.Part.t"
# (cd _build/default && /home/opam/.opam/5.2/bin/ocamlc.opt -w -40 -g -bin-annot -I src/.file_path.objs/byte -I /home/opam/.opam/5.2/lib/base -I /home/opam/.opam/5.2/lib/base/base_internalhash_types -I /home/opam/.opam/5.2/lib/base/caml -I /home/opam/.opam/5.2/lib/base/md5 -I /home/opam/.opam/5.2/lib/base/shadow_stdlib -I /home/opam/.opam/5.2/lib/base_bigstring -I /home/opam/.opam/5.2/lib/base_quickcheck -I /home/opam/.opam/5.2/lib/base_quickcheck/ppx_quickcheck/runtime -I /home/opam/.opam/5.2/lib/bin_prot -I /home/opam/.opam/5.2/lib/bin_prot/shape -I /home/opam/.opam/5.2/lib/core -I /home/opam/.opam/5.2/lib/core/base_for_tests -I /home/opam/.opam/5.2/lib/core/command -I /home/opam/.opam/5.2/lib/core/filename_base -I /home/opam/.opam/5.2/lib/core/heap_block -I /home/opam/.opam/5.2/lib/core/univ_map -I /home/opam/.opam/5.2/lib/core/validate -I /home/opam/.opam/5.2/lib/core_kernel/nonempty_list -I /home/opam/.opam/5.2/lib/core_kernel/reversed_list -I /home/opam/.opam/5.2/lib/fieldslib -I /home/opam/.opam/5.2/lib/int_repr -I /home/opam/.opam/5.2/lib/jane-street-headers -I /home/opam/.opam/5.2/lib/parsexp -I /home/opam/.opam/5.2/lib/ppx_assert/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_bench/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_compare/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_enumerate/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_expect/collector -I /home/opam/.opam/5.2/lib/ppx_expect/common -I /home/opam/.opam/5.2/lib/ppx_expect/config -I /home/opam/.opam/5.2/lib/ppx_expect/config_types -I /home/opam/.opam/5.2/lib/ppx_hash/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_here/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_inline_test/config -I /home/opam/.opam/5.2/lib/ppx_inline_test/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_log/types -I /home/opam/.opam/5.2/lib/ppx_module_timer/runtime -I /home/opam/.opam/5.2/lib/ppx_sexp_conv/runtime-lib -I /home/opam/.opam/5.2/lib/ppx_stable_witness/runtime -I /home/opam/.opam/5.2/lib/ppx_stable_witness/stable_witness -I /home/opam/.opam/5.2/lib/sexplib -I /home/opam/.opam/5.2/lib/sexplib0 -I /home/opam/.opam/5.2/lib/splittable_random -I /home/opam/.opam/5.2/lib/stdio -I /home/opam/.opam/5.2/lib/time_now -I /home/opam/.opam/5.2/lib/typerep -I /home/opam/.opam/5.2/lib/variantslib -intf-suffix .ml -no-alias-deps -open File_path__ -o src/.file_path.objs/byte/file_path__Path.cmo -c -impl src/path.pp.ml)
# File "src/path.ml", line 22, characters 27-55:
# 22 | let of_absolute absolute = (absolute : Absolute.t :> t)
#                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# Error: This expression has type "t" = "File_path__Types.Path.t"
#        but an expression was expected of type
#          "File_path__.Absolute.t" = "File_path__Types.Absolute.t"

We've tried to reproduce in a smaller test-case with @Octachron but without success.
Does anyone know what type of change could be responsible for this type of failure?

The code for both of those can be seen in:

Both codes seem to be pretty similar with a heavy use of includes, module types and destructive type substitutions

@gasche
Copy link
Member

gasche commented Feb 19, 2024

I can't make a better guess than you did, so I would just try bisecting typing/ changes between 5.1 and 5.2.

@kit-ty-kate
Copy link
Member Author

@Octachron made some progress debugging this in the meantime and it seems to be related to the preview of ppxlib we are using. Either one of us will close this if it's confirmed to be ppxlib-only issue

@Octachron
Copy link
Member

This seems indeed increasingly likely to be a ppxlib issue. Typically, my reproduction case at https://github.com/Octachron/bug-reproduction-archives/tree/main/ppxlib_and_include fails with the reported error whenever a ppxlib-based ppx is used (even for an identity ppx).

@kit-ty-kate
Copy link
Member Author

mmh, that's weird though, your example doesn't use any ppxlib feature other than the driver.
Ast_mapper.default_mapper is a function from compiler-libs. Maybe something is missing from there in 5.2

@kit-ty-kate
Copy link
Member Author

kit-ty-kate commented Feb 20, 2024

oh nevermind i read the ppx / manual_ppx directories the wrong way, sorry for the noise

@gasche
Copy link
Member

gasche commented Feb 20, 2024

Random thought: could this be some fallout from however ppxlib adapted to the changes in #12119, #12191? This was done in 5.1, but it may be that ppxlib changed it after the 5.1 release and we are only testing the change opam-wide now.

@kit-ty-kate
Copy link
Member Author

I've just tried the main branch of ppxlib and it works just fine there if that was what you were thinking.

However I also managed to reduce @Octachron's test case even more: Octachron/bug-reproduction-archives#1
and it turns out the issue is in the way private types are translated in ppxlib.

I'll close this issue to avoid further noise. The ppxlib maintainers have been notified.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants