diff --git a/test/acm_random.h b/test/acm_random.h
index 742224a..8c748b8 100644
--- a/test/acm_random.h
+++ b/test/acm_random.h
@@ -27,45 +27,45 @@
   void Reset(int seed) { random_.Reseed(seed); }
 
   // Generates a random 31-bit unsigned integer from [0, 2^31).
-  uint32_t Rand31(void) {
+  uint32_t Rand31() {
     return random_.Generate(testing::internal::Random::kMaxRange);
   }
 
-  uint16_t Rand16(void) {
+  uint16_t Rand16() {
     const uint32_t value =
         random_.Generate(testing::internal::Random::kMaxRange);
     return (value >> 15) & 0xffff;
   }
 
-  int16_t Rand16Signed(void) { return static_cast<int16_t>(Rand16()); }
+  int16_t Rand16Signed() { return static_cast<int16_t>(Rand16()); }
 
-  int16_t Rand15Signed(void) {
+  int16_t Rand15Signed() {
     const uint32_t value =
         random_.Generate(testing::internal::Random::kMaxRange);
     return (value >> 17) & 0xffff;
   }
 
-  uint16_t Rand12(void) {
+  uint16_t Rand12() {
     const uint32_t value =
         random_.Generate(testing::internal::Random::kMaxRange);
     // There's a bit more entropy in the upper bits of this implementation.
     return (value >> 19) & 0xfff;
   }
 
-  int16_t Rand9Signed(void) {
+  int16_t Rand9Signed() {
     // Use 9 bits: values between 255 (0x0FF) and -256 (0x100).
     const uint32_t value = random_.Generate(512);
     return static_cast<int16_t>(value) - 256;
   }
 
-  uint8_t Rand8(void) {
+  uint8_t Rand8() {
     const uint32_t value =
         random_.Generate(testing::internal::Random::kMaxRange);
     // There's a bit more entropy in the upper bits of this implementation.
     return (value >> 23) & 0xff;
   }
 
-  uint8_t Rand8Extremes(void) {
+  uint8_t Rand8Extremes() {
     // Returns a random value near 0 or near 255, to better exercise
     // saturation behavior.
     const uint8_t r = Rand8();
@@ -76,7 +76,7 @@
 
   int operator()(int n) { return PseudoUniform(n); }
 
-  static int DeterministicSeed(void) { return 0xbaba; }
+  static int DeterministicSeed() { return 0xbaba; }
 
  private:
   testing::internal::Random random_;
diff --git a/test/datarate_test.h b/test/datarate_test.h
index cb5d6e5..19b1b39 100644
--- a/test/datarate_test.h
+++ b/test/datarate_test.h
@@ -134,7 +134,7 @@
     ++tot_frame_number_;
   }
 
-  virtual void EndPassHook(void) {
+  virtual void EndPassHook() {
     duration_ = (last_pts_ + 1) * timebase_;
     // Effective file datarate:
     effective_datarate_ = (bits_total_ / 1000.0) / duration_;
diff --git a/test/horver_correlation_test.cc b/test/horver_correlation_test.cc
index d1fd578..2873490 100644
--- a/test/horver_correlation_test.cc
+++ b/test/horver_correlation_test.cc
@@ -39,8 +39,8 @@
     target_func_ = GET_PARAM(0);
   }
   virtual void TearDown() { aom_free(data_buf_); }
-  void RunHorverTest(void);
-  void RunHorverTest_ExtremeValues(void);
+  void RunHorverTest();
+  void RunHorverTest_ExtremeValues();
   void RunHorverSpeedTest(int run_times);
 
  private:
@@ -50,7 +50,7 @@
 };
 GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(HorverTest);
 
-void HorverTest::RunHorverTest(void) {
+void HorverTest::RunHorverTest() {
   for (int block_size = 0; block_size < BLOCK_SIZES_ALL; block_size++) {
     const int w = block_size_wide[block_size];
     const int h = block_size_high[block_size];
@@ -107,7 +107,7 @@
   }
 }
 
-void HorverTest::RunHorverTest_ExtremeValues(void) {
+void HorverTest::RunHorverTest_ExtremeValues() {
   for (int i = 0; i < MAX_SB_SQUARE; ++i) {
     // Most of get_horver_test is squaring and summing, so simply saturating
     // the whole buffer is mostly likely to cause an overflow.
diff --git a/test/md5_helper.h b/test/md5_helper.h
index 9443cb2..69f1ae7 100644
--- a/test/md5_helper.h
+++ b/test/md5_helper.h
@@ -48,7 +48,7 @@
     MD5Update(&md5_, data, static_cast<uint32_t>(size));
   }
 
-  const char *Get(void) {
+  const char *Get() {
     static const char hex[16] = {
       '0', '1', '2', '3', '4', '5', '6', '7',
       '8', '9', 'a', 'b', 'c', 'd', 'e', 'f',
diff --git a/test/svc_datarate_test.cc b/test/svc_datarate_test.cc
index 770777c..28a0f17 100644
--- a/test/svc_datarate_test.cc
+++ b/test/svc_datarate_test.cc
@@ -213,7 +213,7 @@
     }
   }
 
-  virtual void EndPassHook(void) {
+  virtual void EndPassHook() {
     duration_ = ((last_pts_ + 1) * timebase_);
     for (int i = 0; i < number_temporal_layers_ * number_spatial_layers_; i++) {
       effective_datarate_tl[i] = (effective_datarate_tl[i] / 1000) / duration_;
