Semantic differences due to Python 3.12 variable shadowing in comprehensions
============================================================================

Python 3.12 introduced a new bytecode ``LOAD_FAST_AND_CLEAR`` that is only used 
in comprehensions. It has dynamic semantics that Numba cannot model. 

For example,

.. code-block:: python

    def foo():
        if False:
            x = 1
        [x for x in (1,)]
        return x  # This return uses undefined variable

The variable `x` is undefined at the return statement. Instead of raising an 
``UnboundLocalError``, Numba will raise a ``TypingError`` at compile time if an 
undefined variable is used.

However, Numba cannot always detect undefined variables. 

For example,

.. code-block:: python

    def foo(a):
        [x for x in (0,)]
        if a:
            x = 3 + a
        x += 10
        return x

Calling ``foo(0)`` returns ``10`` instead of raising ``UnboundLocalError``. 
This is because Numba does not track variable liveness at runtime. 
The return value is ``0 + 10`` since Numba zero-initializes undefined variables.
