merged 50386d247745d79b9936c1fe6241315c9e21a296 from golang/protobuf