reference, declaration → definition definition → references, declarations, derived classes, virtual overrides reference to multiple definitions → definitions unreferenced |
11433 assert(E->isComparisonOp() && "expected comparison operator"); 11434 assert((E->getOpcode() == BO_Cmp || 11435 E->getType()->isIntegralOrEnumerationType()) && 11443 bool IsRelational = E->isRelationalOp(); 11444 bool IsEquality = E->isEqualityOp(); 11445 if (E->getOpcode() == BO_Cmp) { 11447 Info.Ctx.CompCategories.getInfoForType(E->getType()); 11452 QualType LHSTy = E->getLHS()->getType(); 11453 QualType RHSTy = E->getRHS()->getType(); 11458 bool LHSOK = EvaluateInteger(E->getLHS(), LHS, Info); 11461 if (!EvaluateInteger(E->getRHS(), RHS, Info) || !LHSOK) 11464 return Success(CCR::Less, E); 11466 return Success(CCR::Greater, E); 11467 return Success(CCR::Equal, E); 11474 bool LHSOK = EvaluateFixedPointOrInteger(E->getLHS(), LHSFX, Info); 11477 if (!EvaluateFixedPointOrInteger(E->getRHS(), RHSFX, Info) || !LHSOK) 11480 return Success(CCR::Less, E); 11482 return Success(CCR::Greater, E); 11483 return Success(CCR::Equal, E); 11489 if (E->isAssignmentOp()) { 11491 EvaluateLValue(E->getLHS(), LV, Info); 11494 LHSOK = EvaluateFloat(E->getLHS(), LHS.FloatReal, Info); 11500 LHSOK = EvaluateComplex(E->getLHS(), LHS, Info); 11505 if (E->getRHS()->getType()->isRealFloatingType()) { 11506 if (!EvaluateFloat(E->getRHS(), RHS.FloatReal, Info) || !LHSOK) 11510 } else if (!EvaluateComplex(E->getRHS(), RHS, Info) || !LHSOK) 11519 return Success(IsEqual ? CCR::Equal : CCR::Nonequal, E); 11524 return Success(IsEqual ? CCR::Equal : CCR::Nonequal, E); 11532 bool LHSOK = EvaluateFloat(E->getRHS(), RHS, Info); 11536 if (!EvaluateFloat(E->getLHS(), LHS, Info) || !LHSOK) 11539 assert(E->isComparisonOp() && "Invalid binary operator!"); 11553 return Success(GetCmpRes(), E); 11559 bool LHSOK = EvaluatePointer(E->getLHS(), LHSValue, Info); 11563 if (!EvaluatePointer(E->getRHS(), RHSValue, Info) || !LHSOK) 11572 return Error(E); 11578 return Error(E); 11585 return Error(E); 11589 return Error(E); 11596 return Error(E); 11601 return Error(E); 11602 return Success(CCR::Nonequal, E); 11619 Info.CCEDiag(E, diag::note_constexpr_void_comparison); 11644 Info.CCEDiag(E, diag::note_constexpr_pointer_comparison_base_classes); 11646 Info.CCEDiag(E, diag::note_constexpr_pointer_comparison_base_field) 11650 Info.CCEDiag(E, diag::note_constexpr_pointer_comparison_base_field) 11655 Info.CCEDiag(E, 11678 return Error(E); 11682 return Error(E); 11686 return Success(CCR::Less, E); 11688 return Success(CCR::Greater, E); 11689 return Success(CCR::Equal, E); 11698 bool LHSOK = EvaluateMemberPointer(E->getLHS(), LHSValue, Info); 11702 if (!EvaluateMemberPointer(E->getRHS(), RHSValue, Info) || !LHSOK) 11710 return Success(Equal ? CCR::Equal : CCR::Nonequal, E); 11717 Info.CCEDiag(E, diag::note_constexpr_compare_virtual_mem_ptr) << MD; 11720 Info.CCEDiag(E, diag::note_constexpr_compare_virtual_mem_ptr) << MD; 11727 return Success(Equal ? CCR::Equal : CCR::Nonequal, E); 11731 assert(E->isComparisonOp() && "unexpected nullptr operation"); 11736 return Success(CCR::Equal, E);