When we use replaceChildNode function, the first argument must be the original child node instead of the deepCopy. Otherwise, replaceChildNode will do nothing since it will think deepCopy is a different node. In that case, RewriteExpressionsWithShaderStorageBlockTraverser::visitAggregate will enter an endless loop since ssbo argument is never really replaced. Test: dEQP-GLES31.functional.ssbo.* Bug: angleproject:1951 Change-Id: Ieb17a16ab2b3e0270328fafd7ba0944ca05f842f Reviewed-on: https://chromium-review.googlesource.com/c/1446686Reviewed-by:Jamie Madill <jmadill@chromium.org> Commit-Queue: Jiajia Qin <jiajia.qin@intel.com>