Commits

Tim Bodeit committed 9ce9dced91a
[SILOptimizer] Fix let constant of non-class protocol being mutable Extend the checks in `LifetimeChecker` in `SILOptimizer/Mandatory/DefiniteInitialization.cpp` to catch when the memory object corresponding to a let constant is used as an inout parameter in a protocol witness method. Initializing a let constant separate from its declaration requires write access. Therefore it is treated as `@lvalue TestProtocol` in the AST for a certain scope. Checking that the constant is not written to after being initialized is supposed to happen in the Mandatory SILOptimizer phase instead. On loads, the Optimizer checks, that a variable is fully initialized, but perviously did not validate what happens to it after it is loaded. This allowed loading the memory object through an open_existential_addr instruction and applying the result as an Operand to a mutating witness method.