Compiler: avoid an undefined behavior when using erase-remove
Using that idiom on an empty vector results in an undefined behavior
that I have seen cause a vector to get length -1 with clang 3.6 on
Linux.
BUG=
Change-Id: I3bb8d8884efa29a17672b458263067644dbf0fec
Reviewed-on: https://chromium-review.googlesource.com/286740
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/compiler/translator/Compiler.cpp b/src/compiler/translator/Compiler.cpp
index cd571f8..990863a 100644
--- a/src/compiler/translator/Compiler.cpp
+++ b/src/compiler/translator/Compiler.cpp
@@ -649,7 +649,11 @@
UnusedPredicate isUnused(&mCallDag, &functionMetadata);
TIntermSequence *sequence = rootNode->getSequence();
- sequence->erase(std::remove_if(sequence->begin(), sequence->end(), isUnused), sequence->end());
+
+ if (!sequence->empty())
+ {
+ sequence->erase(std::remove_if(sequence->begin(), sequence->end(), isUnused), sequence->end());
+ }
return true;
}