Skip to content

Static check noalloc #778

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

Merged
merged 47 commits into from
Sep 8, 2022
Merged

Conversation

gretay-js
Copy link
Contributor

@gretay-js gretay-js commented Aug 19, 2022

This is the first part of #707 :

  • only allocation check
  • only backend, command-line flag -check-alloc and cmx file format changes
  • no attributes
  • all raises are allowed (raise with trace is not treated as allocating)

and -dcheckmach for debug output of these passes
Update format and compilenv

Cache imported noalloc functions in compilenv
unix has become  a dependency of boot, so we can't build it with
the new flags, which means the check will fail on anything
that calls into Unix module. This will need to be fixed,
but for now just removing the flags to re-enable the build.
This reverts commit a7fda9d.
@gretay-js gretay-js changed the title Static check Static check noalloc Aug 19, 2022
@mshinwell
Copy link
Collaborator

@xclerc is going to review the parts under the backend directory, I'll review the remainder.

Copy link
Contributor

@xclerc xclerc left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just made a first pass (would like to read
Checkmach again if we are not in a hurry.)

Two global questions:

  • are we sure we want the checks to always be
    hard errors, or are there workflows where
    treating them more like warnings would make
    sense?
  • is it difficult to adds some tests? (I don't know
    ocamltest enough to be sure, but it feels like
    we could check the basics through simple
    compiler invocations.)

gretay-js and others added 3 commits August 22, 2022 16:21
Co-authored-by: Xavier Clerc <xclerc@users.noreply.github.com>
Co-authored-by: Xavier Clerc <xclerc@users.noreply.github.com>
Co-authored-by: Xavier Clerc <xclerc@users.noreply.github.com>
Copy link
Contributor Author

@gretay-js gretay-js left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@xclerc I've addressed the comments.

@gretay-js
Copy link
Contributor Author

  • are we sure we want the checks to always be
    hard errors, or are there workflows where
    treating them more like warnings would make
    sense?

There are some internal consistency checks that fail with fatal_error, but you are probably referring to the error raise if function doesn't confirm to its noalloc annotations (that are implemented in a separate PR). First of all, nothing is annotated to start with, and the noalloc check is off by default in user code (on by default in the compiler distribution). When annotations are added, if a change in a callee causes an "@Assert noalloc" annotation to be violated, then either the callee needs to be fixed, or annotated with "@Assume noalloc". If this is not enough, we can add some way of turning them into warnings. I first wanted to make it a warning not an error, so that can be turned into a hard error using -warn-error, but Warnings is not used in th backend and it didn't seem right to add one.

@mshinwell mshinwell merged this pull request into ocaml-flambda:main Sep 8, 2022
mshinwell pushed a commit that referenced this pull request Sep 12, 2022
mshinwell added a commit to mshinwell/flambda-backend that referenced this pull request Oct 24, 2022
25188da flambda-backend: Missed comment from PR802 (ocaml-flambda#887)
9469765 flambda-backend: Improve the semantics of asynchronous exceptions (new simpler version) (ocaml-flambda#802)
d9e4dd0 flambda-backend: Fix `make runtest` on NixOS (ocaml-flambda#874)
4bbde7a flambda-backend: Simpler symbols (ocaml-flambda#753)
ef37262 flambda-backend: Add opaqueness to Obj.magic under Flambda 2 (ocaml-flambda#862)
a9616e9 flambda-backend: Add build system hooks for ocaml-jst (ocaml-flambda#869)
045ef67 flambda-backend: Allow the compiler to build with stock Dune (ocaml-flambda#868)
3cac5be flambda-backend: Simplify Makefile logic for natdynlinkops (ocaml-flambda#866)
c5b12bf flambda-backend: Remove unnecessary install lines (ocaml-flambda#860)
ff12bbe flambda-backend: Fix unused variable warning in st_stubs.c (ocaml-flambda#861)
c84976c flambda-backend: Static check for noalloc: attributes (ocaml-flambda#825)
ca56052 flambda-backend: Build system refactoring for ocaml-jst (ocaml-flambda#857)
39eb7f9 flambda-backend: Remove integer comparison involving nonconstant polymorphic variants (ocaml-flambda#854)
c102688 flambda-backend: Fix soundness bug by using currying information from typing (ocaml-flambda#850)
6a96b61 flambda-backend: Add a primitive to enable/disable the tick thread (ocaml-flambda#852)
f64370b flambda-backend: Make Obj.dup use a new primitive, %obj_dup (ocaml-flambda#843)
9b78eb2 flambda-backend: Add test for ocaml-flambda#820 (include functor soundness bug) (ocaml-flambda#841)
8f24346 flambda-backend: Add `-dtimings-precision` flag (ocaml-flambda#833)
65c2f22 flambda-backend: Add test for ocaml-flambda#829 (ocaml-flambda#831)
7b27a49 flambda-backend: Follow-up PR#829 (comballoc fixes for locals) (ocaml-flambda#830)
ad7ec10 flambda-backend: Use a custom condition variable implementation (ocaml-flambda#787)
3ee650c flambda-backend: Fix soundness bug in include functor (ocaml-flambda#820)
2f57378 flambda-backend: Static check noalloc (ocaml-flambda#778)
aaad625 flambda-backend: Emit begin/end region only when stack allocation is enabled (ocaml-flambda#812)
17c7173 flambda-backend: Fix .cmt for included signatures (ocaml-flambda#803)
e119669 flambda-backend: Increase delays in tests/lib-threads/beat.ml (ocaml-flambda#800)
ccc356d flambda-backend: Prevent dynamic loading of the same .cmxs twice in private mode, etc. (ocaml-flambda#784)
14eb572 flambda-backend: Make local extension point equivalent to local_ expression (ocaml-flambda#790)
487d11b flambda-backend: Fix tast_iterator and tast_mapper for include functor. (ocaml-flambda#795)
a50a818 flambda-backend: Reduce closure allocation in List (ocaml-flambda#792)
96c9c60 flambda-backend: Merge ocaml-jst
a775b88 flambda-backend: Fix ocaml/otherlibs/unix 32-bit build (ocaml-flambda#767)
f7c2679 flambda-backend: Create object files internally to avoid invoking GAS (ocaml-flambda#757)
c7a46bb flambda-backend: Bugfix for Cmmgen.expr_size with locals (ocaml-flambda#756)
b337cb6 flambda-backend: Fix build_upstream for PR749 (ocaml-flambda#750)
8e7e81c flambda-backend: Differentiate is_int primitive between generic and variant-only versions (ocaml-flambda#749)

git-subtree-dir: ocaml
git-subtree-split: 25188da
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants