forked from OSchip/llvm-project
GRExprEngine: When processing compound assignments, do a switch table lookup to get the non-compound opcode from the compound opcode instead of relying on the order of BinaryOperator::opcode values. This unbreaks the misc-ps.c test.
llvm-svn: 63991
This commit is contained in:
parent
19179ad680
commit
5d7662cfe0
|
@ -2515,12 +2515,19 @@ void GRExprEngine::VisitBinaryOperator(BinaryOperator* B,
|
|||
|
||||
assert (B->isCompoundAssignmentOp());
|
||||
|
||||
if (Op >= BinaryOperator::AndAssign) {
|
||||
Op = (BinaryOperator::Opcode) (Op - (BinaryOperator::AndAssign -
|
||||
BinaryOperator::And));
|
||||
}
|
||||
else {
|
||||
Op = (BinaryOperator::Opcode) (Op - BinaryOperator::MulAssign);
|
||||
switch (Op) {
|
||||
default:
|
||||
assert(0 && "Invalid opcode for compound assignment.");
|
||||
case BinaryOperator::MulAssign: Op = BinaryOperator::Mul; break;
|
||||
case BinaryOperator::DivAssign: Op = BinaryOperator::Div; break;
|
||||
case BinaryOperator::RemAssign: Op = BinaryOperator::Rem; break;
|
||||
case BinaryOperator::AddAssign: Op = BinaryOperator::Add; break;
|
||||
case BinaryOperator::SubAssign: Op = BinaryOperator::Sub; break;
|
||||
case BinaryOperator::ShlAssign: Op = BinaryOperator::Shl; break;
|
||||
case BinaryOperator::ShrAssign: Op = BinaryOperator::Shr; break;
|
||||
case BinaryOperator::AndAssign: Op = BinaryOperator::And; break;
|
||||
case BinaryOperator::XorAssign: Op = BinaryOperator::Xor; break;
|
||||
case BinaryOperator::OrAssign: Op = BinaryOperator::Or; break;
|
||||
}
|
||||
|
||||
// Perform a load (the LHS). This performs the checks for
|
||||
|
|
Loading…
Reference in New Issue