{"record":{"id":"58a06451f72cf76a","repo":"oracle/graal","slug":"unexpected-tuple-size-for-jvmci-variant-variant","errorCode":null,"errorMessage":"unexpected tuple size for jvmci variant {variant} (size must be <= 4)","messagePattern":"unexpected tuple size for jvmci variant (.+?) \\(size must be <= 4\\)","errorType":"validation","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"sdk/mx.sdk/mx_sdk_benchmark.py","lineNumber":220,"sourceCode":"    if hosted:\n        prefixes.append(('hosted-', ['-XX:-UseJVMCICompiler']))\n    for prefix, args in prefixes:\n        extended_raw_config_name = prefix + raw_config_name\n        extended_extra_args = extra_args + args\n        if include_default:\n            mx_benchmark.add_java_vm(\n                JvmciJdkVm(raw_name, extended_raw_config_name, extended_extra_args), suite, priority)\n        for variant in variants:\n            compiler_config = None\n            if len(variant) == 2:\n                var_name, var_args = variant\n                var_priority = priority\n            elif len(variant) == 3:\n                var_name, var_args, var_priority = variant\n            elif len(variant) == 4:\n                var_name, var_args, var_priority, compiler_config = variant\n            else:\n                raise TypeError(f\"unexpected tuple size for jvmci variant {variant} (size must be <= 4)\")\n\n            variant_args = extended_extra_args + var_args\n            if compiler_config is not None:\n                variant_args = add_or_replace_arg('-Djdk.graal.CompilerConfiguration', compiler_config, variant_args)\n\n            mx_benchmark.add_java_vm(\n                JvmciJdkVm(raw_name, extended_raw_config_name + '-' + var_name, variant_args), suite, var_priority)\n\n\nclass GraalVm(mx_benchmark.OutputCapturingJavaVm):\n    def __init__(self, name, config_name, extra_java_args, extra_launcher_args):\n        \"\"\"\n        :type name: str\n        :type config_name: str\n        :type extra_java_args: list[str] | None\n        :type extra_launcher_args: list[str] | None\n        \"\"\"\n        super().__init__()","sourceCodeStart":202,"sourceCodeEnd":238,"githubUrl":"https://github.com/oracle/graal/blob/a66e9ccd1d7bf2552883939aa0788dfd0e294aab/sdk/mx.sdk/mx_sdk_benchmark.py#L202-L238","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["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).","Check for accidental trailing commas ('graal',) that create 1-tuples.","If you need a new field, extend the branch chain in mx_sdk_benchmark.py itself rather than appending extra tuple elements."],"exampleFix":"# before\nvariants = [('graal', '-XX:+UseJVMCICompiler', 1, 'community', 'extra')]\n\n# after\nvariants = [('graal', '-XX:+UseJVMCICompiler', 1, 'community')]","handlingStrategy":"validation","validationCode":"def validate_variants(variants):\n    for v in variants:\n        if not isinstance(v, tuple) or len(v) not in (2, 3, 4):\n            raise ValueError(f\"bad jvmci variant tuple: {v!r} (need len 2-4)\")\n    return variants","typeGuard":"def is_valid_jvmci_variant(v) -> bool:\n    return isinstance(v, tuple) and len(v) in (2, 3, 4) and isinstance(v[0], str) and isinstance(v[1], (str, list))","tryCatchPattern":"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.","preventionTips":["Validate variant tuples in a unit test for your suite config.","Watch for trailing commas creating 1-tuples.","Document the accepted shapes (2/3/4 elements) next to the variants list."],"tags":["mx","benchmark","configuration","python","jvmci"],"backgroundTag":null,"analyzedSha":"a66e9ccd1d7bf2552883939aa0788dfd0e294aab","analyzedAt":"2026-08-14T13:58:47.161Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}