<style>
.inlineFL::first-letter { overflow: visible; }
.absolutePosition { position: absolute; }
.floatFL:first-letter { float: right; }
</style>
<script>
function recreateFirstLetterBlock() {
  document.getElementById("parent").setAttribute('class', 'inlineFL');
  if (window.testRunner)
    testRunner.notifyDone();
}
function removeDiv() {
  // This causes the parent to only have inline (and floating) children
  document.getElementById("parent").removeChild(document.getElementById("child"));
  setTimeout("recreateFirstLetterBlock();", 10);
}

function changeDivStyle() {
  document.getElementById("child").setAttribute('class', 'inlineFL');
  setTimeout("removeDiv();", 10);
}
function startTest() {
  setTimeout("changeDivStyle();", 10);
  if (window.testRunner) {
    testRunner.waitUntilDone();
    testRunner.dumpAsText();
  }
}
window.onload = startTest;
</script>
<div id="parent" class="floatFL">
  <div id="child" class="absolutePosition"></div>
  PASS if no crash or assert
</div>
