Skip to content
  • Chandler Carruth's avatar
    Fix a devilish miscompile exposed by block placement. The · ee54feb6
    Chandler Carruth authored
    updateTerminator code didn't correctly handle EH terminators in one very
    specific case. AnalyzeBranch would find no terminator instruction, and
    so the fallback in updateTerminator is to assume fallthrough. This is
    correct, but the destination of the fallthrough was assumed to be the
    first successor.
    
    This is *almost always* true, but in certain cases the loop
    transformations will cause the landing pad to be the first successor!
    Instead of this brittle logic, actually look through the successors for
    a non-landing-pad accessor, and to assert if more than one is found.
    
    This will hopefully fix some (if not all) of the self host miscompiles
    with block placement. Thanks to Benjamin Kramer for reporting, Nick
    Lewycky for an initial stab at a reduction, and Duncan for endless
    advice on EH (which I know nothing about) as well as reviewing the
    actual fix.
    
    llvm-svn: 145062
    ee54feb6
Loading