React version: 18.3.0-next-3ba7add60-20221201

Hard to reproduce.

In Next.js, in rare cases, and only after a fast refresh, the ref object when using forwardRef is simply `{}`.

This leads to the `TypeError: can't define property "current": Object is not extensible` error when used with `useImperativeHandle`.

```tsx
function Parent() {
  const carouselRef = useRef<any>();

  return <Suspense><Carousel ref={carouselRef} /></Suspense>
}

const Carousel = forwardRef((props, ref) => {
  if (!('current' in ref)) { debugger; }
  const thing = use(aPromise);
  return ...;
});
```

![Screenshot 2023-03-17 at 18 49 21](https://user-images.githubusercontent.com/5406212/225981809-22f575fa-0ec7-4f94-ae23-bffc8bf7c4dd.png)

In `updateImperativeHandle`, the ref is already an empty object.

![Screenshot 2023-03-17 at 19 13 13](https://user-images.githubusercontent.com/5406212/225985622-b8512a61-3a6b-4958-b63f-277219d4c816.png)

I haven't investigated it further yet, the stacktraces are quite hard to follow.
workInProgress.memoizedState = ({
      i: i,
      rendering: null,
      renderingStartTime: 0,
      l: lContentRow,
      t: t,
      tMode: tMode,
    }: SuspenseListRenderState);
  } else {
     W
    renderState.i = i;
    renderState.rendering = null;
    renderState.renderingStartTime = 0;
    renderState.l = lContentRow;
    renderState.t = t;
    renderState.tMode = tMode;
  }
}
 This can end up rendering this component multiple passes.
 The first pass splits the children fibers into two sets. A head and t.
 We first render the head. If anything is in fallback state, we do another
 pass through beginWork to rerender all children (including the t) with
 the force suspend context. If the first render didn't have anything in
 in fallback state. Then we render each row in the t one-by-one.
 That happens in the completeWork phase without going back to beginWork.
function updateSuspenseListComponent(
  current: Fiber | null,
  workInProgress: Fiber,
  renderLanes: Lanes,
) {