Skip to content

Replace some folds with exists or for_all#1614

Merged
sim642 merged 2 commits intomasterfrom
semgrep-fold
Nov 1, 2024
Merged

Replace some folds with exists or for_all#1614
sim642 merged 2 commits intomasterfrom
semgrep-fold

Conversation

@sim642
Copy link
Copy Markdown
Member

@sim642 sim642 commented Nov 1, 2024

After seeing them in BasePriv, I added the semgrep rules to do a systematic search.
All of the findings are either replaced or suppressed because the condition also performs side effects.

Using exists and for_all is better (when possible) because they stop iterating early while fold is forced to go through the entire data structure.

@sim642 sim642 added cleanup Refactoring, clean-up performance Analysis time, memory usage labels Nov 1, 2024
end in
let cond n2 = Node.equal n2 (FunctionEntry f2) || check_all_nodes_in_same (List.map snd (CfgNew.prev n2)) n2 in
let forall = NH.fold (fun n2 n1 acc -> acc && cond n2) same.node2to1 true in
let forall = NH.fold (fun n2 n1 acc -> acc && cond n2) same.node2to1 true in (* nosemgrep: fold-for_all *) (* cond does side effects *)

Check warning

Code scanning / Semgrep OSS

Semgrep Finding: semgrep.fold-for_all

consider replacing fold with for_all
@sim642 sim642 added this to the v2.5.0 milestone Nov 1, 2024
@sim642 sim642 merged commit 750f1ee into master Nov 1, 2024
@sim642 sim642 deleted the semgrep-fold branch November 1, 2024 18:12
sim642 added a commit to sim642/opam-repository that referenced this pull request Nov 28, 2024
CHANGES:

Functionally equivalent to Goblint in SV-COMP 2025.

* Add 32bit vs 64bit architecture support (goblint/analyzer#54, goblint/analyzer#1574).
* Add per-function context gas analysis (goblint/analyzer#1569, goblint/analyzer#1570, goblint/analyzer#1598).
* Adapt automatic static loop unrolling (goblint/analyzer#1516, goblint/analyzer#1582, goblint/analyzer#1583, goblint/analyzer#1584, goblint/analyzer#1590, goblint/analyzer#1595, goblint/analyzer#1599).
* Adapt automatic configuration tuning (goblint/analyzer#1450, goblint/analyzer#1612, goblint/analyzer#1181, goblint/analyzer#1604).
* Simplify non-relational integer invariants in witnesses (goblint/analyzer#1517).
* Fix excessive hash collisions (goblint/analyzer#1594, goblint/analyzer#1602).
* Clean up various code (goblint/analyzer#1095, goblint/analyzer#1523, goblint/analyzer#1554, goblint/analyzer#1575, goblint/analyzer#1588, goblint/analyzer#1597, goblint/analyzer#1614).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cleanup Refactoring, clean-up performance Analysis time, memory usage

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants