Commits

Roman Levenstein committed 3448b7c0f4c
[let-properies-opt] Fix a bug which where a let property was wrongly considered to have a constant value. The optimization pass was inspecting only init methods to determine if a given let property is defined in the same way by all initializers. But this is not enough in certain cases, e.g. when some of the initializers were inlined into the application code and the body of the inlined SIL function representing such an initializer was removed afterwards by the dead function elimination pass. In such situations, the Let Properties Optimization pass was assuming that there is only one initializer and considered the constant let property value defined there as the only possible value of this let property. Therefore it propagated it into let-property uses, which resulted in an incorrect code. The right thing to do is to analyze all assignments to a given let property whether they are inside initializer SIL functions or not. This makes sure that all possible values of a let property are analyzed and compared. The propagation of a constant let property value can only happen if all found possible values are all the same. Fixes SR-1026 and rdar://25303106