oracle/graal · error · TypeError

unexpected tuple size for jvmci variant

Error message

unexpected tuple size for jvmci variant {variant} (size must be <= 4)

What it means

mx SDK benchmark harness error raised when registering JVMCI VM variants: each variant tuple in suite configuration must have 2, 3, or 4 elements (name, args[, priority[, compiler_config]]). A tuple of any other length is a configuration-authoring mistake and raises TypeError immediately during add_vm suite setup.

Solutions

  1. Inspect the variants list passed to the JVMCI registration and fix each entry to (name, args), (name, args, priority), or (name, args, priority, compiler_config).
  2. Check for accidental trailing commas ('graal',) that create 1-tuples.
  3. If you need a new field, extend the branch chain in mx_sdk_benchmark.py itself rather than appending extra tuple elements.

Example fix

# before
variants = [('graal', '-XX:+UseJVMCICompiler', 1, 'community', 'extra')]

# after
variants = [('graal', '-XX:+UseJVMCICompiler', 1, 'community')]
Defensive patterns

Strategy: validation

Validate before calling

def validate_variants(variants):
    for v in variants:
        if not isinstance(v, tuple) or len(v) not in (2, 3, 4):
            raise ValueError(f"bad jvmci variant tuple: {v!r} (need len 2-4)")
    return variants

Type guard

def is_valid_jvmci_variant(v) -> bool:
    return isinstance(v, tuple) and len(v) in (2, 3, 4) and isinstance(v[0], str) and isinstance(v[1], (str, list))

Try / catch

Wrap suite registration in try/except TypeError during config loading and report the offending tuple to the user; fail fast at config parse time rather than mid-benchmark.

Prevention

When it happens

Trigger: Calling the JVMCI VM registration helper with a variants list containing a 1-element or 5+-element tuple, e.g. variants = [('graal',), ...] or ('name', args, priority, config, extra). Trips before any benchmark runs, during mx benchmark suite initialization.

Common situations: Editing mx_sdk_benchmark-style suite definitions or suite.py benchmark configs in a downstream GraalVM distribution; typo like a trailing comma creating a 1-tuple, or passing a list instead of tuple so len() is wrong.

Related errors


AI-assisted analysis of oracle/graal@a66e9ccd1d (2026-08-14). Data as JSON: /api/errors/58a06451f72cf76a. Report an issue: GitHub.

Appendix: source

Thrown at sdk/mx.sdk/mx_sdk_benchmark.py:220

    if hosted:
        prefixes.append(('hosted-', ['-XX:-UseJVMCICompiler']))
    for prefix, args in prefixes:
        extended_raw_config_name = prefix + raw_config_name
        extended_extra_args = extra_args + args
        if include_default:
            mx_benchmark.add_java_vm(
                JvmciJdkVm(raw_name, extended_raw_config_name, extended_extra_args), suite, priority)
        for variant in variants:
            compiler_config = None
            if len(variant) == 2:
                var_name, var_args = variant
                var_priority = priority
            elif len(variant) == 3:
                var_name, var_args, var_priority = variant
            elif len(variant) == 4:
                var_name, var_args, var_priority, compiler_config = variant
            else:
                raise TypeError(f"unexpected tuple size for jvmci variant {variant} (size must be <= 4)")

            variant_args = extended_extra_args + var_args
            if compiler_config is not None:
                variant_args = add_or_replace_arg('-Djdk.graal.CompilerConfiguration', compiler_config, variant_args)

            mx_benchmark.add_java_vm(
                JvmciJdkVm(raw_name, extended_raw_config_name + '-' + var_name, variant_args), suite, var_priority)


class GraalVm(mx_benchmark.OutputCapturingJavaVm):
    def __init__(self, name, config_name, extra_java_args, extra_launcher_args):
        """
        :type name: str
        :type config_name: str
        :type extra_java_args: list[str] | None
        :type extra_launcher_args: list[str] | None
        """
        super().__init__()

View on GitHub (pinned to a66e9ccd1d)