GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — Check each branch of a conditional expression under its condition by CatarinaGamboa · Pull Request #409 · liquid-java/liquidjava

Conversation

@CatarinaGamboa

@CatarinaGamboa CatarinaGamboa commented Oct 20, 2026

Copy link
Copy Markdown
Collaborator

Problem

The branches of a conditional expression were checked without knowing which way its condition went:

boolean canUndo = um.canUndo();
return canUndo ? um.getUndoPresentationName() : "Undo";
State Refinement Error: found canUndo ? end(um) : true but expected canEdit(um) || end(um)

The same guard written as an if passes. visitCtConditional scanned the condition and both branches with no path condition, then only built the ITE for the expression's value.

Fix

  • visitCtConditional scans the condition, then each branch with the condition (then) or its negation (else) as a path condition, removed after the branch.
  • The encoding is the loop condition's (assumeLoopCondition), now assumeCondition(condition, holds); loops call it with true. Conditions with side effects still assume nothing.

Tests

  • CorrectTernaryConditionInBranch: full ? box.peek() : 0 where peek needs full(this) and full is box.isFull(). It failed before this change.
  • ErrorTernaryConditionInBranch: full ? 0 : box.peek(): still reported.
  • mvn test: 429 tests, 0 failures.

Found on a real fixed bug (JabRef's CountingUndoManager, which labels its undo and redo events with canUndo ? getUndoPresentationName() : ...). We also checked 53 exercises built from real OSS bugs on main (e0a6c81) and with this change: the results are identical.

🤖 Generated with Claude Code

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@CatarinaGamboa @claude
Check each branch of a conditional expression under its condition
d90b4b2
The branches of `c ? a : b` were checked without knowing which way c went,
so `canUndo ? um.getUndoPresentationName() : "Undo"` was rejected even
though the call only runs when canUndo holds. Each branch now gets the
condition (or its negation) as a path condition, encoded as for loops.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
rcosta358
rcosta358 approved these changes Oct 20, 2026
View reviewed changes
@CatarinaGamboa
CatarinaGamboa merged commit 157c37b into main Oct 24, 2026
1 check passed

Uh oh!

There was an error while loading. Please reload this page.

@CatarinaGamboa CatarinaGamboa mentioned this pull request Oct 24, 2026
Land the rest of the state hints stack (#412, #413, #414) #417
Merged
1 task done
CatarinaGamboa added a commit that referenced this pull request Oct 24, 2026
@CatarinaGamboa @claude
Land the rest of the state hints stack (#412, #413, #414) (#417)
69895fa
## Description
#412, #413 and #414 were merged into their stacked base branches instead
of `main`: once #411 was merged, their bases were never retargeted.
Their code is only on `feat/state-hints-unknown`.

This PR applies the three reviewed commits on top of `main`, unchanged:
- Explain dead ends in failing state transitions (#412)
- List the calls that reach an allowed state when the state is unknown
(#413)
- Build each class's state machine once per checker (#414)

The hint and state machine files are identical to
`feat/state-hints-unknown`. Rebase-merging keeps the three commits
separate.

## Checklist
- [x] `mvn test` passes locally on top of the current `main` (#408,
#409)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@rcosta358 rcosta358 rcosta358 approved these changes

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

2 participants

@CatarinaGamboa @rcosta358
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.