oracle/graal · error · IllegalArgumentException
{file}:{line}: {cause}
Error message
{file}:{line}: {cause} What it means
While parsing each line of the directed inlining rules file, parseCommandFileLine (DirectedInliningRules.java:257) delegates to parseRule and rethrows any IllegalArgumentException prefixed with '<file>:<line>:' so the user knows exactly which rule line is malformed. The message itself comes from the inner parse error (e.g., empty rule, bad receiver type filter).
Source
Thrown at compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/phases/common/inlining/DirectedInliningRules.java:257
return;
}
int commandSeparator = findCommandSeparator(commandLine);
if (commandSeparator < 0) {
throw invalidCommand(commandFile, lineNumber, commandLine);
}
String command = commandLine.substring(0, commandSeparator).trim().toLowerCase(Locale.ROOT);
String ruleSpec = commandLine.substring(commandSeparator + 1).trim();
if (ruleSpec.startsWith(String.valueOf(DIRECTIVE_SEPARATOR))) {
ruleSpec = ruleSpec.substring(1).trim();
}
if (ruleSpec.isEmpty()) {
throw invalidCommand(commandFile, lineNumber, commandLine);
}
Rule rule;
try {
rule = parseRule(ruleSpec);
} catch (IllegalArgumentException e) {
throw new IllegalArgumentException(commandFile + ":" + lineNumber + ": " + e.getMessage(), e);
}
switch (command) {
case "inline" -> inlineRules.add(rule);
case "dontinline" -> dontInlineRules.add(rule);
default -> throw invalidCommand(commandFile, lineNumber, commandLine);
}
}
private static String stripComment(String line) {
int commentStart = line.indexOf('#');
return commentStart < 0 ? line : line.substring(0, commentStart);
}
private static int findCommandSeparator(String commandLine) {
for (int i = 0; i < commandLine.length(); i++) {
char c = commandLine.charAt(i);
if (c == DIRECTIVE_SEPARATOR || Character.isWhitespace(c)) {
return i;View on GitHub (pinned to a66e9ccd1d)
Solutions
- Open the named file at the reported line number and fix the rule according to the EXPECTED_RULE_FORMAT shown in the 'Directed inlining rule must have the form ...' companion message
- Strip anything after '#' only as comments; ensure the line has the form 'inline|dontinline : callerSpec -> ... -> calleeSpec'
- Re-run and fix lines one at a time; each remaining error reports the next bad line
Example fix
# before (rules.txt:3) inline : com.foo.A.* -> # after (rules.txt:3) inline : com.foo.A.* -> com.bar.B.quad(int)
Defensive patterns
Strategy: try-catch
Try / catch
try {
rules = DirectedInliningRules.fromFile(path);
} catch (IllegalArgumentException e) {
// message is '<file>:<line>: <cause>' — log it and surface to the user editing the file
log.error("bad directed-inlining rule: {}", e.getMessage());
} Prevention
- Lint the rules file in CI with a dry parse before benchmark jobs
- Use '#' as the only comment character and keep rules on single lines
When it happens
Trigger: Any syntax error in a rule line (after '#' comment stripping) in the file named by -Dgraal.DirectedInliningCommandFile: missing caller/callee, stray '@', bad receiver-type braces, etc.
Common situations: Hand-edited rules files; comments using the wrong comment character; copy-pasting rules from docs that mangle unicode dashes or quotes.
Related errors
- Invalid directed inlining rules file path: {path}
- Directed inlining rule must have non-empty caller and callee
- Directed inlining rule has an empty {componentName} filter o
- Directed inlining rule receiver type filter must name exactl
- Directed inlining rule receiver type filter must contain sim
AI-assisted analysis of oracle/graal@a66e9ccd1d (2026-08-14).
Data as JSON: /api/errors/cedbfda4ccc9acbe.
Report an issue: GitHub.