The checker builds one note after every operation that may have allocated, because the checker is the only place the concrete element type exists — and it builds them in every build, because a tree that differed by build flag would make every pass between here and the backend ask which one it was looking at. The backend drops them when [dev] is off, before walking the arguments: a note takes the container's address, and emitting that only to discard the call would leave an escaped alloca that mem2reg will not promote. Armed by a global constructor rather than a line in main. A defvar initialiser can allocate before main runs, and a note that arrived before the flag was set would be a block the table never heard of. A dev build reports the live block, answers 1 for a pointer into it, and 0 for the same pointer after the free. A release build answers 0 to all of it.
Description
Languages
OCaml
69.7%
Emacs Lisp
13.1%
C
10.6%
Standard ML
3.1%
HTML
2.3%
Other
1.2%