Added debug tests for indexing, pop_back and both forms of erase.  Added an improved error message for erasing a single element with end().

llvm-svn: 177929
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: ea1bbbd1359fbacd5bd874baf590a5c1f08429b5
diff --git a/include/vector b/include/vector
index d9c5c2f..11d9a1b 100644
--- a/include/vector
+++ b/include/vector
@@ -1550,6 +1550,8 @@
         "vector::erase(iterator) called with an iterator not"
         " referring to this vector");
 #endif
+    _LIBCPP_ASSERT(__position != end(),
+        "vector::erase(iterator) called with a non-dereferenceable iterator");
     pointer __p = const_cast<pointer>(&*__position);
     iterator __r = __make_iter(__p);
     this->__destruct_at_end(_VSTD::move(__p + 1, this->__end_, __p));