Index: lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp =================================================================== --- lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp +++ lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp @@ -35,10 +35,24 @@ case PPC::fixup_ppc_nofixup: return Value; case PPC::fixup_ppc_brcond14: + if (static_cast(Value) >= 0 && Value > 0x7fff) + llvm_unreachable("Cond branch target overflow."); + else if (static_cast(Value) < 0 && Value < 0xffffffffffff8000) + llvm_unreachable("Cond branch target underflow."); + return Value & 0xfffc; case PPC::fixup_ppc_brcond14abs: + assert(Value >= 0 && Value <= 0xffff && + "Cond branch absolute target overflow."); return Value & 0xfffc; case PPC::fixup_ppc_br24: + if (static_cast(Value) >= 0 && Value > 0x1ffffff) + llvm_unreachable("Branch target overflow."); + else if (static_cast(Value) < 0 && Value < 0xfffffffffe000000) + llvm_unreachable("Branch target underflow."); + return Value & 0x3fffffc; case PPC::fixup_ppc_br24abs: + assert(Value >= 0 && Value <= 0x3ffffff && + "Branch absolute target overflow."); return Value & 0x3fffffc; case PPC::fixup_ppc_half16: return Value & 0xffff;