diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2012-04-16 22:03:00 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2012-04-16 22:03:00 +0000 |
commit | 1f5580b6f33f83f52b3daced4967e1d2dc596f16 (patch) | |
tree | 16d2f6800f592a75bd7af89c9e89f2d73d583ae7 /clang/lib/CodeGen/CodeGenModule.cpp | |
parent | 51244c22be6ddc9cc19e241e3a3550d3b429b65f (diff) | |
download | bcm5719-llvm-1f5580b6f33f83f52b3daced4967e1d2dc596f16.tar.gz bcm5719-llvm-1f5580b6f33f83f52b3daced4967e1d2dc596f16.zip |
Fix updateTerminator to be resiliant to degenerate terminators where
both fallthrough and a conditional branch target the same successor.
Gracefully delete the conditional branch and introduce any unconditional
branch needed to reach the actual successor. This fixes memory
corruption in 2009-06-15-RegScavengerAssert.ll and possibly other tests.
Also, while I'm here fix a latent bug I spotted by inspection. I never
applied the same fundamental fix to this fallthrough successor finding
logic that I did to the logic used when there are no conditional
branches. As a consequence it would have selected landing pads had they
be aligned in just the right way here. I don't have a test case as
I spotted this by inspection, and the previous time I found this
required have of TableGen's source code to produce it. =/ I hate backend
bugs. ;]
Thanks to Jim Grosbach for helping me reason through this and reviewing
the fix.
llvm-svn: 154867
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
0 files changed, 0 insertions, 0 deletions