Repository navigation
Conversation
Daikon treats arbitrarily named program points such as :::POINT (used by convertcsv.pl) as leaves of the dataflow hierarchy, but the splitter hierarchy code treated only numbered exit points as leaves. As a result, splitting at such a program point produced no samples and no implications. Add PptTopLevel.is_dataflow_leaf() and use it consistently.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configuration
⛔ Files ignored due to path filters (1)
📒 Files selected for processing (16)
Included review availability: This review used your included allowance. Your plan provides up to 2 included reviews per hour; 0 remain after this review. 📝 WalkthroughWalkthroughProgram-point types are normalized from names, and dataflow-leaf checks now guide hierarchy construction, sample processing, and invariant merging. Nullable annotation discovery and evaluation can use numbered exits when a combined exit is absent. Test expectations update exit labels, and a SplitPoint test fixture is added. Suggested reviewers: Priority: ➖ Normal Change: Bug fix Merge Risk: ⚪ Minimal · up to No actionable issue is established from the available evidence; the change is mergeable after normal checks. Security Architecture ReviewSecurity architecture risk: 🔵 Low · up to The examined changes remain within file-based analysis and do not establish new privileges or output destinations. The shared classification change has a meaningful compatibility surface, with historical serialized inputs and interrupted or concurrent use only partially assessed. Retained concerns Security review detailsSecurity Blast Radius
Trust Boundaries and Controls
Resilience and Maintainability Implications
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
FileIO.process_sample and MergeInvariants now use is_dataflow_leaf() rather than their own leaf tests. is_dataflow_leaf() follows the declared ppt type when there is one, treats :::GLOBAL as a non-leaf, and is the basis of the final assertion in init_hierarchy_new. The new SplitPoint test splits a :::POINT program point.
… SplitPoint test * FileIO reads a "ppt-type exit" declaration of a numbered exit (such as foo:::EXIT22) as SUBEXIT, so is_subexit, is_combined_exit, and is_dataflow_leaf agree about it. is_dataflow_leaf no longer special-cases it. * process_sample again rejects samples at any combined-exit name. * init_hierarchy (old decls) also creates equality views for childless non-leaves such as :::GLOBAL; the assertion there excludes combined exits. * MergeInvariants builds the hierarchy from a decls file the same way Daikon does. * SplitPoint test data now yields implications relating x and y.
…e hierarchy dispatch Normalize a numbered exit typed EXIT or POINT to SUBEXIT, and a non-combined-exit name typed EXIT to POINT, in the PptTopLevel constructor and readObject, so that deserialized ppts also get consistent predicates. Remove MergeInvariants's assertion that non-leaves have children, allow childless combined exits, and drop splitters of childless non-leaves. Add PptRelation.init_hierarchy_for_decl_format.
…e normalization, merge-link cleanup, AnnotateNullable, shared helpers - MergeInvariants: set up equality views on childless non-leaves when the merge template comes from .inv files; remove only MERGE_CHILD relations in the final cleanup. - PptTopLevel.normalize_type: require EXIT followed by digits for SUBEXIT; a POINT- or EXIT-typed foo:::EXIT is a combined exit. - Daikon.create_combined_exits: do not replace a declared combined exit. - AnnotateNullable: accept a numbered exit with no combined-exit parent as a method's exit. - Share conditional-connection and hierarchy-finishing code between init_hierarchy and init_hierarchy_new; share equality-view creation.
… combined exits * PptTopLevel.normalize_type also derives ENTER, OBJECT, and CLASS from the name, and applies to ppts with no declared type, so the is_* predicates no longer need name-based fallbacks. PptConditional takes its parent's type. * Move the numbered-exit name test to PptName.isExitWithLineNumber. * AnnotateNullable processes a method once even when an .inv file lacks its combined exit, combining the annotations of all its numbered exits. * Reword the FileIO comment about samples at combined exit points. * init_hierarchy_new again includes conditional relations in its debug output.
# Conflicts: # tests/daikon-tests/Makefile
Use issue537's runcluster scripts, which support the new declaration format and declarations in dtrace files, and which fix invocation nonces in a temporary copy of the trace. Retain issue365's check that each dtrace record matches its declaration, now for both declaration formats. Omit issue537's Daikon changes for leaf program points, which codespecs#858 does more completely, and its Issue537 tests, which duplicate codespecs#858's SplitPoint test.
PptRelation.init_hierarchy (old declaration format) and init_hierarchy_new now share connect_conditionals and finish_hierarchy, so the old format also creates equality views for childless non-leaves. A non-leaf with no children has its splitters removed. New methods PptRelation.init_hierarchy_for_decl_format and PptTopLevel.create_equality_view replace duplicated code. Split from codespecs#858.
PptRelation.init_hierarchy (old declaration format) and init_hierarchy_new now share connect_conditionals and finish_hierarchy, so the old format also creates equality views for childless non-leaves. A non-leaf with no children has its splitters removed. New methods PptRelation.init_hierarchy_for_decl_format and PptTopLevel.create_equality_view replace duplicated code. Split from codespecs#858.
PptRelationassumed that numbered exits are the only leaves of the dataflow hierarchy. At any other leaf with splitters (such as a:::POINTprogram point, as produced byconvertcsv.pl), the samples went only to the conditional program points, so the program point had no samples and no implications.The new
PptTopLevel.is_dataflow_leaf()is the single definition of a leaf.PptRelation,FileIO.process_sample,MergeInvariants, andsetupEqualityall use it. To make the ppt-type predicates (is_subexit,is_combined_exit,is_dataflow_leaf, ...) agree,PptTopLevelderives each program point's type from its name when the declaration does not give one, and normalizes inconsistent declared types (for example, a numbered exit declared withppt-type exitis a subexit).Other changes:
PptRelation:init_hierarchy(old declaration format) andinit_hierarchy_newshare the code that connects conditional program points and finishes the hierarchy.:::GLOBALand a combined exit with no numbered exits, get equality views rather than failing an assertion.MergeInvariantsbuilds the hierarchy from a decls file the same way Daikon does.AnnotateNullablehandles an .inv file that has numbered exits but no combined exit.Test changes:
SplitPointtest splits a:::POINTprogram point.KnownValuesandKnownValuesNewDeclsgoal files, invariants are reported at:::EXITrather than:::EXIT1: their numbered exits are declared withppt-type exit, which is now normalized to a subexit, so Daikon creates the combined exit.runcluster.pl(#856) depends on this change; its tests are intests/script-tests/runcluster/.