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 — Verifier crashes on a `for` loop whose body is an empty statement (`for (...) ;`) · Issue #395 · liquid-java/liquidjava

Verifier crashes on a for loop whose body is an empty statement (for (...) ;) #395

New issue
Copy link
New issue
Copy link
Open
Open
Verifier crashes on a for loop whose body is an empty statement (for (...) ;)#395
Copy link
Labels
bugSomething isn't workingSomething isn't workingreal-world-findingFound when experimenting liquidjava in real world repos or OSSFound when experimenting liquidjava in real world repos or OSS

Description

@CatarinaGamboa
CatarinaGamboa
opened on Oct 13, 2026
Issue body actions

Impact: verification stops with an internal error on any for loop whose body is an empty statement (;).

Description

for (...; ...; ...) ; has no body block: CtFor.getBody() is null, and RefinementTypeChecker.visitCtFor calls getElements on it (RefinementTypeChecker.java:628). Nothing in the loop needs a refinement, so an empty body could be checked as an empty block.

Minimal reproducer

public class Repro {
    static int total(int[] counts) {
        int total = 0;
        for (int i = 0; i < counts.length; total += counts[i], i++)
            ;
        return total;
    }
}

Expected

Correct! Passed Verification.

Actual

Exception in thread "main" java.lang.RuntimeException: 
Error while checking CtMethodImpl
  on total(int[] counts) { 
  at Repro.java:2
  with 
Error while checking CtBlockImpl
  on { 
  at Repro.java:2
  with 
Error while checking CtForImpl
  on for (int i = 0; i < counts.length; total += counts[i], i++) 
  at Repro.java:4
  with Cannot invoke "spoon.reflect.code.CtStatement.getElements(spoon.reflect.visitor.Filter)" because the return value of "spoon.reflect.code.CtFor.getBody()" is null
...
Caused by: java.lang.NullPointerException: Cannot invoke "spoon.reflect.code.CtStatement.getElements(spoon.reflect.visitor.Filter)" because the return value of "spoon.reflect.code.CtFor.getBody()" is null
	at liquidjava.processor.refinement_checker.RefinementTypeChecker.lambda$visitCtFor$4(RefinementTypeChecker.java:628)
	at liquidjava.processor.refinement_checker.RefinementTypeChecker.visitLoop(RefinementTypeChecker.java:658)
	at liquidjava.processor.refinement_checker.RefinementTypeChecker.visitCtFor(RefinementTypeChecker.java:623)

Reproduced on main at ad055b4 (liquidjava-verifier 0.0.35).

Real-world file that hits it

  • for (int i = 0; i < updateCount.length; cnt += updateCount[i], i++) ; — tejeswarp/tungsten-replicator (file)

Context

Found while running LiquidJava on the original repository files of 53 real-world typestate and refinement bugs (the files our study exercises were simplified from). Each file is verified on its own, as a user would verify one file of a project, so the project's other classes and its dependencies are not on the classpath.

Activity

  1. CatarinaGamboa
    added
    bugSomething isn't workingSomething isn't working
    on Oct 13, 2026
  2. CatarinaGamboa
    added
    real-world-findingFound when experimenting liquidjava in real world repos or OSSFound when experimenting liquidjava in real world repos or OSS
    on Oct 27, 2026
  3. CatarinaGamboa
    added a commit that references this issue on Oct 29, 2026

    Fix crashes on unresolved types and on empty for bodies (#432)

    6f0239d
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingSomething isn't workingreal-world-findingFound when experimenting liquidjava in real world repos or OSSFound when experimenting liquidjava in real world repos or OSS

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      You are visitor 01402520 — 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.