From 323bd36d98896970ba214ae50646cc51a69e2df4 Mon Sep 17 00:00:00 2001 From: Greta Yorsh <45005955+gretay-js@users.noreply.github.com> Date: Mon, 21 Feb 2022 13:46:31 +0000 Subject: [PATCH] flambda-backend: Compiler error when -disable-all-extensions and -extension are used (#534) --- utils/clflags.ml | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/utils/clflags.ml b/utils/clflags.ml index 785e9921c202..a05435522db1 100644 --- a/utils/clflags.ml +++ b/utils/clflags.ml @@ -383,9 +383,6 @@ module Extension = struct let extensions = ref ([] : t list) (* -extension *) let equal (a : t) (b : t) = (a = b) - let disable_all_extensions = ref false (* -disable-all-extensions *) - let disable_all () = disable_all_extensions := true - let to_string = function | Comprehensions -> "comprehensions" | Local -> "local" @@ -395,7 +392,24 @@ module Extension = struct | "local" -> Local | extn -> raise (Arg.Bad(Printf.sprintf "Extension %s is not known" extn)) + let disable_all_extensions = ref false (* -disable-all-extensions *) + + let disable_all () = + disable_all_extensions := true; + match !extensions with + | [] -> () + | ls -> + raise (Arg.Bad(Printf.sprintf + "Compiler flag -disable-all-extensions is incompatible with \ + the enabled extensions: %s" + (String.concat "," (List.map to_string ls)))) + let enable extn = + if !disable_all_extensions then + raise (Arg.Bad(Printf.sprintf + "Cannot enable extension %s: \ + incompatible with compiler flag -disable-all-extensions" + extn)); let t = of_string (String.lowercase_ascii extn) in if not (List.exists (equal t) !extensions) then extensions := t :: !extensions