diff --git a/mypy/checker.py b/mypy/checker.py
--- a/mypy/checker.py
+++ b/mypy/checker.py
@@ -3173,6 +3173,9 @@ def check_multi_assignment(
         # TODO: maybe elsewhere; redundant.
         rvalue_type = get_proper_type(rv_type or self.expr_checker.accept(rvalue))
 
+        if isinstance(rvalue_type, TypeVarType):
+            rvalue_type = get_proper_type(rvalue_type.upper_bound)
+
         if isinstance(rvalue_type, UnionType):
             # If this is an Optional type in non-strict Optional code, unwrap it.
             relevant_items = rvalue_type.relevant_items()

diff --git a/test-data/unit/check-bound.test b/test-data/unit/check-bound.test
--- a/test-data/unit/check-bound.test
+++ b/test-data/unit/check-bound.test
@@ -215,3 +215,13 @@ if int():
     b = 'a' # E: Incompatible types in assignment (expression has type "str", variable has type "int")
 twice(a) # E: Value of type variable "T" of "twice" cannot be "int"
 [builtins fixtures/args.pyi]
+
+
+[case testIterableBoundUnpacking]
+from typing import Tuple, TypeVar
+TupleT = TypeVar("TupleT", bound=Tuple[int, ...])
+def f(t: TupleT) -> None:
+    a, *b = t
+    reveal_type(a)  # N: Revealed type is "builtins.int"
+    reveal_type(b)  # N: Revealed type is "builtins.list[builtins.int]"
+[builtins fixtures/tuple.pyi]
diff --git a/test-data/unit/check-typevar-unbound.test b/test-data/unit/check-typevar-unbound.test
--- a/test-data/unit/check-typevar-unbound.test
+++ b/test-data/unit/check-typevar-unbound.test
@@ -58,3 +58,9 @@ def h(a: List[Union[Callable[..., T]]]) -> T:
 def j(a: List[Union[Callable[..., Tuple[T, T]], int]]) -> T:
     ...
 [builtins fixtures/tuple.pyi]
+
+[case testUnboundedTypevarUnpacking]
+from typing import TypeVar
+T = TypeVar("T")
+def f(t: T) -> None:
+    a, *b = t  # E: "object" object is not iterable

Instances of type variables bounded by an iterable type support iteration but not unpacking
**Bug Report**

Instances of type variables bounded by an iterable type support iteration but not unpacking.

**To Reproduce**

```python
from typing import TypeVar

class A:
    pass

ATuple = TypeVar("ATuple", bound=tuple[A, ...])

def f(aa: ATuple) -> None:
    for a in aa:               # this is ok
        print(a)

f((A(),))

def g(aa: ATuple) -> None:
    (a,) = aa                  # "ATuple" object is not iterable
    print(a)

g((A(),))
```

Bounding the TypeVar by `list[A]` has the same behaviour as bounding it by `tuple[A, ...]`.

**Expected Behavior**

No error -- an ATuple should support both iteration and unpacking.

**Actual Behavior**

f() checks clean.

In g(), unpacking fails with:

error: "ATuple" object is not iterable
error: Cannot determine type of "a"

**Your Environment**

This reproduces in all versions in the playground.

mypy/test/testcheck.py::TypeCheckSuite::check-bound.test::testBoundGenericFunctions mypy/test/testcheck.py::TypeCheckSuite::check-bound.test::testBoundHigherOrderWithVoid mypy/test/testcheck.py::TypeCheckSuite::check-bound.test::testBoundVoid mypy/test/testcheck.py::TypeCheckSuite::check-bound.test::testBoundOnGenericFunction mypy/test/testcheck.py::TypeCheckSuite::check-bound.test::testBoundInheritance mypy/test/testcheck.py::TypeCheckSuite::check-bound.test::testBoundAny mypy/test/testcheck.py::TypeCheckSuite::check-bound.test::testBoundMethodUsage mypy/test/testcheck.py::TypeCheckSuite::check-bound.test::testBoundOnGenericClass mypy/test/testcheck.py::TypeCheckSuite::check-bound.test::testBoundClassMethod mypy/test/testcheck.py::TypeCheckSuite::check-bound.test::testBoundStaticMethod mypy/test/testcheck.py::TypeCheckSuite::check-bound.test::testBoundClassMethodWithNamedTupleBase mypy/test/testcheck.py::TypeCheckSuite::check-bound.test::testBoundOnDecorator mypy/test/testcheck.py::TypeCheckSuite::check-typevar-unbound.test::testUnboundTypeVar mypy/test/testcheck.py::TypeCheckSuite::check-typevar-unbound.test::testInnerFunctionTypeVar mypy/test/testcheck.py::TypeCheckSuite::check-typevar-unbound.test::testUnboundIterableOfTypeVars mypy/test/testcheck.py::TypeCheckSuite::check-typevar-unbound.test::testNestedBoundTypeVar mypy/test/testcheck.py::TypeCheckSuite::check-typevar-unbound.test::testBoundTypeVar
mypy/test/testcheck.py::TypeCheckSuite::check-bound.test::testIterableBoundUnpacking mypy/test/testcheck.py::TypeCheckSuite::check-typevar-unbound.test::testUnboundedTypevarUnpacking