Skip to content

Bug report (Regression): bad overload resolution in --strict mode #19458

@thierry-martinez

Description

@thierry-martinez

Bug Report

The following code type-checked with mypy 1.16.1 in --strict mode but does not type-check with mypy 1.17 and the master branch (currently eb07c06) in --strict mode. Bisecting points to the commit 33d1eed.

Note that the problem does not occur if --strict mode is disabled.

To Reproduce

import inspect
import typing
from typing import Any, ClassVar

def is_classvar(cls: type, scope: dict[Any, type]) -> bool:
    ann = inspect.get_annotations(cls, eval_str=True, locals=scope).get("kind")
    if ann is None:
        raise Exception("Should be annotated.")
    return typing.get_origin(ann) is not ClassVar

Actual Behavior

mypy --strict test_any.py
test_any.py:9: error: Non-overlapping identity check (left operand type: "ParamSpec", right operand type: "<typing special form>")  [comparison-overlap]
Found 1 error in 1 file (checked 1 source file)

Your Environment

  • Mypy version used: mypy 1.17 and master (bad), mypy 1.16.1 (good)
  • Mypy command-line flags: --strict
  • Mypy configuration options from mypy.ini (and other config files):
  • Python version used: 3.13

Note that reveal_type(ann) gives Any | None and that annotating ann: Any | None solves the problem.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugmypy got something wrong

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions