diff options
author | martinboehme <mboehme@google.com> | 2023-10-30 13:18:57 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-30 13:18:57 +0100 |
commit | 526c9b7e37fa12abc17eebc68f21c1d213477ba8 (patch) | |
tree | 0b4d335a4f3a88e9825116e59b44e71b391700d8 /clang/lib/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.cpp | |
parent | da28c3309413475146fdeb9194e44b7a63b7484e (diff) | |
download | llvm-526c9b7e37fa12abc17eebc68f21c1d213477ba8.zip llvm-526c9b7e37fa12abc17eebc68f21c1d213477ba8.tar.gz llvm-526c9b7e37fa12abc17eebc68f21c1d213477ba8.tar.bz2 |
[clang][nullability] Use `proves()` and `assume()` instead of deprecated synonyms. (#70297)
Diffstat (limited to 'clang/lib/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.cpp')
-rw-r--r-- | clang/lib/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.cpp | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/clang/lib/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.cpp b/clang/lib/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.cpp index 8bd9a03..55d0713 100644 --- a/clang/lib/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.cpp +++ b/clang/lib/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.cpp @@ -413,7 +413,7 @@ bool isEmptyOptional(const Value &OptionalVal, const Environment &Env) { auto *HasValueVal = cast_or_null<BoolValue>(OptionalVal.getProperty("has_value")); return HasValueVal != nullptr && - Env.flowConditionImplies(Env.arena().makeNot(HasValueVal->formula())); + Env.proves(Env.arena().makeNot(HasValueVal->formula())); } /// Returns true if and only if `OptionalVal` is initialized and known to be @@ -421,8 +421,7 @@ bool isEmptyOptional(const Value &OptionalVal, const Environment &Env) { bool isNonEmptyOptional(const Value &OptionalVal, const Environment &Env) { auto *HasValueVal = cast_or_null<BoolValue>(OptionalVal.getProperty("has_value")); - return HasValueVal != nullptr && - Env.flowConditionImplies(HasValueVal->formula()); + return HasValueVal != nullptr && Env.proves(HasValueVal->formula()); } Value *getValueBehindPossiblePointer(const Expr &E, const Environment &Env) { @@ -490,8 +489,8 @@ void transferValueOrImpl( if (HasValueVal == nullptr) return; - Env.addToFlowCondition(ModelPred(Env, forceBoolValue(Env, *ValueOrPredExpr), - HasValueVal->formula())); + Env.assume(ModelPred(Env, forceBoolValue(Env, *ValueOrPredExpr), + HasValueVal->formula())); } void transferValueOrStringEmptyCall(const clang::Expr *ComparisonExpr, @@ -717,8 +716,8 @@ void transferOptionalAndOptionalCmp(const clang::CXXOperatorCallExpr *CmpExpr, if (auto *RHasVal = getHasValue(Env, Env.getValue(*CmpExpr->getArg(1)))) { if (CmpExpr->getOperator() == clang::OO_ExclaimEqual) CmpValue = &A.makeNot(*CmpValue); - Env.addToFlowCondition(evaluateEquality(A, *CmpValue, LHasVal->formula(), - RHasVal->formula())); + Env.assume(evaluateEquality(A, *CmpValue, LHasVal->formula(), + RHasVal->formula())); } } @@ -729,7 +728,7 @@ void transferOptionalAndValueCmp(const clang::CXXOperatorCallExpr *CmpExpr, if (auto *HasVal = getHasValue(Env, Env.getValue(*E))) { if (CmpExpr->getOperator() == clang::OO_ExclaimEqual) CmpValue = &A.makeNot(*CmpValue); - Env.addToFlowCondition( + Env.assume( evaluateEquality(A, *CmpValue, HasVal->formula(), A.makeLiteral(true))); } } @@ -917,7 +916,7 @@ llvm::SmallVector<SourceLocation> diagnoseUnwrapCall(const Expr *ObjectExpr, if (auto *OptionalVal = getValueBehindPossiblePointer(*ObjectExpr, Env)) { auto *Prop = OptionalVal->getProperty("has_value"); if (auto *HasValueVal = cast_or_null<BoolValue>(Prop)) { - if (Env.flowConditionImplies(HasValueVal->formula())) + if (Env.proves(HasValueVal->formula())) return {}; } } @@ -1004,14 +1003,13 @@ bool UncheckedOptionalAccessModel::merge(QualType Type, const Value &Val1, bool MustNonEmpty1 = isNonEmptyOptional(Val1, Env1); bool MustNonEmpty2 = isNonEmptyOptional(Val2, Env2); if (MustNonEmpty1 && MustNonEmpty2) - MergedEnv.addToFlowCondition(HasValueVal.formula()); + MergedEnv.assume(HasValueVal.formula()); else if ( // Only make the costly calls to `isEmptyOptional` if we got "unknown" // (false) for both calls to `isNonEmptyOptional`. !MustNonEmpty1 && !MustNonEmpty2 && isEmptyOptional(Val1, Env1) && isEmptyOptional(Val2, Env2)) - MergedEnv.addToFlowCondition( - MergedEnv.arena().makeNot(HasValueVal.formula())); + MergedEnv.assume(MergedEnv.arena().makeNot(HasValueVal.formula())); setHasValue(MergedVal, HasValueVal); return true; } |