<html>
<script>
if (window.layoutTestController)
{
    layoutTestController.dumpAsText();
    layoutTestController.waitUntilDone();
}

function removeFloat()
{
    var float2 = document.getElementById('float2');
    float2.style.display = 'none';
    window.setTimeout('crash();', 0);
}

function crash()
{
    var block1 = document.getElementById('block1');
    var float1 = document.getElementById('float1');
    block1.style.position = 'absolute';
    float1.style.display = 'none';
    if (window.layoutTestController)
    {
        layoutTestController.notifyDone();
    }
}
</script>
<body onload="removeFloat()">
<p>This test passes if it doesn't crash.</p>
<div style="position:absolute; left:0; top:40">
<div id="block1" style="border:solid">
<div id="float1" style="float:left; width:50px; height:600px; background-color:purple; margin-left:5px"></div>
<div id="float2" style="float:left; width:50px; height:150px; background-color:purple; margin-left:5px"></div>
<div id="block2">A float is a renderer that is designed to shift all the way to the left side or all the way to the right side of a paragraph. The lines of the paragraph then flow around the floating object avoiding it. You can see an example of a float in this very paragraph. There is a purple box in the upper right hand corner. Note how all of the text in this paragraph is avoiding the float.</div>
<div>A float is a renderer that is designed to shift all the way to the left side or all the way to the right side of a paragraph. The lines of the paragraph then flow around the floating object avoiding it. You can see an example of a float in this very paragraph. There is a purple box in the upper right hand corner. Note how all of the text in this paragraph is avoiding the float.</div>
<div>A float is a renderer that is designed to shift all the way to the left side or all the way to the right side of a paragraph. The lines of the paragraph then flow around the floating object avoiding it. You can see an example of a float in this very paragraph. There is a purple box in the upper right hand corner. Note how all of the text in this paragraph is avoiding the float.</div>
<div>A float is a renderer that is designed to shift all the way to the left side or all the way to the right side of a paragraph. The lines of the paragraph then flow around the floating object avoiding it. You can see an example of a float in this very paragraph. There is a purple box in the upper right hand corner. Note how all of the text in this paragraph is avoiding the float.</div>
<div>A float is a renderer that is designed to shift all the way to the left side or all the way to the right side of a paragraph. The lines of the paragraph then flow around the floating object avoiding it. You can see an example of a float in this very paragraph. There is a purple box in the upper right hand corner. Note how all of the text in this paragraph is avoiding the float.</div>
</div>
<div>A float is a renderer that is designed to shift all the way to the left side or all the way to the right side of a paragraph. The lines of the paragraph then flow around the floating object avoiding it. You can see an example of a float in this very paragraph. There is a purple box in the upper right hand corner. Note how all of the text in this paragraph is avoiding the float.</div>
<div>A float is a renderer that is designed to shift all the way to the left side or all the way to the right side of a paragraph. The lines of the paragraph then flow around the floating object avoiding it. You can see an example of a float in this very paragraph. There is a purple box in the upper right hand corner. Note how all of the text in this paragraph is avoiding the float.</div>
<div>A float is a renderer that is designed to shift all the way to the left side or all the way to the right side of a paragraph. The lines of the paragraph then flow around the floating object avoiding it. You can see an example of a float in this very paragraph. There is a purple box in the upper right hand corner. Note how all of the text in this paragraph is avoiding the float.</div>
</div>
</body>
</html>
