dotnet/runtime · error · RuntimeError
No JIT changes found starting with baseline hash
Error message
No JIT changes found starting with baseline hash
What it means
Raised by determine_base_jit when the 'git log' over the last 20 commits from the baseline touched no JIT source files, yielding an empty change list. With no candidate commits, there is nothing to download a baseline JIT from, so the function aborts. This is a data-condition failure rather than a git error: the command succeeded but returned zero lines.
Solutions
- Pass --base_git_hash <sha> pointing at a commit known to contain JIT changes so the candidate list is non-empty.
- Verify the src/coreclr/jit pathspec is correct for your checkout layout.
- If the baseline genuinely has no recent JIT changes, pick an older baseline commit that does, or supply --base_jit_path directly.
Example fix
// before
change_list_hashes = stdout_change_list.decode('utf-8').strip().splitlines()
if len(change_list_hashes) == 0:
raise RuntimeError("No JIT changes found starting with baseline hash")
// after (fix invocation)
python superpmi.py asmdiff --base_git_hash <commit-with-jit-changes> ... Defensive patterns
Strategy: validation
Validate before calling
import subprocess
def ensure_jit_changes_exist(repo_location, baseline_hash):
cmd = ['git', '-C', repo_location, 'log', '--pretty=format:%H', baseline_hash, '-20', '--', 'src/coreclr/jit/*', 'src/coreclr/inc/jiteeversionguid.h']
out = subprocess.run(cmd, capture_output=True).stdout.decode('utf-8').strip().splitlines()
if len(out) == 0:
raise RuntimeError(f"No JIT changes in last 20 commits from {baseline_hash}; pass --base_git_hash <commit-with-jit-changes>")
return out Prevention
- Choose a baseline commit that includes JIT source changes.
- Pass --base_git_hash explicitly when the auto-selected baseline has no JIT changes.
- Alternatively supply --base_jit_path to bypass discovery entirely.
When it happens
Trigger: After git log returns code 0, stdout_change_list.decode().strip().splitlines() is empty (len == 0), so the RuntimeError fires. Happens when the last 20 commits from the baseline include none that modified src/coreclr/jit/* or jiteeversionguid.h, or when the baseline is at HEAD with no prior JIT changes in range.
Common situations: A branch where recent work is entirely outside the JIT (e.g. libraries/VM changes); the baseline_hash being very close to HEAD; a pathspec mismatch where JIT sources live elsewhere; an extremely fresh repo with fewer than 20 commits.
Related errors
- Couldn't determine list of JIT changes starting with…
- Couldn't determine baseline git hash
- Couldn't determine current git hash
- Couldn't determine newest 'main' git hash
- Couldn't create git diff
AI-assisted analysis of dotnet/runtime@60108ba66e (2026-08-10).
Data as JSON: /api/errors/5b5775e06ff518bb.
Report an issue: GitHub.
Appendix: source
Thrown at src/coreclr/scripts/superpmi.py:4913
logging.info("Baseline hash: %s", baseline_hash)
else:
baseline_hash = coreclr_args.base_git_hash
if coreclr_args.base_git_hash is None:
# Enumerate the last 20 changes, starting with the baseline, that included JIT and JIT-EE GUID changes.
command = [ "git", "log", "--pretty=format:%H", baseline_hash, "-20", "--", "src/coreclr/jit/*", "src/coreclr/inc/jiteeversionguid.h" ]
logging.debug("Invoking: %s", " ".join(command))
proc = subprocess.Popen(command, stdout=subprocess.PIPE)
stdout_change_list, _ = proc.communicate()
return_code = proc.returncode
change_list_hashes = []
if return_code == 0:
change_list_hashes = stdout_change_list.decode('utf-8').strip().splitlines()
else:
raise RuntimeError("Couldn't determine list of JIT changes starting with baseline hash")
if len(change_list_hashes) == 0:
raise RuntimeError("No JIT changes found starting with baseline hash")
else:
# If `-base_git_hash` is specified, then we use exactly that hash and no other for the baseline.
change_list_hashes = [ coreclr_args.base_git_hash ]
# For each hash, (1) see if we have the JIT already, and if not (2) try to download the corresponding JIT from the rolling build.
hashnum = 1
for git_hash in change_list_hashes:
logging.debug("%s: %s", hashnum, git_hash)
jit_name = get_jit_name(coreclr_args)
basejit_dir = os.path.join(default_basejit_root_dir, "{}.{}.{}.{}".format(git_hash, coreclr_args.host_os, coreclr_args.arch, coreclr_args.build_type))
basejit_path = os.path.join(basejit_dir, jit_name)
if os.path.isfile(basejit_path):
# We found this baseline JIT in our cache; use it!
coreclr_args.base_jit_path = basejit_path
logging.info("Using baseline %s", coreclr_args.base_jit_path)
returnView on GitHub (pinned to 60108ba66e)