diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -13639,14 +13639,6 @@ if (ResultTy.isNull() || LHS.isInvalid() || RHS.isInvalid()) return ExprError(); - // The LHS is not converted to the result type for fixed-point compound - // assignment as the common type is computed on demand. Reset the CompLHSTy - // to the LHS type we would have gotten after unary conversions. - if (!CompLHSTy.isNull() && - (LHS.get()->getType()->isFixedPointType() || - RHS.get()->getType()->isFixedPointType())) - CompLHSTy = UsualUnaryConversions(LHS.get()).get()->getType(); - if (ResultTy->isRealFloatingType() && (getLangOpts().getFPRoundingMode() != RoundingMode::NearestTiesToEven || getLangOpts().getFPExceptionMode() != LangOptions::FPE_Ignore)) @@ -13705,6 +13697,12 @@ OK = LHS.get()->getObjectKind(); } + // The LHS is not converted to the result type for fixed-point compound + // assignment as the common type is computed on demand. Reset the CompLHSTy + // to the LHS type we would have gotten after unary conversions. + if (CompResultTy->isFixedPointType()) + CompLHSTy = UsualUnaryConversions(LHS.get()).get()->getType(); + if (ConvertHalfVec) return convertHalfVecBinOp(*this, LHS, RHS, Opc, ResultTy, VK, OK, true, OpLoc, CurFPFeatures);