<html>
<head>
<script src="../../resources/gc.js"></script>
<script>
if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}
</script>
</head>
<body>
Running...
<script>
function runTest() {
    bdo = document.createElement('bdo');
    template1 = document.createElement('template');
    node1 = document.importNode(bdo, false);
    iframe = document.createElement('iframe');
    document.body.appendChild(iframe);
    template1content = template1.content;
    node2 = document.importNode(node1, true);
    template1content.appendChild(node2);
    object1 = iframe.contentDocument.createElement('object');
    document.body.appendChild(object1);
    input = iframe.contentDocument.createElement('input');
    document.body.appendChild(input);
    noderef1 = input.parentElement; 
    node2.appendChild(noderef1);
    embed = document.createElement('embed');
    object1.id = 4294967294;
    template2 = document.createElement('template');
    object1.insertAdjacentElement("afterbegin", embed);
    title = document.createElement('title');
    title.appendChild(embed);
    object2 = document.createElement('object');
    object2.id = 'object10901';
    template2content = template2.content;
    object1.parentNode.removeChild(object1);
    object1 = null;
    textnode1 = document.createTextNode('');
    node3 = document.importNode(textnode1, true);
    object2.appendChild(node3);
    template2content.appendChild(object2);
    gc();
    object2.cloneNode();
    document.location='data:text/html,<body>PASS<script>if (window.testRunner) testRunner.notifyDone()</scr' + 'ipt></body>';
}

runTest();
</script>
</body>
</html>
