anchor.diff:      assert(parent == this.parent);
     }
   
  -  void _cleanRelayoutSubtreeRoot() {
  -    if (_relayoutSubtreeRoot != this) {
  -      _relayoutSubtreeRoot = null;
  +  void _cleanRelayoutBoundary() {
  +    if (_relayoutBoundary != this) {
  +      _relayoutBoundary = null;
         _needsLayout = true;
         visitChildren((RenderObject child) {
  -        child._cleanRelayoutSubtreeRoot();
  +        child._cleanRelayoutBoundary();
         });
       }
     }
  
positive.code:     assert(!_debugDoingThisResize);
      assert(!_debugDoingThisLayout);
      final RenderObject parent = this.parent;
      RenderObject relayoutSubtreeRoot;
      if (!parentUsesSize || sizedByParent || constraints.isTight || parent is! RenderObject)
        relayoutSubtreeRoot = this;
      else
        relayoutSubtreeRoot = parent._relayoutSubtreeRoot;
      assert(parent == this.parent);
      assert(() {
        _debugCanParentUseSize = parentUsesSize;
        return true;
      });
      if (!needsLayout && constraints == _constraints && relayoutSubtreeRoot == _relayoutSubtreeRoot) {
        assert(() {
          // in case parentUsesSize changed since the last invocation, set size
          // to itself, so it has the right internal debug values.
  
negative.code:     assert(attached);
      assert(parent is! RenderObject);
      assert(!owner._debugDoingLayout);
      assert(_relayoutBoundary == null);
      _relayoutBoundary = this;
      assert(() {
        _debugCanParentUseSize = false;
        return true;
  