[dawn] Add DAWN_CHECK to stack_vec if absl doesn't provide it
Abseil in Chromium sets ABSL_OPTION_HARDENED but Google3 does not (yet).
Verified working as expected locally in both Dawn and Google3 builds.
Use an #if, rather than just adding it unconditionally, just in case
having a redundant check wouldn't get optimized out
Bug: none
Change-Id: I148c399647f0bc8c47f5a514d5edbcf525615640
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/260658
Auto-Submit: Kai Ninomiya <kainino@chromium.org>
Reviewed-by: Loko Kung <lokokung@google.com>
Commit-Queue: Loko Kung <lokokung@google.com>
diff --git a/src/dawn/common/ityp_stack_vec.h b/src/dawn/common/ityp_stack_vec.h
index 45aa917..875a813 100644
--- a/src/dawn/common/ityp_stack_vec.h
+++ b/src/dawn/common/ityp_stack_vec.h
@@ -29,7 +29,6 @@
#define SRC_DAWN_COMMON_ITYP_STACK_VEC_H_
#include <limits>
-#include <vector>
#include "absl/container/inlined_vector.h"
#include "dawn/common/Assert.h"
@@ -48,10 +47,18 @@
explicit stack_vec(Index size) : Base() { Base::resize(static_cast<I>(size)); }
Value& operator[](Index i) {
+#if !defined(ABSL_OPTION_HARDENED) || ABSL_OPTION_HARDENED == 0
+ // Insert our own bounds check if not already enabled in absl
+ DAWN_CHECK(i < size());
+#endif
return Base::operator[](static_cast<I>(i));
}
constexpr const Value& operator[](Index i) const {
+#if !defined(ABSL_OPTION_HARDENED) || ABSL_OPTION_HARDENED == 0
+ // Insert our own bounds check if not already enabled in absl
+ DAWN_CHECK(i < size());
+#endif
return Base::operator[](static_cast<I>(i));
}
@@ -60,7 +67,6 @@
void reserve(Index size) { Base::reserve(static_cast<I>(size)); }
Value* data() { return Base::data(); }
-
const Value* data() const { return Base::data(); }
Index size() const { return Index(static_cast<I>(Base::size())); }
diff --git a/src/dawn/tests/unittests/ITypStackVecTests.cpp b/src/dawn/tests/unittests/ITypStackVecTests.cpp
index a56268c..b982da5 100644
--- a/src/dawn/tests/unittests/ITypStackVecTests.cpp
+++ b/src/dawn/tests/unittests/ITypStackVecTests.cpp
@@ -73,7 +73,6 @@
}
StackVec vec(Key(10));
-
EXPECT_DEATH(vec[Key(10)], "");
const StackVec& constVec = vec;