RESOLVED FIXED 67759
Positioned Floats: Assertion hit in fast/block/positioning/positioned-float-layout-after-image-load.html
https://bugs.webkit.org/show_bug.cgi?id=67759
Summary Positioned Floats: Assertion hit in fast/block/positioning/positioned-float-l...
Ryosuke Niwa
Reported 2011-09-07 20:49:32 PDT
fast/block/positioning/positioned-float-layout-after-image-load.html started hitting an assertion since the build 2042 today. See also: http://build.webkit.org/results/SnowLeopard%20Intel%20Debug%20(Tests)/r94686%20(2040)/results.html http://build.webkit.org/results/SnowLeopard%20Intel%20Debug%20(Tests)/r94700%20(2042)/results.html http://build.webkit.org/builders/SnowLeopard%20Intel%20Debug%20%28Tests%29/builds/2042 ASSERTION FAILED: isPlaced() /Volumes/Big/slave/snowleopard-intel-debug/build/Source/WebCore/rendering/RenderBlock.h(473) : WebCore::LayoutUnit WebCore::RenderBlock::FloatingObject::y() const 1 WebCore::RenderBlock::FloatingObject::y() const 2 WebCore::RenderBlock::logicalTopForFloat(WebCore::RenderBlock::FloatingObject const*) const 3 WebCore::LineWidth::shrinkAvailableWidthForNewFloatIfNeeded(WebCore::RenderBlock::FloatingObject*) 4 WebCore::RenderBlock::positionNewFloatOnLine(WebCore::RenderBlock::FloatingObject*, WebCore::RenderBlock::FloatingObject*, WebCore::LineWidth&) 5 WebCore::RenderBlock::LineBreaker::skipLeadingWhitespace(WebCore::BidiResolver<WebCore::InlineIterator, WebCore::BidiRun>&, WebCore::LineInfo const&, WebCore::RenderBlock::FloatingObject*, WebCore::LineWidth&) 6 WebCore::RenderBlock::LineBreaker::nextLineBreak(WebCore::BidiResolver<WebCore::InlineIterator, WebCore::BidiRun>&, WebCore::LineInfo&, std::pair<WebCore::RenderText*, WebCore::LazyLineBreakIterator>&, WebCore::RenderBlock::FloatingObject*) 7 WebCore::RenderBlock::layoutRunsAndFloatsInRange(WebCore::LineLayoutState&, WebCore::BidiResolver<WebCore::InlineIterator, WebCore::BidiRun>&, WebCore::InlineIterator const&, WebCore::BidiStatus const&) 8 WebCore::RenderBlock::layoutRunsAndFloats(WebCore::LineLayoutState&, bool) 9 WebCore::RenderBlock::layoutInlineChildren(bool, int&, int&) 10 WebCore::RenderBlock::layoutBlock(bool, int, WebCore::RenderBlock::BlockLayoutPass) 11 WebCore::RenderBlock::layout() 12 WebCore::RenderBlock::layoutBlockChild(WebCore::RenderBox*, WebCore::RenderBlock::MarginInfo&, int&, int&) 13 WebCore::RenderBlock::layoutBlockChildren(bool, int&) 14 WebCore::RenderBlock::layoutBlock(bool, int, WebCore::RenderBlock::BlockLayoutPass) 15 WebCore::RenderBlock::layout() 16 WebCore::RenderBlock::layoutBlockChild(WebCore::RenderBox*, WebCore::RenderBlock::MarginInfo&, int&, int&) 17 WebCore::RenderBlock::layoutBlockChildren(bool, int&) 18 WebCore::RenderBlock::layoutBlock(bool, int, WebCore::RenderBlock::BlockLayoutPass) 19 WebCore::RenderBlock::layout() 20 WebCore::RenderBlock::layoutBlockChild(WebCore::RenderBox*, WebCore::RenderBlock::MarginInfo&, int&, int&) 21 WebCore::RenderBlock::layoutBlockChildren(bool, int&) 22 WebCore::RenderBlock::layoutBlock(bool, int, WebCore::RenderBlock::BlockLayoutPass) 23 WebCore::RenderBlock::layout() 24 WebCore::RenderView::layout() 25 WebCore::FrameView::layout(bool) 26 WebCore::Document::updateLayout() 27 WebCore::Document::updateLayoutIgnorePendingStylesheets() 28 WebCore::Element::offsetTop() 29 WebCore::jsElementOffsetTop(JSC::ExecState*, JSC::JSValue, JSC::Identifier const&) 30 JSC::PropertySlot::getValue(JSC::ExecState*, JSC::Identifier const&) const 31 JSC::JSValue::get(JSC::ExecState*, JSC::Identifier const&, JSC::PropertySlot&) const
Attachments
Made line layout functions treat positioned floats like positioned objects (9.78 KB, patch)
2011-12-16 19:39 PST, mitz
darin: review+
Ryosuke Niwa
Comment 2 2011-09-07 21:28:50 PDT
Csaba Osztrogonác
Comment 3 2011-09-08 05:31:47 PDT
Same assert on GTK and on Qt too.
Csaba Osztrogonác
Comment 4 2011-09-08 05:32:57 PDT
*** Bug 67769 has been marked as a duplicate of this bug. ***
Zoltan Horvath
Comment 5 2011-09-08 06:03:05 PDT
Ryosuke Niwa
Comment 6 2011-09-08 12:00:39 PDT
(In reply to comment #5) > I rolled out in http://trac.webkit.org/changeset/94755. Okay, thanks!
Robert Hogan
Comment 7 2011-09-08 12:25:47 PDT
This ASSERT happens without r94755 - but the test I added, positioned-float-layout-after-image-load.html, triggers it. I agreed with smfr to reland r94755 without the test and the ASSERT can be worked separately here.
Csaba Osztrogonác
Comment 8 2011-09-08 12:46:17 PDT
(In reply to comment #7) > This ASSERT happens without r94755 - but the test I added, positioned-float-layout-after-image-load.html, triggers it. I agreed with smfr to reland r94755 without the test and the ASSERT can be worked separately here. It's correct. +1 vote for relanding without the test.
Robert Hogan
Comment 9 2011-09-08 14:56:42 PDT
(In reply to comment #0) > > ASSERTION FAILED: isPlaced() > /Volumes/Big/slave/snowleopard-intel-debug/build/Source/WebCore/rendering/RenderBlock.h(473) : WebCore::LayoutUnit WebCore::RenderBlock::FloatingObject::y() const > 1 WebCore::RenderBlock::FloatingObject::y() const > 2 WebCore::RenderBlock::logicalTopForFloat(WebCore::RenderBlock::FloatingObject const*) const > 3 WebCore::LineWidth::shrinkAvailableWidthForNewFloatIfNeeded(WebCore::RenderBlock::FloatingObject*) > 4 WebCore::RenderBlock::positionNewFloatOnLine(WebCore::RenderBlock::FloatingObject*, WebCore::RenderBlock::FloatingObject*, WebCore::LineWidth&) This creates the floating object: FloatingObject* newObj = new FloatingObject(o->style()->floating()); but it is not 'placed' with this constructor, it requires a frameRect for that. It would get 'placed in positionNewFloats() but: // The containing block is responsible for positioning floats, so if we have floats in our // list that come from somewhere else, do not attempt to position them. Also don't attempt to handle // positioned floats, since the positioning layout code handles those. if (floatingObject->renderer()->containingBlock() != this || floatingObject->renderer()->isPositioned()) continue; prevents this. Because positionNewFloats() still returns true, it does not cause positionNewFloatOnLine() to return early and the assert is triggered. The comment makes this look like the problem may be deeper than just returning early, so don't know if that's the right fix.
mitz
Comment 10 2011-12-16 19:39:03 PST
Created attachment 119710 [details] Made line layout functions treat positioned floats like positioned objects
Darin Adler
Comment 11 2011-12-18 18:47:16 PST
Might even be worth a comment in those call sites saying that things both positioned and floating should be treated as positioned.
mitz
Comment 12 2011-12-18 18:52:21 PST
Note You need to log in before you can comment on or make changes to this bug.