GenericEnvironment *
TypeChecker::markInvalidGenericSignature(DeclContext *DC) {
  GenericParamList *genericParams = DC->getGenericParamsOfContext();
  GenericSignature *genericSig = DC->getGenericSignatureOfContext();

  // Build new archetypes without any generic requirements.
  DeclContext *parentDC = DC->getParent();
  auto builder = createArchetypeBuilder(parentDC->getParentModule());

  auto parentSig = parentDC->getGenericSignatureOfContext();
  auto parentEnv = parentDC->getGenericEnvironmentOfContext();

  assert(parentSig != nullptr || DC->isInnermostContextGeneric());

  if (parentSig != nullptr)
    builder.addGenericSignature(parentSig, parentEnv);

  if (DC->isInnermostContextGeneric()) {
    // Visit each of the generic parameters.
    for (auto param : *genericParams)
      builder.addGenericParameter(param);
  }

  // Wire up the archetypes.
  auto genericEnv = builder.getGenericEnvironment(
      genericSig->getGenericParams());

  return genericEnv;
}