I realized that the refactor to use ReactDebugCurrentFrame as a decoupled stack frame for error messages is not reentrant: https://github.com/facebook/react/pull/10105/files#r127573520

Fiber is not reentrant but other renderers might be. The synchronous server renderer is atm.

We should add tests for warnings between renderers, such as calling a server-render from within a client render, and update the set/reset callsites to use push/pop instead to account for that.

lifecycle.push('componentWillUpdate');
          }
          componentDidUpdate() {
            lifecycle.push('componentDidUpdate');
          }
          shouldComponentUpdate() {
            lifecycle.push('shouldComponentUpdate');
          }
          UNSAFE_componentWillReceiveProps() {
            lifecycle.push('componentWillReceiveProps');
          }
          componentWillUnmount() {
            lifecycle.push('componentWillUnmount');
          }
        }
        const response = ReactDOMServer.renderToString(<TestComponent />);
        expect(response).toMatch(
          new RegExp(
            '<span ' +
              'data-reactroot' +
              '=""' +
              '>' +
              'Component name: <!-- -->TestComponent' +
              '</span>',
          ),
        );
        expect(lifecycle).toEqual([
          'getInitialState',
          'componentWillMount',