Make QuicFrame a standard-layout struct.

C++ provides certain guarantees about the way union fields interact, which are only valid for standard-layout types.  Standard-layout types are not allowed to have data members in both base and derived types; this fixes that by moving QuicInlinedFrame::type into individual frames.

Also, before C++17, using offsetof() on non-standard-layout types is undefined behavor.

Thanks to Stephan Hartmann <> for pointing this problem out in <>.

PiperOrigin-RevId: 320195673
Change-Id: I179634af3e3a199b7b7320a031b42898a5644824
10 files changed
tree: 305980b84af8e391340fd995923be1f5b51c57bc
  1. common/
  2. epoll_server/
  3. http2/
  4. quic/
  5. spdy/


QUICHE (QUIC, Http/2, Etc) is Google‘s implementation of QUIC and related protocols. It powers Chromium as well as Google’s QUIC servers and some other projects.