diff --git a/quic/tools/quic_client_base.cc b/quic/tools/quic_client_base.cc
index 4b02e25..7077f16 100644
--- a/quic/tools/quic_client_base.cc
+++ b/quic/tools/quic_client_base.cc
@@ -147,7 +147,7 @@
     num_attempts++;
   }
   if (session() == nullptr) {
-    QUIC_BUG_V2(quic_bug_10906_1) << "Missing session after Connect";
+    QUIC_BUG(quic_bug_10906_1) << "Missing session after Connect";
     return false;
   }
   return session()->connection()->connected();
@@ -230,7 +230,7 @@
 
 bool QuicClientBase::WaitForEvents() {
   if (!connected()) {
-    QUIC_BUG_V2(quic_bug_10906_2)
+    QUIC_BUG(quic_bug_10906_2)
         << "Cannot call WaitForEvents on non-connected client";
     return false;
   }
@@ -336,7 +336,7 @@
 
 void QuicClientBase::WaitForStreamToClose(QuicStreamId id) {
   if (!connected()) {
-    QUIC_BUG_V2(quic_bug_10906_3)
+    QUIC_BUG(quic_bug_10906_3)
         << "Cannot WaitForStreamToClose on non-connected client";
     return;
   }
@@ -348,7 +348,7 @@
 
 bool QuicClientBase::WaitForOneRttKeysAvailable() {
   if (!connected()) {
-    QUIC_BUG_V2(quic_bug_10906_4)
+    QUIC_BUG(quic_bug_10906_4)
         << "Cannot WaitForOneRttKeysAvailable on non-connected client";
     return false;
   }
diff --git a/quic/tools/quic_memory_cache_backend.cc b/quic/tools/quic_memory_cache_backend.cc
index f1acc4a..87c950a 100644
--- a/quic/tools/quic_memory_cache_backend.cc
+++ b/quic/tools/quic_memory_cache_backend.cc
@@ -248,7 +248,7 @@
 bool QuicMemoryCacheBackend::InitializeBackend(
     const std::string& cache_directory) {
   if (cache_directory.empty()) {
-    QUIC_BUG_V2(quic_bug_10932_1) << "cache_directory must not be empty.";
+    QUIC_BUG(quic_bug_10932_1) << "cache_directory must not be empty.";
     return false;
   }
   QUIC_LOG(INFO)
@@ -287,7 +287,7 @@
       QuicUrl url(push_url);
       const QuicBackendResponse* response = GetResponse(url.host(), url.path());
       if (!response) {
-        QUIC_BUG_V2(quic_bug_10932_2)
+        QUIC_BUG(quic_bug_10932_2)
             << "Push URL '" << push_url << "' not found.";
         return false;
       }
@@ -383,7 +383,7 @@
       << "Host must be populated, e.g. \"www.google.com\"";
   std::string key = GetKey(host, path);
   if (QuicContainsKey(responses_, key)) {
-    QUIC_BUG_V2(quic_bug_10932_3)
+    QUIC_BUG(quic_bug_10932_3)
         << "Response for '" << key << "' already exists!";
     return;
   }
diff --git a/quic/tools/quic_simple_server_session_test.cc b/quic/tools/quic_simple_server_session_test.cc
index ba3af1f..a4b2739 100644
--- a/quic/tools/quic_simple_server_session_test.cc
+++ b/quic/tools/quic_simple_server_session_test.cc
@@ -135,7 +135,7 @@
     case PROTOCOL_UNSUPPORTED:
       break;
   }
-  QUIC_BUG_V2(quic_bug_10933_1)
+  QUIC_BUG(quic_bug_10933_1)
       << "Unknown handshake protocol: "
       << static_cast<int>(session->connection()->version().handshake_protocol);
   return nullptr;
diff --git a/quic/tools/quic_simple_server_stream.cc b/quic/tools/quic_simple_server_stream.cc
index 6bc93cb..9b27bc9 100644
--- a/quic/tools/quic_simple_server_stream.cc
+++ b/quic/tools/quic_simple_server_stream.cc
@@ -80,8 +80,7 @@
     bool /*fin*/,
     size_t /*frame_len*/,
     const QuicHeaderList& /*header_list*/) {
-  QUIC_BUG_V2(quic_bug_10962_1)
-      << "Server does not support receiving Trailers.";
+  QUIC_BUG(quic_bug_10962_1) << "Server does not support receiving Trailers.";
   SendErrorResponse();
 }
 
@@ -125,7 +124,7 @@
     Http2HeaderBlock push_request_headers) {
   if (QuicUtils::IsClientInitiatedStreamId(session()->transport_version(),
                                            id())) {
-    QUIC_BUG_V2(quic_bug_10962_2)
+    QUIC_BUG(quic_bug_10962_2)
         << "Client initiated stream shouldn't be used as promised stream.";
     return;
   }
diff --git a/quic/tools/quic_spdy_client_base.cc b/quic/tools/quic_spdy_client_base.cc
index 5410c98..335b521 100644
--- a/quic/tools/quic_spdy_client_base.cc
+++ b/quic/tools/quic_spdy_client_base.cc
@@ -146,7 +146,7 @@
 
   QuicSpdyClientStream* stream = CreateClientStream();
   if (stream == nullptr) {
-    QUIC_BUG_V2(quic_bug_10949_1) << "stream creation failed!";
+    QUIC_BUG(quic_bug_10949_1) << "stream creation failed!";
     return;
   }
   stream->SendRequest(std::move(sanitized_headers), body, fin);
@@ -166,7 +166,7 @@
   for (size_t i = 0; i < url_list.size(); ++i) {
     Http2HeaderBlock headers;
     if (!SpdyUtils::PopulateHeaderBlockFromUrl(url_list[i], &headers)) {
-      QUIC_BUG_V2(quic_bug_10949_2) << "Unable to create request";
+      QUIC_BUG(quic_bug_10949_2) << "Unable to create request";
       continue;
     }
     SendRequest(headers, "", true);
@@ -260,33 +260,33 @@
 }
 
 int QuicSpdyClientBase::latest_response_code() const {
-  QUIC_BUG_IF_V2(quic_bug_10949_3, !store_response_) << "Response not stored!";
+  QUIC_BUG_IF(quic_bug_10949_3, !store_response_) << "Response not stored!";
   return latest_response_code_;
 }
 
 const std::string& QuicSpdyClientBase::latest_response_headers() const {
-  QUIC_BUG_IF_V2(quic_bug_10949_4, !store_response_) << "Response not stored!";
+  QUIC_BUG_IF(quic_bug_10949_4, !store_response_) << "Response not stored!";
   return latest_response_headers_;
 }
 
 const std::string& QuicSpdyClientBase::preliminary_response_headers() const {
-  QUIC_BUG_IF_V2(quic_bug_10949_5, !store_response_) << "Response not stored!";
+  QUIC_BUG_IF(quic_bug_10949_5, !store_response_) << "Response not stored!";
   return preliminary_response_headers_;
 }
 
 const Http2HeaderBlock& QuicSpdyClientBase::latest_response_header_block()
     const {
-  QUIC_BUG_IF_V2(quic_bug_10949_6, !store_response_) << "Response not stored!";
+  QUIC_BUG_IF(quic_bug_10949_6, !store_response_) << "Response not stored!";
   return latest_response_header_block_;
 }
 
 const std::string& QuicSpdyClientBase::latest_response_body() const {
-  QUIC_BUG_IF_V2(quic_bug_10949_7, !store_response_) << "Response not stored!";
+  QUIC_BUG_IF(quic_bug_10949_7, !store_response_) << "Response not stored!";
   return latest_response_body_;
 }
 
 const std::string& QuicSpdyClientBase::latest_response_trailers() const {
-  QUIC_BUG_IF_V2(quic_bug_10949_8, !store_response_) << "Response not stored!";
+  QUIC_BUG_IF(quic_bug_10949_8, !store_response_) << "Response not stored!";
   return latest_response_trailers_;
 }
 
diff --git a/quic/tools/quic_tcp_like_trace_converter.cc b/quic/tools/quic_tcp_like_trace_converter.cc
index f3bd3b3..22e8731 100644
--- a/quic/tools/quic_tcp_like_trace_converter.cc
+++ b/quic/tools/quic_tcp_like_trace_converter.cc
@@ -30,7 +30,7 @@
     QuicStreamOffset offset,
     QuicByteCount data_length) {
   if (level >= NUM_ENCRYPTION_LEVELS) {
-    QUIC_BUG_V2(quic_bug_10907_1) << "Invalid encryption level";
+    QUIC_BUG(quic_bug_10907_1) << "Invalid encryption level";
     return {};
   }
   return OnFrameSent(offset, data_length, /*fin=*/false,
