Fix unreachable-block removal.

Add a test for loop without a condition.

Change-Id: Idd7fc462218a84b1e745207e2975a3f2897d30a0
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index 769cf50..06ab094 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -1356,7 +1356,7 @@
 
         builder.setBuildPoint(&blocks.body);
         if (node->getBody())
-            node->getBody()->traverse(this);  // continue->cont, break->exit
+            node->getBody()->traverse(this);
         builder.createBranch(&blocks.continue_target);
 
         builder.setBuildPoint(&blocks.continue_target);
@@ -1368,7 +1368,7 @@
 
         builder.setBuildPoint(&blocks.body);
         if (node->getBody())
-            node->getBody()->traverse(this);  // continue->cont, break->exit
+            node->getBody()->traverse(this);
         builder.createBranch(&blocks.continue_target);
 
         builder.setBuildPoint(&blocks.continue_target);
diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp
index 57e27e0..8e023ea 100755
--- a/SPIRV/SpvBuilder.cpp
+++ b/SPIRV/SpvBuilder.cpp
@@ -852,7 +852,7 @@
         if (unreachable) {
             // Given that this block is at the end of a function, it must be right after an
             // explicit return, just remove it.
-            function.popBlock(block);
+            function.removeBlock(block);
         } else {
             // We'll add a return instruction at the end of the current block,
             // which for a non-void function is really error recovery (?), as the source
diff --git a/SPIRV/spvIR.h b/SPIRV/spvIR.h
index 6736a13..70f27f7 100755
--- a/SPIRV/spvIR.h
+++ b/SPIRV/spvIR.h
@@ -52,6 +52,7 @@
 
 #include "spirv.hpp"
 
+#include <algorithm>
 #include <vector>
 #include <iostream>
 #include <assert.h>
@@ -235,7 +236,13 @@
     Id getParamId(int p) { return parameterInstructions[p]->getResultId(); }
 
     void addBlock(Block* block) { blocks.push_back(block); }
-    void popBlock(Block*) { blocks.pop_back(); }
+    void removeBlock(Block* block)
+    {
+        auto found = find(blocks.begin(), blocks.end(), block);
+        assert(found != blocks.end());
+        blocks.erase(found);
+        delete block;
+    }
 
     Module& getParent() const { return parent; }
     Block* getEntryBlock() const { return blocks.front(); }