From df27f832314ffcbbff8e238af15852afd4b2ef75 Mon Sep 17 00:00:00 2001 From: michaelleejl Date: Mon, 6 Oct 2025 23:37:50 +0100 Subject: [PATCH 1/6] Removed warning for levelled GADTs --- testsuite/tests/macros/gadts.ml | 23 +++-------------------- typing/ctype.ml | 8 +------- 2 files changed, 4 insertions(+), 27 deletions(-) diff --git a/testsuite/tests/macros/gadts.ml b/testsuite/tests/macros/gadts.ml index 32ddaedd89..8a362fd247 100644 --- a/testsuite/tests/macros/gadts.ml +++ b/testsuite/tests/macros/gadts.ml @@ -8,28 +8,19 @@ macro m : type a. (a, int) Type.eq expr -> a -> unit expr = ;; [%%expect{| -File "_none_", line 1: -Warning 75 [maco-dev]: maco: avoided gadt constraint at level 0 - -Line 3, characters 47-48: -3 | << match $p with Type.Equal -> $(let _ = 1 + x in << () >>) >> - ^ -Error: The value "x" has type "a" but an expression was expected of type "int" +macro m : ('a, int) Type.eq expr -> 'a -> unit expr = |}] -(* TODO: we don't need a warning here *) macro m : type a. (a, int) Type.eq expr -> unit expr = fun p -> << match $p with Type.Equal -> () >> ;; [%%expect{| -File "_none_", line 1: -Warning 75 [maco-dev]: maco: avoided gadt constraint at level 0 - macro m : ('a, int) Type.eq expr -> unit expr = |}] + (* TODO: we should eventually allow this *) macro m : type a. (a, int) Type.eq expr -> a expr -> int expr = fun p x -> @@ -37,13 +28,5 @@ macro m : type a. (a, int) Type.eq expr -> a expr -> int expr = ;; [%%expect{| -File "_none_", line 1: -Warning 75 [maco-dev]: maco: avoided gadt constraint at level 0 - -Line 3, characters 34-35: -3 | << match $p with Type.Equal -> $x >> - ^ -Error: The value "x" has type "a expr" but an expression was expected of type - "int expr" - Type "a" is not compatible with type "int" +macro m : ('a, int) Type.eq expr -> 'a expr -> int expr = |}] diff --git a/typing/ctype.ml b/typing/ctype.ml index 8891c109d2..b77550d0cd 100644 --- a/typing/ctype.ml +++ b/typing/ctype.ml @@ -2585,13 +2585,7 @@ let add_gadt_equation uenv source destination = let env = get_env uenv in - let staging_level = Env.get_env_level env in - let staging_mode = Env.get_env_mode env in - - if (* staging_level <> 0 ||*) staging_mode <> M_C then - Location.prerr_warning Location.none (Warnings.Maco_dev - ("avoided gadt constraint at level "^(string_of_int staging_level))) - else begin + begin if has_free_univars env destination then occur_univar ~inj_only:true env destination else if local_non_recursive_abbrev uenv source destination then begin From bfc4b0bba7cc7ff6bd53a620c880a12cc4d66b54 Mon Sep 17 00:00:00 2001 From: michaelleejl Date: Tue, 7 Oct 2025 12:42:26 +0100 Subject: [PATCH 2/6] Add guard --- testsuite/tests/macros/gadts.ml | 12 ++++++++++-- typing/ctype.ml | 3 +++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/testsuite/tests/macros/gadts.ml b/testsuite/tests/macros/gadts.ml index 8a362fd247..9bfb27d6e5 100644 --- a/testsuite/tests/macros/gadts.ml +++ b/testsuite/tests/macros/gadts.ml @@ -8,7 +8,10 @@ macro m : type a. (a, int) Type.eq expr -> a -> unit expr = ;; [%%expect{| -macro m : ('a, int) Type.eq expr -> 'a -> unit expr = +Line 3, characters 47-48: +3 | << match $p with Type.Equal -> $(let _ = 1 + x in << () >>) >> + ^ +Error: The value "x" has type "a" but an expression was expected of type "int" |}] macro m : type a. (a, int) Type.eq expr -> unit expr = @@ -28,5 +31,10 @@ macro m : type a. (a, int) Type.eq expr -> a expr -> int expr = ;; [%%expect{| -macro m : ('a, int) Type.eq expr -> 'a expr -> int expr = +Line 3, characters 34-35: +3 | << match $p with Type.Equal -> $x >> + ^ +Error: The value "x" has type "a expr" but an expression was expected of type + "int expr" + Type "a" is not compatible with type "int" |}] diff --git a/typing/ctype.ml b/typing/ctype.ml index b77550d0cd..2873ecc1d6 100644 --- a/typing/ctype.ml +++ b/typing/ctype.ml @@ -2584,7 +2584,10 @@ let add_gadt_equation uenv source destination = expressive)? as that lets us do anything inside an (unquoted) macro body *) let env = get_env uenv in + + let staging_mode = Env.get_env_mode env in + if (* staging_level <> 0 ||*) staging_mode == M_C then begin if has_free_univars env destination then occur_univar ~inj_only:true env destination From 5aa81686181b325ca8090dabd3fbdfbd5b59a8fe Mon Sep 17 00:00:00 2001 From: michaelleejl Date: Tue, 7 Oct 2025 12:52:56 +0100 Subject: [PATCH 3/6] Make alldepend --- .depend | 75 +++++---------------------------------------------------- 1 file changed, 6 insertions(+), 69 deletions(-) diff --git a/.depend b/.depend index 1c1ae99a3a..47fd19c259 100644 --- a/.depend +++ b/.depend @@ -619,7 +619,6 @@ typing/cmt2annot.cmi : \ parsing/location.cmi \ file_formats/cmt_format.cmi typing/ctype.cmo : \ - utils/warnings.cmi \ typing/types.cmi \ typing/type_immediacy.cmi \ typing/subst.cmi \ @@ -638,7 +637,6 @@ typing/ctype.cmo : \ parsing/asttypes.cmi \ typing/ctype.cmi typing/ctype.cmx : \ - utils/warnings.cmx \ typing/types.cmx \ typing/type_immediacy.cmx \ typing/subst.cmx \ @@ -9096,7 +9094,6 @@ ocamldoc/odoc_comments.cmo : \ ocamldoc/odoc_types.cmi \ ocamldoc/odoc_text.cmi \ ocamldoc/odoc_see_lexer.cmi \ - ocamldoc/odoc_parser.cmi \ ocamldoc/odoc_misc.cmi \ ocamldoc/odoc_messages.cmi \ ocamldoc/odoc_merge.cmi \ @@ -9109,12 +9106,11 @@ ocamldoc/odoc_comments.cmx : \ otherlibs/str/str.cmx \ ocamldoc/odoc_types.cmx \ ocamldoc/odoc_text.cmx \ - ocamldoc/odoc_see_lexer.cmx \ - ocamldoc/odoc_parser.cmx \ + ocamldoc/odoc_see_lexer.cmi \ ocamldoc/odoc_misc.cmx \ ocamldoc/odoc_messages.cmx \ ocamldoc/odoc_merge.cmx \ - ocamldoc/odoc_lexer.cmx \ + ocamldoc/odoc_lexer.cmi \ ocamldoc/odoc_global.cmx \ ocamldoc/odoc_cross.cmx \ ocamldoc/odoc_comments_global.cmx \ @@ -9425,24 +9421,7 @@ ocamldoc/odoc_latex_style.cmo : \ ocamldoc/odoc_latex_style.cmx : \ ocamldoc/odoc_latex_style.cmi ocamldoc/odoc_latex_style.cmi : -ocamldoc/odoc_lexer.cmo : \ - otherlibs/str/str.cmi \ - ocamldoc/odoc_parser.cmi \ - ocamldoc/odoc_messages.cmi \ - ocamldoc/odoc_global.cmi \ - ocamldoc/odoc_comments_global.cmi \ - utils/misc.cmi \ - ocamldoc/odoc_lexer.cmi -ocamldoc/odoc_lexer.cmx : \ - otherlibs/str/str.cmx \ - ocamldoc/odoc_parser.cmx \ - ocamldoc/odoc_messages.cmx \ - ocamldoc/odoc_global.cmx \ - ocamldoc/odoc_comments_global.cmx \ - utils/misc.cmx \ - ocamldoc/odoc_lexer.cmi -ocamldoc/odoc_lexer.cmi : \ - ocamldoc/odoc_parser.cmi +ocamldoc/odoc_lexer.cmi : ocamldoc/odoc_man.cmo : \ otherlibs/str/str.cmi \ middle_end/flambda/parameter.cmi \ @@ -9600,16 +9579,6 @@ ocamldoc/odoc_parameter.cmx : \ ocamldoc/odoc_parameter.cmi : \ typing/types.cmi \ ocamldoc/odoc_types.cmi -ocamldoc/odoc_parser.cmo : \ - ocamldoc/odoc_types.cmi \ - ocamldoc/odoc_comments_global.cmi \ - ocamldoc/odoc_parser.cmi -ocamldoc/odoc_parser.cmx : \ - ocamldoc/odoc_types.cmx \ - ocamldoc/odoc_comments_global.cmx \ - ocamldoc/odoc_parser.cmi -ocamldoc/odoc_parser.cmi : \ - ocamldoc/odoc_types.cmi ocamldoc/odoc_print.cmo : \ typing/types.cmi \ typing/printtyp.cmi \ @@ -9681,14 +9650,7 @@ ocamldoc/odoc_search.cmi : \ ocamldoc/odoc_extension.cmi \ ocamldoc/odoc_exception.cmi \ ocamldoc/odoc_class.cmi -ocamldoc/odoc_see_lexer.cmo : \ - ocamldoc/odoc_parser.cmi \ - ocamldoc/odoc_see_lexer.cmi -ocamldoc/odoc_see_lexer.cmx : \ - ocamldoc/odoc_parser.cmx \ - ocamldoc/odoc_see_lexer.cmi -ocamldoc/odoc_see_lexer.cmi : \ - ocamldoc/odoc_parser.cmi +ocamldoc/odoc_see_lexer.cmi : ocamldoc/odoc_sig.cmo : \ parsing/unit_info.cmi \ typing/types.cmi \ @@ -9820,40 +9782,15 @@ ocamldoc/odoc_texi.cmi : \ ocamldoc/odoc_info.cmi ocamldoc/odoc_text.cmo : \ ocamldoc/odoc_types.cmi \ - ocamldoc/odoc_text_parser.cmi \ ocamldoc/odoc_text_lexer.cmi \ ocamldoc/odoc_text.cmi ocamldoc/odoc_text.cmx : \ ocamldoc/odoc_types.cmx \ - ocamldoc/odoc_text_parser.cmx \ - ocamldoc/odoc_text_lexer.cmx \ + ocamldoc/odoc_text_lexer.cmi \ ocamldoc/odoc_text.cmi ocamldoc/odoc_text.cmi : \ ocamldoc/odoc_types.cmi -ocamldoc/odoc_text_lexer.cmo : \ - otherlibs/str/str.cmi \ - ocamldoc/odoc_text_parser.cmi \ - ocamldoc/odoc_misc.cmi \ - ocamldoc/odoc_text_lexer.cmi -ocamldoc/odoc_text_lexer.cmx : \ - otherlibs/str/str.cmx \ - ocamldoc/odoc_text_parser.cmx \ - ocamldoc/odoc_misc.cmx \ - ocamldoc/odoc_text_lexer.cmi -ocamldoc/odoc_text_lexer.cmi : \ - ocamldoc/odoc_text_parser.cmi -ocamldoc/odoc_text_parser.cmo : \ - otherlibs/str/str.cmi \ - ocamldoc/odoc_types.cmi \ - ocamldoc/odoc_misc.cmi \ - ocamldoc/odoc_text_parser.cmi -ocamldoc/odoc_text_parser.cmx : \ - otherlibs/str/str.cmx \ - ocamldoc/odoc_types.cmx \ - ocamldoc/odoc_misc.cmx \ - ocamldoc/odoc_text_parser.cmi -ocamldoc/odoc_text_parser.cmi : \ - ocamldoc/odoc_types.cmi +ocamldoc/odoc_text_lexer.cmi : ocamldoc/odoc_to_text.cmo : \ otherlibs/str/str.cmi \ middle_end/flambda/parameter.cmi \ From ac09fea6722e7673ab47071ec53e2cbbfa123b49 Mon Sep 17 00:00:00 2001 From: Michael Lee <64633761+michaelleejl@users.noreply.github.com> Date: Fri, 10 Oct 2025 18:43:04 +0800 Subject: [PATCH 4/6] Update typing/ctype.ml Co-authored-by: Jeremy Yallop --- typing/ctype.ml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/typing/ctype.ml b/typing/ctype.ml index 2873ecc1d6..40a38550a8 100644 --- a/typing/ctype.ml +++ b/typing/ctype.ml @@ -2587,7 +2587,7 @@ let add_gadt_equation uenv source destination = let staging_mode = Env.get_env_mode env in - if (* staging_level <> 0 ||*) staging_mode == M_C then + if (* staging_level <> 0 ||*) staging_mode = M_C then begin if has_free_univars env destination then occur_univar ~inj_only:true env destination From 1ac627274d9d7aea43a6c97589c1a9dfd0583ca3 Mon Sep 17 00:00:00 2001 From: Jeremy Yallop Date: Mon, 13 Oct 2025 20:15:54 +0800 Subject: [PATCH 5/6] Revert "Make alldepend" This reverts commit 5aa81686181b325ca8090dabd3fbdfbd5b59a8fe. --- .depend | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 69 insertions(+), 6 deletions(-) diff --git a/.depend b/.depend index 47fd19c259..1c1ae99a3a 100644 --- a/.depend +++ b/.depend @@ -619,6 +619,7 @@ typing/cmt2annot.cmi : \ parsing/location.cmi \ file_formats/cmt_format.cmi typing/ctype.cmo : \ + utils/warnings.cmi \ typing/types.cmi \ typing/type_immediacy.cmi \ typing/subst.cmi \ @@ -637,6 +638,7 @@ typing/ctype.cmo : \ parsing/asttypes.cmi \ typing/ctype.cmi typing/ctype.cmx : \ + utils/warnings.cmx \ typing/types.cmx \ typing/type_immediacy.cmx \ typing/subst.cmx \ @@ -9094,6 +9096,7 @@ ocamldoc/odoc_comments.cmo : \ ocamldoc/odoc_types.cmi \ ocamldoc/odoc_text.cmi \ ocamldoc/odoc_see_lexer.cmi \ + ocamldoc/odoc_parser.cmi \ ocamldoc/odoc_misc.cmi \ ocamldoc/odoc_messages.cmi \ ocamldoc/odoc_merge.cmi \ @@ -9106,11 +9109,12 @@ ocamldoc/odoc_comments.cmx : \ otherlibs/str/str.cmx \ ocamldoc/odoc_types.cmx \ ocamldoc/odoc_text.cmx \ - ocamldoc/odoc_see_lexer.cmi \ + ocamldoc/odoc_see_lexer.cmx \ + ocamldoc/odoc_parser.cmx \ ocamldoc/odoc_misc.cmx \ ocamldoc/odoc_messages.cmx \ ocamldoc/odoc_merge.cmx \ - ocamldoc/odoc_lexer.cmi \ + ocamldoc/odoc_lexer.cmx \ ocamldoc/odoc_global.cmx \ ocamldoc/odoc_cross.cmx \ ocamldoc/odoc_comments_global.cmx \ @@ -9421,7 +9425,24 @@ ocamldoc/odoc_latex_style.cmo : \ ocamldoc/odoc_latex_style.cmx : \ ocamldoc/odoc_latex_style.cmi ocamldoc/odoc_latex_style.cmi : -ocamldoc/odoc_lexer.cmi : +ocamldoc/odoc_lexer.cmo : \ + otherlibs/str/str.cmi \ + ocamldoc/odoc_parser.cmi \ + ocamldoc/odoc_messages.cmi \ + ocamldoc/odoc_global.cmi \ + ocamldoc/odoc_comments_global.cmi \ + utils/misc.cmi \ + ocamldoc/odoc_lexer.cmi +ocamldoc/odoc_lexer.cmx : \ + otherlibs/str/str.cmx \ + ocamldoc/odoc_parser.cmx \ + ocamldoc/odoc_messages.cmx \ + ocamldoc/odoc_global.cmx \ + ocamldoc/odoc_comments_global.cmx \ + utils/misc.cmx \ + ocamldoc/odoc_lexer.cmi +ocamldoc/odoc_lexer.cmi : \ + ocamldoc/odoc_parser.cmi ocamldoc/odoc_man.cmo : \ otherlibs/str/str.cmi \ middle_end/flambda/parameter.cmi \ @@ -9579,6 +9600,16 @@ ocamldoc/odoc_parameter.cmx : \ ocamldoc/odoc_parameter.cmi : \ typing/types.cmi \ ocamldoc/odoc_types.cmi +ocamldoc/odoc_parser.cmo : \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_comments_global.cmi \ + ocamldoc/odoc_parser.cmi +ocamldoc/odoc_parser.cmx : \ + ocamldoc/odoc_types.cmx \ + ocamldoc/odoc_comments_global.cmx \ + ocamldoc/odoc_parser.cmi +ocamldoc/odoc_parser.cmi : \ + ocamldoc/odoc_types.cmi ocamldoc/odoc_print.cmo : \ typing/types.cmi \ typing/printtyp.cmi \ @@ -9650,7 +9681,14 @@ ocamldoc/odoc_search.cmi : \ ocamldoc/odoc_extension.cmi \ ocamldoc/odoc_exception.cmi \ ocamldoc/odoc_class.cmi -ocamldoc/odoc_see_lexer.cmi : +ocamldoc/odoc_see_lexer.cmo : \ + ocamldoc/odoc_parser.cmi \ + ocamldoc/odoc_see_lexer.cmi +ocamldoc/odoc_see_lexer.cmx : \ + ocamldoc/odoc_parser.cmx \ + ocamldoc/odoc_see_lexer.cmi +ocamldoc/odoc_see_lexer.cmi : \ + ocamldoc/odoc_parser.cmi ocamldoc/odoc_sig.cmo : \ parsing/unit_info.cmi \ typing/types.cmi \ @@ -9782,15 +9820,40 @@ ocamldoc/odoc_texi.cmi : \ ocamldoc/odoc_info.cmi ocamldoc/odoc_text.cmo : \ ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_text_parser.cmi \ ocamldoc/odoc_text_lexer.cmi \ ocamldoc/odoc_text.cmi ocamldoc/odoc_text.cmx : \ ocamldoc/odoc_types.cmx \ - ocamldoc/odoc_text_lexer.cmi \ + ocamldoc/odoc_text_parser.cmx \ + ocamldoc/odoc_text_lexer.cmx \ ocamldoc/odoc_text.cmi ocamldoc/odoc_text.cmi : \ ocamldoc/odoc_types.cmi -ocamldoc/odoc_text_lexer.cmi : +ocamldoc/odoc_text_lexer.cmo : \ + otherlibs/str/str.cmi \ + ocamldoc/odoc_text_parser.cmi \ + ocamldoc/odoc_misc.cmi \ + ocamldoc/odoc_text_lexer.cmi +ocamldoc/odoc_text_lexer.cmx : \ + otherlibs/str/str.cmx \ + ocamldoc/odoc_text_parser.cmx \ + ocamldoc/odoc_misc.cmx \ + ocamldoc/odoc_text_lexer.cmi +ocamldoc/odoc_text_lexer.cmi : \ + ocamldoc/odoc_text_parser.cmi +ocamldoc/odoc_text_parser.cmo : \ + otherlibs/str/str.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_misc.cmi \ + ocamldoc/odoc_text_parser.cmi +ocamldoc/odoc_text_parser.cmx : \ + otherlibs/str/str.cmx \ + ocamldoc/odoc_types.cmx \ + ocamldoc/odoc_misc.cmx \ + ocamldoc/odoc_text_parser.cmi +ocamldoc/odoc_text_parser.cmi : \ + ocamldoc/odoc_types.cmi ocamldoc/odoc_to_text.cmo : \ otherlibs/str/str.cmi \ middle_end/flambda/parameter.cmi \ From 1db20b3360b64efed2f4495918dee2b2db15e7d4 Mon Sep 17 00:00:00 2001 From: Jeremy Yallop Date: Mon, 13 Oct 2025 20:20:13 +0800 Subject: [PATCH 6/6] .depend: remove Ctype dependency on the Warnings module --- .depend | 2 -- 1 file changed, 2 deletions(-) diff --git a/.depend b/.depend index 1c1ae99a3a..652340ab8d 100644 --- a/.depend +++ b/.depend @@ -619,7 +619,6 @@ typing/cmt2annot.cmi : \ parsing/location.cmi \ file_formats/cmt_format.cmi typing/ctype.cmo : \ - utils/warnings.cmi \ typing/types.cmi \ typing/type_immediacy.cmi \ typing/subst.cmi \ @@ -638,7 +637,6 @@ typing/ctype.cmo : \ parsing/asttypes.cmi \ typing/ctype.cmi typing/ctype.cmx : \ - utils/warnings.cmx \ typing/types.cmx \ typing/type_immediacy.cmx \ typing/subst.cmx \