swift
cc86e60e - RequirementMachine: Concrete contraction needs to substitute the parent type of a subject type sometimes

Commit
2 years ago
RequirementMachine: Concrete contraction needs to substitute the parent type of a subject type sometimes If you have generic parameters <T, U> and requirements of the form: - T : P - T == ConcreteType<U> - T.[P]U : SomeClass - T.[P]U : SomeProto And furthermore SomeClass does not conform to SomeProto, we can't leave `T.[P]U : SomeClass` unsubstituted; we still have to replace `T` with `ConcreteType<U>` to transform the latter two requirements into: - U : SomeClass - U : SomeProto "Concrete contraction" is easily the hackiest part of the Requirement Machine; I need to come up with a more principled solution for the problem that it solves sooner or later. Fixes rdar://problem/94150249.
Author
Committer
Parents
  • lib/AST/RequirementMachine
    • File
      ConcreteContraction.cpp
  • test/Generics
    • File
      rdar94150249.swift