llvm bug #1350, parts 1, 2, and 3.