From b6ac955997b11b22480558361a2dc83842cb1b05 Mon Sep 17 00:00:00 2001 From: alanechang Date: Mon, 4 Mar 2024 13:08:15 -0500 Subject: [PATCH] Make `Sys.opaque_identity` work on different layouts (#2327) use layout_poly --- ocaml/stdlib/sys.ml.in | 2 +- ocaml/stdlib/sys.mli | 2 +- ocaml/testsuite/tests/typing-layouts/layout_poly_native.ml | 7 +++++++ .../tests/typing-layouts/layout_poly_native.reference | 5 +++++ 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/ocaml/stdlib/sys.ml.in b/ocaml/stdlib/sys.ml.in index 375e347070f..a6c6f618180 100644 --- a/ocaml/stdlib/sys.ml.in +++ b/ocaml/stdlib/sys.ml.in @@ -159,7 +159,7 @@ let ocaml_release = { (* Optimization *) -external opaque_identity : 'a -> 'a = "%opaque" +external[@layout_poly] opaque_identity : ('a : any). 'a -> 'a = "%opaque" module Immediate64 = struct module type Non_immediate = sig diff --git a/ocaml/stdlib/sys.mli b/ocaml/stdlib/sys.mli index cb4c7b619fc..a741360231d 100644 --- a/ocaml/stdlib/sys.mli +++ b/ocaml/stdlib/sys.mli @@ -415,7 +415,7 @@ val runtime_warnings_enabled: unit -> bool (** {1 Optimization} *) -external opaque_identity : 'a -> 'a = "%opaque" +external[@layout_poly] opaque_identity : ('a : any). 'a -> 'a = "%opaque" (** For the purposes of optimization, [opaque_identity] behaves like an unknown (and thus possibly side-effecting) function. diff --git a/ocaml/testsuite/tests/typing-layouts/layout_poly_native.ml b/ocaml/testsuite/tests/typing-layouts/layout_poly_native.ml index 4d4af919cb2..302d1d82061 100644 --- a/ocaml/testsuite/tests/typing-layouts/layout_poly_native.ml +++ b/ocaml/testsuite/tests/typing-layouts/layout_poly_native.ml @@ -58,3 +58,10 @@ let () = Printf.printf "%s\n" (revapply "abcde" (fun x -> x)); () +let () = + Printf.printf "%s\n" (N.to_string (Sys.opaque_identity #1n)); + Printf.printf "%s\n" (I32.to_string (Sys.opaque_identity #2l)); + Printf.printf "%s\n" (I64.to_string (Sys.opaque_identity #3L)); + Printf.printf "%s\n" (F.to_string (Sys.opaque_identity #4.)); + Printf.printf "%s\n" (Sys.opaque_identity "abcde"); + () diff --git a/ocaml/testsuite/tests/typing-layouts/layout_poly_native.reference b/ocaml/testsuite/tests/typing-layouts/layout_poly_native.reference index 70291b27ca3..e4cf2b6b4b0 100644 --- a/ocaml/testsuite/tests/typing-layouts/layout_poly_native.reference +++ b/ocaml/testsuite/tests/typing-layouts/layout_poly_native.reference @@ -23,3 +23,8 @@ abcde 3 4. abcde +1 +2 +3 +4. +abcde