         jsonToNumberMap[jsonName] = number
 
       case .aliased(proto: let p, aliases: let aliases):
-        let protoName = Name(staticString: p)
+        let protoName = Name(staticString: p, pool: internPool)
         let names = Names(json: protoName, proto: protoName)
         numberToNameMap[number] = names
         protoToNumberMap[protoName] = number
         jsonToNumberMap[protoName] = number
         for alias in aliases {
-            let protoName = Name(staticString: alias)
+            let protoName = Name(staticString: alias, pool: internPool)
             protoToNumberMap[protoName] = number
             jsonToNumberMap[protoName] = number
         }

  /// has to be computed, it caches the UTF-8 bytes in an
  /// unmovable and immutable heap area.
  internal struct Name: Hashable, CustomStringConvertible {
    // This is safe to use elsewhere in this library
    internal init(staticString: StaticString) {
        self.nameString = .staticString(staticString)
        self.utf8Buffer = UnsafeRawBufferPointer(start: staticString.utf8Start, count: staticString.utf8CodeUnitCount)
    }

    // This should not be used outside of this file, as it requires

      switch description {

      case .same(proto: let p):
        let protoName = Name(staticString: p, pool: internPool)
        let names = Names(json: protoName, proto: protoName)
        numberToNameMap[number] = names
        protoToNumberMap[protoName] = number
        jsonToNumberMap[protoName] = number

      case .standard(proto: let p):
        let protoName = Name(staticString: p, pool: internPool)
        let jsonString = toJsonFieldName(protoName.description)
        let jsonName = Name(string: jsonString, pool: internPool)
        let names = Names(json: jsonName, proto: protoName)
