reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced

References

tools/clang/lib/AST/ExprConstant.cpp
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);