Migration from SPDY_BUG to SPDY_BUG_V2(bug_id). Per go/gfe-bug-improvements GFE_BUGs are getting stable IDs to allow for monitoring and alerting. Existing SPDY_BUG instances are changed to have `spdy_bug_n_m` ID, where `n` is unique for each file, and `m` is a counter within each file, so we get `SPDY_BUG_V2(spdy_bug_123_2))` PiperOrigin-RevId: 362310756 Change-Id: I3903233dbe00f5c0239dc0d7767044280e6fdf6e
diff --git a/spdy/core/fifo_write_scheduler.h b/spdy/core/fifo_write_scheduler.h index 7bf8c4e..bd2cfec 100644 --- a/spdy/core/fifo_write_scheduler.h +++ b/spdy/core/fifo_write_scheduler.h
@@ -67,7 +67,8 @@ StreamIdType stream_id, const StreamPrecedenceType& precedence) { if (StreamRegistered(stream_id)) { - SPDY_BUG << "Stream " << stream_id << " already registered"; + SPDY_BUG_V2(spdy_bug_36_1) + << "Stream " << stream_id << " already registered"; return; } registered_streams_.emplace_hint( @@ -79,7 +80,8 @@ void FifoWriteScheduler<StreamIdType>::UnregisterStream( StreamIdType stream_id) { if (!StreamRegistered(stream_id)) { - SPDY_BUG << "Stream " << stream_id << " is not registered"; + SPDY_BUG_V2(spdy_bug_36_2) + << "Stream " << stream_id << " is not registered"; return; } registered_streams_.erase(stream_id); @@ -131,7 +133,8 @@ if (it != registered_streams_.end()) { it->second.event_time = now_in_usec; } else { - SPDY_BUG << "Stream " << stream_id << " is not registered"; + SPDY_BUG_V2(spdy_bug_36_3) + << "Stream " << stream_id << " is not registered"; } } @@ -139,7 +142,8 @@ int64_t FifoWriteScheduler<StreamIdType>::GetLatestEventWithPrecedence( StreamIdType stream_id) const { if (!StreamRegistered(stream_id)) { - SPDY_BUG << "Stream " << stream_id << " is not registered"; + SPDY_BUG_V2(spdy_bug_36_4) + << "Stream " << stream_id << " is not registered"; return 0; } int64_t latest_event_time_us = 0; @@ -164,7 +168,8 @@ void FifoWriteScheduler<StreamIdType>::MarkStreamReady(StreamIdType stream_id, bool /*add_to_front*/) { if (!StreamRegistered(stream_id)) { - SPDY_BUG << "Stream " << stream_id << " is not registered"; + SPDY_BUG_V2(spdy_bug_36_5) + << "Stream " << stream_id << " is not registered"; return; } if (ready_streams_.find(stream_id) != ready_streams_.end()) { @@ -193,7 +198,7 @@ template <typename StreamIdType> StreamIdType FifoWriteScheduler<StreamIdType>::PopNextReadyStream() { if (ready_streams_.empty()) { - SPDY_BUG << "No ready streams available"; + SPDY_BUG_V2(spdy_bug_36_6) << "No ready streams available"; return 0; } auto it = ready_streams_.begin(); @@ -219,7 +224,8 @@ bool FifoWriteScheduler<StreamIdType>::IsStreamReady( StreamIdType stream_id) const { if (!StreamRegistered(stream_id)) { - SPDY_BUG << "Stream " << stream_id << " is not registered"; + SPDY_BUG_V2(spdy_bug_36_7) + << "Stream " << stream_id << " is not registered"; return false; } return ready_streams_.find(stream_id) != ready_streams_.end();
diff --git a/spdy/core/hpack/hpack_encoder.cc b/spdy/core/hpack/hpack_encoder.cc index 7e924af..4aecc73 100644 --- a/spdy/core/hpack/hpack_encoder.cc +++ b/spdy/core/hpack/hpack_encoder.cc
@@ -347,7 +347,7 @@ void HpackEncoder::Encoderator::Next(size_t max_encoded_bytes, std::string* output) { - SPDY_BUG_IF(!has_next_) + SPDY_BUG_IF_V2(spdy_bug_61_1, !has_next_) << "Encoderator::Next called with nothing left to encode."; const bool enable_compression = encoder_->enable_compression_;
diff --git a/spdy/core/http2_frame_decoder_adapter.cc b/spdy/core/http2_frame_decoder_adapter.cc index b9989c8..40ce2ff 100644 --- a/spdy/core/http2_frame_decoder_adapter.cc +++ b/spdy/core/http2_frame_decoder_adapter.cc
@@ -476,8 +476,9 @@ on_headers_called_ = true; ReportReceiveCompressedFrame(frame_header_); if (!visitor()) { - SPDY_BUG << "Visitor is nullptr, handling priority in headers failed." - << " priority:" << priority << " frame_header:" << frame_header_; + SPDY_BUG_V2(spdy_bug_1_1) + << "Visitor is nullptr, handling priority in headers failed." + << " priority:" << priority << " frame_header:" << frame_header_; return; } visitor()->OnHeaders(frame_header_.stream_id, kHasPriorityFields, @@ -827,9 +828,10 @@ << " total remaining in the frame's payload."; db.AdvanceCursor(avail); } else { - SPDY_BUG << "Total remaining (" << total - << ") should not be greater than the payload length; " - << frame_header(); + SPDY_BUG_V2(spdy_bug_1_2) + << "Total remaining (" << total + << ") should not be greater than the payload length; " + << frame_header(); } } } @@ -877,12 +879,13 @@ DecodeBuffer tmp("", 0); DecodeStatus status = frame_decoder_->DecodeFrame(&tmp); if (status != DecodeStatus::kDecodeDone) { - SPDY_BUG << "Expected to be done decoding the frame, not " - << status; + SPDY_BUG_V2(spdy_bug_1_3) + << "Expected to be done decoding the frame, not " << status; SetSpdyErrorAndNotify(SPDY_INTERNAL_FRAMER_ERROR, ""); } else if (spdy_framer_error_ != SPDY_NO_ERROR) { - SPDY_BUG << "Expected to have no error, not " - << SpdyFramerErrorToString(spdy_framer_error_); + SPDY_BUG_V2(spdy_bug_1_4) + << "Expected to have no error, not " + << SpdyFramerErrorToString(spdy_framer_error_); } else { ResetBetweenFrames(); } @@ -1077,7 +1080,8 @@ SpdyHeadersHandlerInterface* handler = visitor()->OnHeaderFrameStart(stream_id()); if (handler == nullptr) { - SPDY_BUG << "visitor_->OnHeaderFrameStart returned nullptr"; + SPDY_BUG_V2(spdy_bug_1_5) + << "visitor_->OnHeaderFrameStart returned nullptr"; SetSpdyErrorAndNotify(SpdyFramerError::SPDY_INTERNAL_FRAMER_ERROR, ""); return; }
diff --git a/spdy/core/http2_priority_write_scheduler.h b/spdy/core/http2_priority_write_scheduler.h index 2486453..dbfa005 100644 --- a/spdy/core/http2_priority_write_scheduler.h +++ b/spdy/core/http2_priority_write_scheduler.h
@@ -221,11 +221,12 @@ // (e.g. SpdyClientDispatcher) modified to pass StreamPrecedence instances // appropriate for protocol version under test. // - // SPDY_BUG_IF(precedence.is_spdy3_priority()) + // SPDY_BUG_IF_V2(spdy_bug_8_1, precedence.is_spdy3_priority()) // << "Expected HTTP/2 stream dependency"; if (StreamRegistered(stream_id)) { - SPDY_BUG << "Stream " << stream_id << " already registered"; + SPDY_BUG_V2(spdy_bug_8_2) + << "Stream " << stream_id << " already registered"; return; } @@ -272,13 +273,13 @@ void Http2PriorityWriteScheduler<StreamIdType>::UnregisterStream( StreamIdType stream_id) { if (stream_id == kHttp2RootStreamId) { - SPDY_BUG << "Cannot unregister root stream"; + SPDY_BUG_V2(spdy_bug_8_3) << "Cannot unregister root stream"; return; } // Remove the stream from table. auto it = all_stream_infos_.find(stream_id); if (it == all_stream_infos_.end()) { - SPDY_BUG << "Stream " << stream_id << " not registered"; + SPDY_BUG_V2(spdy_bug_8_4) << "Stream " << stream_id << " not registered"; return; } std::unique_ptr<StreamInfo> stream_info(std::move(it->second)); @@ -335,7 +336,7 @@ std::vector<StreamIdType> child_vec; const StreamInfo* stream_info = FindStream(stream_id); if (stream_info == nullptr) { - SPDY_BUG << "Stream " << stream_id << " not registered"; + SPDY_BUG_V2(spdy_bug_8_5) << "Stream " << stream_id << " not registered"; } else { child_vec.reserve(stream_info->children.size()); for (StreamInfo* child : stream_info->children) { @@ -353,10 +354,10 @@ // (e.g. SpdyClientDispatcher) modified to pass StreamPrecedence instances // appropriate for protocol version under test. // - // SPDY_BUG_IF(precedence.is_spdy3_priority()) + // SPDY_BUG_IF_V2(spdy_bug_8_6, precedence.is_spdy3_priority()) // << "Expected HTTP/2 stream dependency"; if (stream_id == kHttp2RootStreamId) { - SPDY_BUG << "Cannot set precedence of root stream"; + SPDY_BUG_V2(spdy_bug_8_7) << "Cannot set precedence of root stream"; return; } @@ -393,7 +394,7 @@ StreamIdType parent_id, bool exclusive) { if (stream_info->id == parent_id) { - SPDY_BUG << "Cannot set stream to be its own parent"; + SPDY_BUG_V2(spdy_bug_8_8) << "Cannot set stream to be its own parent"; return; } StreamInfo* new_parent = FindStream(parent_id); @@ -457,12 +458,12 @@ StreamIdType stream_id, int64_t now_in_usec) { if (stream_id == kHttp2RootStreamId) { - SPDY_BUG << "Cannot record event time for root stream"; + SPDY_BUG_V2(spdy_bug_8_9) << "Cannot record event time for root stream"; return; } StreamInfo* stream_info = FindStream(stream_id); if (stream_info == nullptr) { - SPDY_BUG << "Stream " << stream_id << " not registered"; + SPDY_BUG_V2(spdy_bug_8_10) << "Stream " << stream_id << " not registered"; return; } stream_info->last_event_time_usec = now_in_usec; @@ -477,12 +478,12 @@ int64_t Http2PriorityWriteScheduler<StreamIdType>::GetLatestEventWithPrecedence( StreamIdType stream_id) const { if (stream_id == kHttp2RootStreamId) { - SPDY_BUG << "Invalid argument: root stream"; + SPDY_BUG_V2(spdy_bug_8_11) << "Invalid argument: root stream"; return 0; } const StreamInfo* stream_info = FindStream(stream_id); if (stream_info == nullptr) { - SPDY_BUG << "Stream " << stream_id << " not registered"; + SPDY_BUG_V2(spdy_bug_8_12) << "Stream " << stream_id << " not registered"; return 0; } int64_t last_event_time_usec = 0; @@ -503,12 +504,12 @@ bool Http2PriorityWriteScheduler<StreamIdType>::ShouldYield( StreamIdType stream_id) const { if (stream_id == kHttp2RootStreamId) { - SPDY_BUG << "Invalid argument: root stream"; + SPDY_BUG_V2(spdy_bug_8_13) << "Invalid argument: root stream"; return false; } const StreamInfo* stream_info = FindStream(stream_id); if (stream_info == nullptr) { - SPDY_BUG << "Stream " << stream_id << " not registered"; + SPDY_BUG_V2(spdy_bug_8_14) << "Stream " << stream_id << " not registered"; return false; } if (HasReadyAncestor(*stream_info)) { @@ -534,12 +535,12 @@ StreamIdType stream_id, bool add_to_front) { if (stream_id == kHttp2RootStreamId) { - SPDY_BUG << "Cannot mark root stream ready"; + SPDY_BUG_V2(spdy_bug_8_15) << "Cannot mark root stream ready"; return; } StreamInfo* stream_info = FindStream(stream_id); if (stream_info == nullptr) { - SPDY_BUG << "Stream " << stream_id << " not registered"; + SPDY_BUG_V2(spdy_bug_8_16) << "Stream " << stream_id << " not registered"; return; } if (stream_info->ready) { @@ -553,12 +554,12 @@ void Http2PriorityWriteScheduler<StreamIdType>::MarkStreamNotReady( StreamIdType stream_id) { if (stream_id == kHttp2RootStreamId) { - SPDY_BUG << "Cannot mark root stream unready"; + SPDY_BUG_V2(spdy_bug_8_17) << "Cannot mark root stream unready"; return; } StreamInfo* stream_info = FindStream(stream_id); if (stream_info == nullptr) { - SPDY_BUG << "Stream " << stream_id << " not registered"; + SPDY_BUG_V2(spdy_bug_8_18) << "Stream " << stream_id << " not registered"; return; } if (!stream_info->ready) { @@ -680,7 +681,7 @@ return std::make_tuple(stream_info.id, stream_info.ToStreamPrecedence()); } } - SPDY_BUG << "No ready streams"; + SPDY_BUG_V2(spdy_bug_8_19) << "No ready streams"; return std::make_tuple( kHttp2RootStreamId, StreamPrecedenceType(kHttp2RootStreamId, kHttp2MinStreamWeight, false)); @@ -695,12 +696,12 @@ bool Http2PriorityWriteScheduler<StreamIdType>::IsStreamReady( StreamIdType stream_id) const { if (stream_id == kHttp2RootStreamId) { - SPDY_BUG << "Try to check whether root stream is ready"; + SPDY_BUG_V2(spdy_bug_8_20) << "Try to check whether root stream is ready"; return false; } const StreamInfo* stream_info = FindStream(stream_id); if (stream_info == nullptr) { - SPDY_BUG << "Stream " << stream_id << " not registered"; + SPDY_BUG_V2(spdy_bug_8_21) << "Stream " << stream_id << " not registered"; return false; } return stream_info->ready;
diff --git a/spdy/core/lifo_write_scheduler.h b/spdy/core/lifo_write_scheduler.h index cbe53d2..1f13b88 100644 --- a/spdy/core/lifo_write_scheduler.h +++ b/spdy/core/lifo_write_scheduler.h
@@ -98,7 +98,8 @@ StreamIdType stream_id, const StreamPrecedenceType& precedence) { if (StreamRegistered(stream_id)) { - SPDY_BUG << "Stream " << stream_id << " already registered"; + SPDY_BUG_V2(spdy_bug_13_1) + << "Stream " << stream_id << " already registered"; return; } registered_streams_.emplace_hint( @@ -110,7 +111,8 @@ void LifoWriteScheduler<StreamIdType>::UnregisterStream( StreamIdType stream_id) { if (!StreamRegistered(stream_id)) { - SPDY_BUG << "Stream " << stream_id << " is not registered"; + SPDY_BUG_V2(spdy_bug_13_2) + << "Stream " << stream_id << " is not registered"; return; } registered_streams_.erase(stream_id); @@ -149,7 +151,8 @@ if (it != registered_streams_.end()) { it->second.event_time = now_in_usec; } else { - SPDY_BUG << "Stream " << stream_id << " is not registered"; + SPDY_BUG_V2(spdy_bug_13_3) + << "Stream " << stream_id << " is not registered"; } } @@ -157,7 +160,8 @@ int64_t LifoWriteScheduler<StreamIdType>::GetLatestEventWithPrecedence( StreamIdType stream_id) const { if (!StreamRegistered(stream_id)) { - SPDY_BUG << "Stream " << stream_id << " is not registered"; + SPDY_BUG_V2(spdy_bug_13_4) + << "Stream " << stream_id << " is not registered"; return 0; } int64_t latest_event_time_us = 0; @@ -177,7 +181,7 @@ template <typename StreamIdType> StreamIdType LifoWriteScheduler<StreamIdType>::PopNextReadyStream() { if (ready_streams_.empty()) { - SPDY_BUG << "No ready streams available"; + SPDY_BUG_V2(spdy_bug_13_5) << "No ready streams available"; return 0; } auto it = --ready_streams_.end(); @@ -190,7 +194,8 @@ void LifoWriteScheduler<StreamIdType>::MarkStreamReady(StreamIdType stream_id, bool /*add_to_front*/) { if (!StreamRegistered(stream_id)) { - SPDY_BUG << "Stream " << stream_id << " is not registered"; + SPDY_BUG_V2(spdy_bug_13_6) + << "Stream " << stream_id << " is not registered"; return; } if (ready_streams_.find(stream_id) != ready_streams_.end()) { @@ -215,7 +220,8 @@ bool LifoWriteScheduler<StreamIdType>::IsStreamReady( StreamIdType stream_id) const { if (!StreamRegistered(stream_id)) { - SPDY_BUG << "Stream " << stream_id << " is not registered"; + SPDY_BUG_V2(spdy_bug_13_7) + << "Stream " << stream_id << " is not registered"; return false; } return ready_streams_.find(stream_id) != ready_streams_.end();
diff --git a/spdy/core/priority_write_scheduler.h b/spdy/core/priority_write_scheduler.h index c6824c6..1f7ed15 100644 --- a/spdy/core/priority_write_scheduler.h +++ b/spdy/core/priority_write_scheduler.h
@@ -61,19 +61,21 @@ << "Parent stream " << parent_id << " not registered"; if (stream_id == root_stream_id_) { - SPDY_BUG << "Stream " << root_stream_id_ << " already registered"; + SPDY_BUG_V2(spdy_bug_19_1) + << "Stream " << root_stream_id_ << " already registered"; return; } StreamInfo stream_info = {precedence.spdy3_priority(), stream_id, false}; bool inserted = stream_infos_.insert(std::make_pair(stream_id, stream_info)).second; - SPDY_BUG_IF(!inserted) << "Stream " << stream_id << " already registered"; + SPDY_BUG_IF_V2(spdy_bug_19_2, !inserted) + << "Stream " << stream_id << " already registered"; } void UnregisterStream(StreamIdType stream_id) override { auto it = stream_infos_.find(stream_id); if (it == stream_infos_.end()) { - SPDY_BUG << "Stream " << stream_id << " not registered"; + SPDY_BUG_V2(spdy_bug_19_3) << "Stream " << stream_id << " not registered"; return; } StreamInfo& stream_info = it->second; @@ -141,7 +143,7 @@ int64_t now_in_usec) override { auto it = stream_infos_.find(stream_id); if (it == stream_infos_.end()) { - SPDY_BUG << "Stream " << stream_id << " not registered"; + SPDY_BUG_V2(spdy_bug_19_4) << "Stream " << stream_id << " not registered"; return; } PriorityInfo& priority_info = priority_infos_[it->second.priority]; @@ -152,7 +154,7 @@ int64_t GetLatestEventWithPrecedence(StreamIdType stream_id) const override { auto it = stream_infos_.find(stream_id); if (it == stream_infos_.end()) { - SPDY_BUG << "Stream " << stream_id << " not registered"; + SPDY_BUG_V2(spdy_bug_19_5) << "Stream " << stream_id << " not registered"; return 0; } int64_t last_event_time_usec = 0; @@ -185,14 +187,14 @@ StreamPrecedenceType(info->priority)); } } - SPDY_BUG << "No ready streams available"; + SPDY_BUG_V2(spdy_bug_19_6) << "No ready streams available"; return std::make_tuple(0, StreamPrecedenceType(kV3LowestPriority)); } bool ShouldYield(StreamIdType stream_id) const override { auto it = stream_infos_.find(stream_id); if (it == stream_infos_.end()) { - SPDY_BUG << "Stream " << stream_id << " not registered"; + SPDY_BUG_V2(spdy_bug_19_7) << "Stream " << stream_id << " not registered"; return false; } @@ -219,7 +221,7 @@ void MarkStreamReady(StreamIdType stream_id, bool add_to_front) override { auto it = stream_infos_.find(stream_id); if (it == stream_infos_.end()) { - SPDY_BUG << "Stream " << stream_id << " not registered"; + SPDY_BUG_V2(spdy_bug_19_8) << "Stream " << stream_id << " not registered"; return; } StreamInfo& stream_info = it->second; @@ -239,7 +241,7 @@ void MarkStreamNotReady(StreamIdType stream_id) override { auto it = stream_infos_.find(stream_id); if (it == stream_infos_.end()) { - SPDY_BUG << "Stream " << stream_id << " not registered"; + SPDY_BUG_V2(spdy_bug_19_9) << "Stream " << stream_id << " not registered"; return; } StreamInfo& stream_info = it->second;
diff --git a/spdy/core/spdy_frame_builder.cc b/spdy/core/spdy_frame_builder.cc index 5c93128..89db2d9 100644 --- a/spdy/core/spdy_frame_builder.cc +++ b/spdy/core/spdy_frame_builder.cc
@@ -69,8 +69,9 @@ QUICHE_DCHECK_EQ(0u, stream_id & ~kStreamIdMask); bool success = true; if (length_ > 0) { - SPDY_BUG << "SpdyFrameBuilder doesn't have a clean state when BeginNewFrame" - << "is called. Leftover length_ is " << length_; + SPDY_BUG_V2(spdy_bug_73_1) + << "SpdyFrameBuilder doesn't have a clean state when BeginNewFrame" + << "is called. Leftover length_ is " << length_; offset_ += length_; length_ = 0; } @@ -90,7 +91,7 @@ uint8_t raw_frame_type = SerializeFrameType(type); QUICHE_DCHECK(IsDefinedFrameType(raw_frame_type)); QUICHE_DCHECK_EQ(0u, stream_id & ~kStreamIdMask); - SPDY_BUG_IF(length > kHttp2DefaultFramePayloadLimit) + SPDY_BUG_IF_V2(spdy_bug_73_2, length > kHttp2DefaultFramePayloadLimit) << "Frame length " << length_ << " is longer than frame size limit."; return BeginNewFrameInternal(raw_frame_type, flags, stream_id, length); }
diff --git a/spdy/core/spdy_frame_builder.h b/spdy/core/spdy_frame_builder.h index b18e9a0..3ed8ef0 100644 --- a/spdy/core/spdy_frame_builder.h +++ b/spdy/core/spdy_frame_builder.h
@@ -66,9 +66,10 @@ // Takes the buffer from the SpdyFrameBuilder. SpdySerializedFrame take() { - SPDY_BUG_IF(output_ != nullptr) << "ZeroCopyOutputBuffer is used to build " - << "frames. take() shouldn't be called"; - SPDY_BUG_IF(kMaxFrameSizeLimit < length_) + SPDY_BUG_IF_V2(spdy_bug_39_1, output_ != nullptr) + << "ZeroCopyOutputBuffer is used to build " + << "frames. take() shouldn't be called"; + SPDY_BUG_IF_V2(spdy_bug_39_2, kMaxFrameSizeLimit < length_) << "Frame length " << length_ << " is longer than the maximum possible allowed length."; SpdySerializedFrame rv(buffer_.release(), length(), true);
diff --git a/spdy/core/spdy_framer.cc b/spdy/core/spdy_framer.cc index 6b850c2..8b9d6ce 100644 --- a/spdy/core/spdy_framer.cc +++ b/spdy/core/spdy_framer.cc
@@ -294,8 +294,9 @@ size_t SpdyFramer::SpdyFrameIterator::NextFrame(ZeroCopyOutputBuffer* output) { const SpdyFrameIR& frame_ir = GetIR(); if (!has_next_frame_) { - SPDY_BUG << "SpdyFramer::SpdyFrameIterator::NextFrame called without " - << "a next frame."; + SPDY_BUG_V2(spdy_bug_75_1) + << "SpdyFramer::SpdyFrameIterator::NextFrame called without " + << "a next frame."; return false; }
diff --git a/spdy/core/spdy_protocol.cc b/spdy/core/spdy_protocol.cc index 9a5c229..ac51958 100644 --- a/spdy/core/spdy_protocol.cc +++ b/spdy/core/spdy_protocol.cc
@@ -29,7 +29,8 @@ "The value of given priority shouldn't be smaller than highest " "priority. Check this invariant explicitly."); if (priority > kV3LowestPriority) { - SPDY_BUG << "Invalid priority: " << static_cast<int>(priority); + SPDY_BUG_V2(spdy_bug_22_1) + << "Invalid priority: " << static_cast<int>(priority); return kV3LowestPriority; } return priority; @@ -37,11 +38,11 @@ int ClampHttp2Weight(int weight) { if (weight < kHttp2MinStreamWeight) { - SPDY_BUG << "Invalid weight: " << weight; + SPDY_BUG_V2(spdy_bug_22_2) << "Invalid weight: " << weight; return kHttp2MinStreamWeight; } if (weight > kHttp2MaxStreamWeight) { - SPDY_BUG << "Invalid weight: " << weight; + SPDY_BUG_V2(spdy_bug_22_3) << "Invalid weight: " << weight; return kHttp2MaxStreamWeight; } return weight; @@ -92,7 +93,7 @@ } SpdyFrameType ParseFrameType(uint8_t frame_type_field) { - SPDY_BUG_IF(!IsDefinedFrameType(frame_type_field)) + SPDY_BUG_IF_V2(spdy_bug_22_4, !IsDefinedFrameType(frame_type_field)) << "Frame type not defined: " << static_cast<int>(frame_type_field); return static_cast<SpdyFrameType>(frame_type_field); }