-
Notifications
You must be signed in to change notification settings - Fork 415
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
Protect link-time code generation placeholders with Sys.opaque_identity #3599
Conversation
1293de3
to
df10ba5
Compare
I tested locally, and this leads to a correctly version-stamped executable. Note that warning 58 does still appear. |
For warning 58, it could be a bug in flambda. Might be worth checking if we can reproduce this on a minimal example. |
In ocamlformat, |
@emillon looking at the log, warning 58 is emitted while compiling
If it was compiled with |
It seems it was compiled with
|
Alright, that seems like a bug in the compiler then. It should produce such a warning if the mli was indeed compiled with |
I tried reproduce that on several compiler versions. Two interesting bits:
So I think we can just fix that whenever Sys.opaque_identity is available, that is for >= 4.03 and do nothing on 4.02. |
df10ba5
to
1879ee7
Compare
Agreed |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good!
This ensures that they are not inlined when using flambda. This problem is only present in OCaml 4.10.0, so it is fine not to patch on 4.02 where `Sys.opaque_identity` is not available. See discussion in ocaml#1930. Signed-off-by: Etienne Millon <[email protected]>
1879ee7
to
c15d651
Compare
…lugin, dune-private-libs and dune-glob (2.7.0) CHANGES: - Write intermediate files in a `.mdx` folder for each `mdx` stanza to prevent the corresponding actions to be executed as part of the `@all` alias (ocaml/dune#3659, @NathanReb) - Read Coq flags from `env` (ocaml/dune#3547 , fixes ocaml/dune#3486, @gares) - Allow bisect_ppx to be enabled/disabled via dune-workspace. (ocaml/dune#3404, @stephanieyou) - Formatting of dune files is now done in the executing dune process instead of in a separate process. (ocaml/dune#3536, @nojb) - Add a `--debug-artifact-substution` flag to help debug problem with version not being captured by `dune-build-info` (ocaml/dune#3589, @jeremiedimino) - Allow the use of the `context_name` variable in the `enabled_if` fields of executable(s) and install stanzas. (ocaml/dune#3568, fixes ocaml/dune#3566, @voodoos) - Fix compatibility with OCaml 4.12.0 when compiling empty archives; no .a file is generated. (ocaml/dune#3576, @dra27) - `$ dune utop` no longer tries to load optional libraries that are unavailable (ocaml/dune#3612, fixes ocaml/dune#3188, @anuragsoni) - Fix dune-build-info on 4.10.0+flambda (ocaml/dune#3599, @emillon, @jeremiedimino). - Allow multiple libraries with `inline_tests` to be defined in the same directory (ocaml/dune#3621, @rgrinberg) - Run exit hooks in jsoo separate compilation mode (ocaml/dune#3626, fixes ocaml/dune#3622, @rgrinberg) - Add (alias ...), (mode ...) fields to (copy_fields ...) stanza (ocaml/dune#3631, @nojb) - (copy_files ...) now supports copying files from outside the workspace using absolute file names (ocaml/dune#3639, @nojb) - Dune does not use `ocamlc` as an intermediary to call C compiler anymore. Configuration flags `ocamlc_cflags` and `ocamlc_cppflags` are always prepended to the compiler arguments. (ocaml/dune#3565, fixes ocaml/dune#3346, @voodoos) - Revert the build optimization in ocaml/dune#2268. This optimization slows down building individual executables when they're part of an `executables` stanza group (ocaml/dune#3644, @rgrinberg) - Use `{dev}` rather than `{pinned}` in the generated `.opam` file. (ocaml/dune#3647, @kit-ty-kate) - Insert correct extension name when editing `dune-project` files. Previously, dune would just insert the stanza name. (ocaml/dune#3649, fixes ocaml/dune#3624, @rgrinberg) - Fix crash when evaluating an `mdx` stanza that depends on unavailable packages. (ocaml/dune#3650, @craigfe) - Fix typo in `cache-check-probablity` field in dune config files. This field now requires 2.7 as it wasn't usable before this version. (ocaml/dune#3652, @edwintorok) - Add `"odoc" {with-doc}` to the dependencies in the generated `.opam` files. (ocaml/dune#3667, @kit-ty-kate) - Do not allow user actions to capture dune's stdin (ocaml/dune#3677, fixes ocaml/dune#3672, @rgrinberg) - `(subdir ...)` stanzas can now appear in dune files used via `(include ...)`. (ocaml/dune#3676, @nojb)
…lugin, dune-private-libs and dune-glob (2.7.0) CHANGES: - Write intermediate files in a `.mdx` folder for each `mdx` stanza to prevent the corresponding actions to be executed as part of the `@all` alias (ocaml/dune#3659, @NathanReb) - Read Coq flags from `env` (ocaml/dune#3547 , fixes ocaml/dune#3486, @gares) - Add instrumentation framework to toggle instrumentation by `bisect_ppx`, `landmarks`, etc, via dune-workspace and/or the command-line. (ocaml/dune#3404, ocaml/dune#3526 @stephanieyou, @nojb) - Formatting of dune files is now done in the executing dune process instead of in a separate process. (ocaml/dune#3536, @nojb) - Add a `--debug-artifact-substution` flag to help debug problem with version not being captured by `dune-build-info` (ocaml/dune#3589, @jeremiedimino) - Allow the use of the `context_name` variable in the `enabled_if` fields of executable(s) and install stanzas. (ocaml/dune#3568, fixes ocaml/dune#3566, @voodoos) - Fix compatibility with OCaml 4.12.0 when compiling empty archives; no .a file is generated. (ocaml/dune#3576, @dra27) - `$ dune utop` no longer tries to load optional libraries that are unavailable (ocaml/dune#3612, fixes ocaml/dune#3188, @anuragsoni) - Fix dune-build-info on 4.10.0+flambda (ocaml/dune#3599, @emillon, @jeremiedimino). - Allow multiple libraries with `inline_tests` to be defined in the same directory (ocaml/dune#3621, @rgrinberg) - Run exit hooks in jsoo separate compilation mode (ocaml/dune#3626, fixes ocaml/dune#3622, @rgrinberg) - Add (alias ...), (mode ...) fields to (copy_fields ...) stanza (ocaml/dune#3631, @nojb) - (copy_files ...) now supports copying files from outside the workspace using absolute file names (ocaml/dune#3639, @nojb) - Dune does not use `ocamlc` as an intermediary to call C compiler anymore. Configuration flags `ocamlc_cflags` and `ocamlc_cppflags` are always prepended to the compiler arguments. (ocaml/dune#3565, fixes ocaml/dune#3346, @voodoos) - Revert the build optimization in ocaml/dune#2268. This optimization slows down building individual executables when they're part of an `executables` stanza group (ocaml/dune#3644, @rgrinberg) - Use `{dev}` rather than `{pinned}` in the generated `.opam` file. (ocaml/dune#3647, @kit-ty-kate) - Insert correct extension name when editing `dune-project` files. Previously, dune would just insert the stanza name. (ocaml/dune#3649, fixes ocaml/dune#3624, @rgrinberg) - Fix crash when evaluating an `mdx` stanza that depends on unavailable packages. (ocaml/dune#3650, @craigfe) - Fix typo in `cache-check-probablity` field in dune config files. This field now requires 2.7 as it wasn't usable before this version. (ocaml/dune#3652, @edwintorok) - Add `"odoc" {with-doc}` to the dependencies in the generated `.opam` files. (ocaml/dune#3667, @kit-ty-kate) - Do not allow user actions to capture dune's stdin (ocaml/dune#3677, fixes ocaml/dune#3672, @rgrinberg) - `(subdir ...)` stanzas can now appear in dune files used via `(include ...)`. (ocaml/dune#3676, @nojb)
This uses dune-build-info to compute the version number. It will be resolved in the following way: - if (version) is set in (dune-project), it is used. This is what happens when using opam pins (through dune subst), or for released versions (through dune-release). - otherwise, a description from [git describe] will be used. Caveat for this case: binaries under [_build/] will not have this information, but [dune install --prefix _install] will copy a valid binary under [_install/bin]. We require at least dune 2.7, since `dune-build-info` is broken on flambda switches before this version. See ocaml/dune#3599
This uses dune-build-info to compute the version number. It will be resolved in the following way: - if (version) is set in (dune-project), it is used. This is what happens when using opam pins (through dune subst), or for released versions (through dune-release). - otherwise, a description from [git describe] will be used. Caveat for this case: binaries under [_build/] will not have this information, but [dune install --prefix _install] will copy a valid binary under [_install/bin]. We require at least dune 2.7, since `dune-build-info` is broken on flambda switches before this version. See ocaml/dune#3599
This uses dune-build-info to compute the version number. It will be resolved in the following way: - if (version) is set in (dune-project), it is used. This is what happens when using opam pins (through dune subst), or for released versions (through dune-release). - otherwise, a description from [git describe] will be used. Caveat for this case: binaries under [_build/] will not have this information, but [dune install --prefix _install] will copy a valid binary under [_install/bin]. We require at least dune 2.7, since `dune-build-info` is broken on flambda switches before this version. See ocaml/dune#3599
…#5049 With flambda, Sys.opaque_identity is needed around the placeholder string or else flambda is able to compile it away. This prevents the rewriting done by e.g. `dune install` from working.
…#5049 With flambda, Sys.opaque_identity is needed around the placeholder string or else flambda is able to compile it away. This prevents the rewriting done by e.g. `dune install` from working. Signed-off-by: Josh Berdine <[email protected]>
…#5049 With flambda, Sys.opaque_identity is needed around the placeholder string or else flambda is able to compile it away. This prevents the rewriting done by e.g. `dune install` from working. Signed-off-by: Josh Berdine <[email protected]>
…#5049 With flambda, Sys.opaque_identity is needed around the placeholder string or else flambda is able to compile it away. This prevents the rewriting done by e.g. `dune install` from working. Signed-off-by: Josh Berdine <[email protected]>
With flambda, Sys.opaque_identity is needed around the placeholder string or else flambda is able to compile it away. This prevents the rewriting done by e.g. `dune install` from working. Signed-off-by: Josh Berdine <[email protected]>
This ensures that they are not inlined when using flambda. See discussion in #1930.