diff options
Diffstat (limited to 'lib/Analysis/GRExprEngine.cpp')
-rw-r--r-- | lib/Analysis/GRExprEngine.cpp | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/lib/Analysis/GRExprEngine.cpp b/lib/Analysis/GRExprEngine.cpp index 2f3f0bf5cc..70e6647c27 100644 --- a/lib/Analysis/GRExprEngine.cpp +++ b/lib/Analysis/GRExprEngine.cpp @@ -2810,16 +2810,18 @@ void GRExprEngine::VisitBinaryOperator(BinaryOperator* B, // The RHS is not Unknown. // Get the computation type. - QualType CTy = cast<CompoundAssignOperator>(B)->getComputationType(); + QualType CTy = cast<CompoundAssignOperator>(B)->getComputationResultType(); CTy = getContext().getCanonicalType(CTy); - + + QualType CLHSTy = cast<CompoundAssignOperator>(B)->getComputationLHSType(); + CLHSTy = getContext().getCanonicalType(CTy); + QualType LTy = getContext().getCanonicalType(LHS->getType()); QualType RTy = getContext().getCanonicalType(RHS->getType()); - - // Perform promotions. - if (LTy != CTy) V = EvalCast(V, CTy); - if (RTy != CTy) RightV = EvalCast(RightV, CTy); - + + // Promote LHS. + V = EvalCast(V, CLHSTy); + // Evaluate operands and promote to result type. if (RightV.isUndef()) { // Propagate undefined values (right-side). |