This is a resubmission of the patch originally posted before the holidays, but now split up into smaller change sets to make review easier. The substance of the changes is described in the original post:
https://gcc.gnu.org/ml/gcc-patches/2016-12/msg01892.html The changes are broken up into a series of 5 smaller patches. The purpose of the first three is only to refactor code and set the stage for the last two. The goal of the refactoring is to minimize code duplication and movement as a result of the substantive changes in the last two patches. The grouping of changes into each of the first three patches is fairly arbitrary, driven only by the goal of reducing their scope to make each patch possible to review on its own. They have no observable effect on either optimization or warnings. The last two patches then build on top of the first three to implement the observable substantive changes. Martin