Merge "Fix the stack-protector test for x86/x86-64."
diff --git a/tests/stack_protector_test_helper.cpp b/tests/stack_protector_test_helper.cpp
index 34f3c77..53a5e05 100644
--- a/tests/stack_protector_test_helper.cpp
+++ b/tests/stack_protector_test_helper.cpp
@@ -19,6 +19,13 @@
char buf[128];
// We can't use memset here because it's fortified, and we want to test
// the line of defense *after* that.
- char* p = buf;
- while ((p - buf) < static_cast<int>(sizeof(buf) + sizeof(void*))) *p++ = '\0';
+ // Without volatile, the generic x86/x86-64 targets don't write to the stack.
+ volatile char* p = buf;
+ int size = static_cast<int>(sizeof(buf) + 1);
+#if __x86_64__
+ // The generic x86-64 target leaves an 8-byte gap between `buf` and the stack guard.
+ // We only need to corrupt one byte though.
+ size += 8;
+#endif
+ while ((p - buf) < size) *p++ = '\0';
}