43 lines
2.4 KiB
Plaintext
43 lines
2.4 KiB
Plaintext
# Memcheck suppressions for the Flan corpus. See test/test_valgrind.ml.
|
|
#
|
|
# This file is empty of suppressions, and that is a finding rather than an
|
|
# oversight. The sweep was run over forty-seven programs with
|
|
# --gen-suppressions=all before this file existed, checked and again with
|
|
# --no-bounds-checks, and memcheck produced nothing to suppress: no false
|
|
# positives, and no true ones either. Every entry below the line would have
|
|
# been written from valgrind's own --gen-suppressions output plus a reason;
|
|
# none was needed.
|
|
#
|
|
# The four complaints that were expected, and why none of them appeared:
|
|
#
|
|
# 1. The arena's alignment padding, and the gap between its offset and its
|
|
# capacity. Expected to show as uninitialised reads. It cannot, and the
|
|
# reason is structural rather than lucky: the arena is a single
|
|
# malloc(cap), so every byte in it — handed out, padding, or still past
|
|
# the offset — is one allocation to memcheck. It never learns that a
|
|
# sub-object ended, so it has nothing to complain about and equally
|
|
# nothing to catch. Recorded as a coverage ceiling in BUILT.md, not as a
|
|
# clean bill of health. A read of arena bytes never written *is* caught,
|
|
# by definedness rather than addressability; a read of bytes a previous
|
|
# round wrote before a free-all is not.
|
|
#
|
|
# 2. Hand-written LLVM IR. Expected to confuse the tool. It does not, and it
|
|
# could not: memcheck instruments the binary, so it never sees IR, never
|
|
# sees a frontend attribute, and cannot tell Emit's output from clang's.
|
|
# This is the whole reason it was reachable here when MSan was not.
|
|
#
|
|
# 3. `zeroed` storage. A zeroed defvar is in .bss, which memcheck treats as
|
|
# defined because it is — the kernel supplies zeroes. No complaint, and
|
|
# correctly so.
|
|
#
|
|
# 4. Struct padding in a Map key. The compiler emits a per-key-type hash and
|
|
# equality pair that walks fields rather than bytes, so the holes are
|
|
# never read. test_valgrind.ml asserts this directly with a key carrying
|
|
# two seven-byte holes: it must not report, and a suppression here would
|
|
# have destroyed the one control that proves the pair is correct.
|
|
#
|
|
# The rule for adding to this file: paste valgrind's own --gen-suppressions
|
|
# text, and write above it why the report is not a bug. A suppression without
|
|
# a reason is how a real defect gets silenced later, and an empty file is a
|
|
# better outcome than a speculative one.
|