Repository navigation
[ImgBot] Optimize images - #3
imgbot[bot] wants to merge 1 commit into
Conversation
*Total -- 2,075.91kb -> 1,894.58kb (8.73%) /clang/docs/DataFlowAnalysisIntroImages/UniquePtrLattice.svg -- 4.31kb -> 2.90kb (32.68%) /clang/docs/DataFlowAnalysisIntroImages/DefinitiveInitializationLattice.svg -- 4.32kb -> 2.92kb (32.57%) /llvm/docs/loop-irreducible.svg -- 76.39kb -> 53.88kb (29.47%) /llvm/docs/loop-nonmaximal.svg -- 129.42kb -> 91.89kb (29%) /clang/docs/DataFlowAnalysisIntroImages/OutputParameterIdentificationLattice.svg -- 13.63kb -> 9.79kb (28.19%) /llvm/docs/loop-guard.svg -- 108.14kb -> 77.90kb (27.96%) /llvm/docs/loop-nested.svg -- 87.77kb -> 64.81kb (26.16%) /clang/docs/DataFlowAnalysisIntroImages/IntegerSetsFiniteLattice.svg -- 17.79kb -> 13.16kb (26%) /clang/docs/DataFlowAnalysisIntroImages/IntegerSetsInfiniteLattice.svg -- 17.83kb -> 13.21kb (25.96%) /clang/docs/DataFlowAnalysisIntroImages/CFGExample.svg -- 24.92kb -> 18.82kb (24.46%) /llvm/docs/loop-single.svg -- 35.31kb -> 27.50kb (22.12%) /clang/docs/DataFlowAnalysisIntroImages/CFGJoinRule.svg -- 13.23kb -> 10.83kb (18.08%) /lld/docs/partitions.svg -- 5.81kb -> 4.94kb (14.94%) /llvm/docs/loop-terminology.svg -- 116.10kb -> 104.46kb (10.03%) /mlir/docs/includes/img/index-map.svg -- 65.20kb -> 60.08kb (7.86%) /llvm/docs/loop-merge.svg -- 88.08kb -> 83.69kb (4.99%) /llvm/docs/loop-separate.svg -- 90.69kb -> 86.23kb (4.92%) /mlir/docs/includes/img/view-operation.svg -- 155.05kb -> 147.60kb (4.8%) /mlir/docs/includes/img/mlir-lsp-server-server_diagram.svg -- 33.99kb -> 33.79kb (0.61%) /mlir/docs/includes/img/Use-list.svg -- 69.32kb -> 68.97kb (0.51%) /mlir/docs/includes/img/DefUseChains.svg -- 155.64kb -> 154.94kb (0.45%) /libc/docs/gpu/rpc-diagram.svg -- 62.11kb -> 61.86kb (0.4%) /mlir/docs/includes/img/bufferization_tensor_insert_dst.svg -- 77.48kb -> 77.36kb (0.16%) /mlir/docs/includes/img/bufferization_passes.svg -- 203.40kb -> 203.21kb (0.09%) /mlir/docs/includes/img/bufferization_dealloc_op.svg -- 419.96kb -> 419.84kb (0.03%) Signed-off-by: ImgBotApp <ImgBotHelp@gmail.com>
|
Thank you for submitting a Pull Request (PR) to the LLVM Project! This PR will be automatically labeled and the relevant teams will be notified. If you wish to, you can add reviewers by using the "Reviewers" section on this page. If this is not working for you, it is probably because you do not have write permissions for the repository. In which case you can instead tag reviewers by name in a comment by using If you have received no comments on your PR for a week, you can request a review by "ping"ing the PR by adding a comment “Ping”. The common courtesy "ping" rate is once a week. Please remember that you are asking for valuable time from other developers. If you have further questions, they may be answered by the LLVM GitHub User Guide. You can also ask questions in a comment on this PR, on the LLVM Discord or on the forums. |
An adversarial "prove-false" sweep found three ways a caller could be
reasoned about unsoundly, all in how a callee's contract is instantiated
at a call site:
1. old(*p) in a heap postcondition collapsed onto the post-state heap.
substParams did not thread heap versions: a callee post such as
`*a == old(*a) + 1` had both `*a` and `old(*a)` resolve to the same
heap version, yielding `v == v + 1` (false). assume(false) then let the
caller prove anything (`*x == 999`, `*x` unchanged, ... all verified).
substParams now mirrors cloneExpr: post-state Loads read the post-call
heap, old(*p) reads a call-local pre-call heap snapshot.
2. A heap-modifying callee with no explicit `modifies` clause was not
havocked (the bump only fired on a non-empty modifies set), re-creating
the same collapse. The heap is now bumped when the callee has a non-empty
modifies set OR any pointer parameter (DESIGN.md: pointer params with no
modifies conservatively modify everything reachable).
3. A recursive proof lemma's induction hypothesis leaked unguarded. The
callee postcondition assume was not wrapped in the path guard (the
precondition assert was), so `if (i > 0) { rec(i - 1); }` assumed the IH
unconditionally and a contradictory IH leaked onto the base-case path,
"proving" a false lemma (`post(i == i + 1)` verified). The post assume is
now guarded by the path condition, like the precondition assert.
Adversarial probes for all three now correctly fail; the sound_* suite and
the call/heap/UB tests are unaffected.
Exposure: the recursive-lemma demos (safe_fib, verify_spec_proof_e2e) were
only passing via bug #3's leak, never soundly. They now fail, pending the
fuel-parameterized spec-axiom encoding (recursive spec defining axioms
currently bottom out at fresh opaque leaves and do not pin the function
down). That sound recursive-spec encoding is the immediate follow-up.
An adversarial "prove-false" sweep found three ways a caller could be
reasoned about unsoundly, all in how a callee's contract is instantiated
at a call site:
1. old(*p) in a heap postcondition collapsed onto the post-state heap.
substParams did not thread heap versions: a callee post such as
`*a == old(*a) + 1` had both `*a` and `old(*a)` resolve to the same
heap version, yielding `v == v + 1` (false). assume(false) then let the
caller prove anything (`*x == 999`, `*x` unchanged, ... all verified).
substParams now mirrors cloneExpr: post-state Loads read the post-call
heap, old(*p) reads a call-local pre-call heap snapshot.
2. A heap-modifying callee with no explicit `modifies` clause was not
havocked (the bump only fired on a non-empty modifies set), re-creating
the same collapse. The heap is now bumped when the callee has a non-empty
modifies set OR any pointer parameter (DESIGN.md: pointer params with no
modifies conservatively modify everything reachable).
3. A recursive proof lemma's induction hypothesis leaked unguarded. The
callee postcondition assume was not wrapped in the path guard (the
precondition assert was), so `if (i > 0) { rec(i - 1); }` assumed the IH
unconditionally and a contradictory IH leaked onto the base-case path,
"proving" a false lemma (`post(i == i + 1)` verified). The post assume is
now guarded by the path condition, like the precondition assert.
Adversarial probes for all three now correctly fail; the sound_* suite and
the call/heap/UB tests are unaffected.
Exposure: the recursive-lemma demos (safe_fib, verify_spec_proof_e2e) were
only passing via bug #3's leak, never soundly. They now fail, pending the
fuel-parameterized spec-axiom encoding (recursive spec defining axioms
currently bottom out at fresh opaque leaves and do not pin the function
down). That sound recursive-spec encoding is the immediate follow-up.
Beep boop. Your images are optimized!
Your image file size has been reduced by 9% 🎉
Details
📝 docs |
repo | 🙋🏾 issues | 🏪 marketplace
~Imgbot - Part of Optimole family