Commits

Michael Gottesman committed 841aa449cfe
[cfg] Add a new analysis findAllNonFailureExitBBs. Even though there is only one "return" from a SILFunction, there may be multiple non-failure exits via no return functions. findAllNonFailureExitBBs The verifier currently enforces that all no-return function applications must be immediately followed by an unreachable. Thus to identify all such functions, we must just visit all unreachables and visit the previous instruction of the unreachable. If we don't have an apply in such case, then we must be in a failure code path. This code attempts to identify all ways of exiting a function in a non-failure code path. Thus it places into the result vector the return from the BB and all no-return function applications that it can not identify as a "failure" function. The function ignores any paths that it identifies as failure paths. Failure functions will be identified in the future via an @semantic tag but for now we just check for functions with the appropriate "fatal error" suffix as we do in the ARC optimizer. I am going to use this in the closure specializer to insert releases for "copied" closures that were originally passed in @guaranteed. Since the closure was passed in originally @guaranteed there will be no matching -1 unless we insert it ourselves. Swift SVN r25051