Skip to content

Invalid_argument("List.iter2") for ill-aritied types in recursive modules. #12959

@ccasin

Description

@ccasin

On this code:

module rec A : sig
  val c : 'a B.t -> unit
end = struct
  let c _ = ()
end

and B : sig
  type 'a t
end = struct
  type t
end

The compiler currently hits an exception:

Fatal error: exception Invalid_argument("List.iter2")
Raised at Stdlib.invalid_arg in file "stdlib.ml", line 30, characters 20-45
Called from Ctype.occur_univar.occur_desc in file "typing/ctype.ml", lines 1995-2006, characters 12-33
Called from Misc.try_finally in file "utils/misc.ml", line 31, characters 8-15
Re-raised at Misc.try_finally in file "utils/misc.ml", line 45, characters 10-56
Called from Ctype.occur_univar_for in file "typing/ctype.ml", line 2024, characters 4-23
Called from Ctype.moregen_occur in file "typing/ctype.ml", line 3725, characters 2-33
Called from Ctype.moregen in file "typing/ctype.ml", line 3739, characters 8-43
Called from Ctype.moregen in file "typing/ctype.ml", line 3759, characters 14-54
Called from Ctype.moregen in file "typing/ctype.ml" (inlined), line 3950, characters 2-46
Called from Ctype.moregeneral.(fun) in file "typing/ctype.ml", line 3978, characters 9-64
Called from Misc.try_finally in file "utils/misc.ml", line 31, characters 8-15
Re-raised at Misc.try_finally in file "utils/misc.ml", line 45, characters 10-56
Called from Includecore.value_descriptions in file "typing/includecore.ml", line 82, characters 8-60
Called from Includemod.value_descriptions in file "typing/includemod.ml", line 165, characters 7-72
Called from Includemod.signature_components in file "typing/includemod.ml", line 734, characters 14-75
Called from Includemod.signatures.pair_components in file "typing/includemod.ml", lines 660-662, characters 10-29
Called from Includemod.try_modtypes in file "typing/includemod.ml", line 489, characters 8-67
Called from Includemod.modtypes in file "typing/includemod.ml", line 426, characters 8-64
Called from Includemod.modtypes_with_shape in file "typing/includemod.ml", lines 1199-1200, characters 8-40
Called from Typemod.check_recmodule_inclusion.check_incl.check_inclusion in file "typing/typemod.ml", lines 1982-1984, characters 12-39
Called from Stdlib__List.map in file "list.ml", line 86, characters 15-19
Called from Typemod.type_structure.type_str_item in file "typing/typemod.ml", line 2695, characters 10-52
Called from Typemod.type_structure.type_struct in file "typing/typemod.ml", line 2822, characters 43-75
Called from Typemod.type_structure.run in file "typing/typemod.ml", line 2834, characters 6-42
Called from Builtin_attributes.warning_scope in file "parsing/builtin_attributes.ml", line 343, characters 14-18
Re-raised at Builtin_attributes.warning_scope in file "parsing/builtin_attributes.ml", line 348, characters 4-13
Called from Typemod.type_implementation.(fun) in file "typing/typemod.ml", line 3036, characters 8-38
Called from Misc.try_finally in file "utils/misc.ml", line 31, characters 8-15
Re-raised at Misc.try_finally in file "utils/misc.ml", line 45, characters 10-56
Called from Misc.try_finally in file "utils/misc.ml", line 31, characters 8-15
Re-raised at Misc.try_finally in file "utils/misc.ml", line 45, characters 10-56
Called from Compile_common.typecheck_impl in file "driver/compile_common.ml", lines 95-97, characters 2-48
Called from Compile_common.implementation.(fun) in file "driver/compile_common.ml", line 116, characters 18-44
Called from Misc.try_finally in file "utils/misc.ml", line 31, characters 8-15
Re-raised at Misc.try_finally in file "utils/misc.ml", line 45, characters 10-56
Called from Misc.try_finally in file "utils/misc.ml", line 31, characters 8-15
Re-raised at Misc.try_finally in file "utils/misc.ml", line 45, characters 10-56
Called from Misc.try_finally in file "utils/misc.ml", line 31, characters 8-15
Re-raised at Misc.try_finally in file "utils/misc.ml", line 45, characters 10-56
Called from Compenv.process_action.impl in file "driver/compenv.ml", line 607, characters 4-69
Called from Stdlib__List.iter in file "list.ml", line 112, characters 12-15
Called from Compenv.process_deferred_actions in file "driver/compenv.ml", line 698, characters 2-61
Called from Optmaindriver.main in file "driver/optmaindriver.ml", lines 53-58, characters 6-17
Re-raised at Location.report_exception.loop in file "parsing/location.ml", line 979, characters 14-25
Called from Optmaindriver.main in file "driver/optmaindriver.ml", line 136, characters 4-35
Called from Optmain in file "driver/optmain.ml", line 2, characters 7-57

This looks very similar to #12061, fixed in #12063. I have not taken a close look at that fix to see if it's easy to do something similar here.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions