merged 2a1c6b9cba44b442fcb9a1e813cb0289f933b777 from golang/protobuf