Author: Martin Braenne Date: 2023-07-12T04:52:27Z New Revision: 1e9b4fc1dcf27ae43477efe0329f738e4419871b
URL: https://github.com/llvm/llvm-project/commit/1e9b4fc1dcf27ae43477efe0329f738e4419871b DIFF: https://github.com/llvm/llvm-project/commit/1e9b4fc1dcf27ae43477efe0329f738e4419871b.diff LOG: [clang][dataflow] Various refactorings in TypeErasedDataflowAnalysisTest.cpp These simplify the code in their own right, but they are also useful in that they minimize the number of changes that will need to be made when then API of `AggregateStorageLocation` and `StructValue` changes as part of the migration to strict handling of value categories (see https://discourse.llvm.org/t/70086). Depends On D154949 Reviewed By: xazax.hun, gribozavr2 Differential Revision: https://reviews.llvm.org/D154952 Added: Modified: clang/unittests/Analysis/FlowSensitive/TypeErasedDataflowAnalysisTest.cpp Removed: ################################################################################ diff --git a/clang/unittests/Analysis/FlowSensitive/TypeErasedDataflowAnalysisTest.cpp b/clang/unittests/Analysis/FlowSensitive/TypeErasedDataflowAnalysisTest.cpp index 473750ad7a6cb4..d811aed8fddd99 100644 --- a/clang/unittests/Analysis/FlowSensitive/TypeErasedDataflowAnalysisTest.cpp +++ b/clang/unittests/Analysis/FlowSensitive/TypeErasedDataflowAnalysisTest.cpp @@ -370,6 +370,13 @@ TEST_F(NoreturnDestructorTest, ConditionalOperatorNestedBranchReturns) { // FIXME: Called functions at point `p` should contain only "foo". } +StructValue &createNewStructValue(AggregateStorageLocation &Loc, + Environment &Env) { + auto &Val = *cast<StructValue>(Env.createValue(Loc.getType())); + Env.setValue(Loc, Val); + return Val; +} + // Models an analysis that uses flow conditions. class SpecialBoolAnalysis final : public DataflowAnalysis<SpecialBoolAnalysis, NoopLattice> { @@ -390,23 +397,18 @@ class SpecialBoolAnalysis final if (const auto *E = selectFirst<CXXConstructExpr>( "call", match(cxxConstructExpr(HasSpecialBoolType).bind("call"), *S, getASTContext()))) { - auto &ConstructorVal = *Env.createValue(E->getType()); - ConstructorVal.setProperty("is_set", Env.getBoolLiteralValue(false)); - Env.setValue(*Env.getStorageLocation(*E, SkipPast::None), ConstructorVal); + cast<StructValue>(Env.getValueStrict(*E)) + ->setProperty("is_set", Env.getBoolLiteralValue(false)); } else if (const auto *E = selectFirst<CXXMemberCallExpr>( "call", match(cxxMemberCallExpr(callee(cxxMethodDecl(ofClass( SpecialBoolRecordDecl)))) .bind("call"), *S, getASTContext()))) { - auto *Object = E->getImplicitObjectArgument(); - assert(Object != nullptr); - - auto *ObjectLoc = getImplicitObjectLocation(*E, Env); - assert(ObjectLoc != nullptr); + auto &ObjectLoc = + *cast<AggregateStorageLocation>(getImplicitObjectLocation(*E, Env)); - auto &ConstructorVal = *Env.createValue(Object->getType()); - ConstructorVal.setProperty("is_set", Env.getBoolLiteralValue(true)); - Env.setValue(*ObjectLoc, ConstructorVal); + createNewStructValue(ObjectLoc, Env) + .setProperty("is_set", Env.getBoolLiteralValue(true)); } } @@ -551,21 +553,19 @@ class OptionalIntAnalysis final *S, getASTContext()); if (const auto *E = selectFirst<CXXConstructExpr>( "construct", Matches)) { - auto &ConstructorVal = *Env.createValue(E->getType()); - ConstructorVal.setProperty("has_value", Env.getBoolLiteralValue(false)); - Env.setValue(*Env.getStorageLocation(*E, SkipPast::None), ConstructorVal); + cast<StructValue>(Env.getValueStrict(*E)) + ->setProperty("has_value", Env.getBoolLiteralValue(false)); } else if (const auto *E = selectFirst<CXXOperatorCallExpr>("operator", Matches)) { assert(E->getNumArgs() > 0); auto *Object = E->getArg(0); assert(Object != nullptr); - auto *ObjectLoc = Env.getStorageLocation(*Object, SkipPast::Reference); - assert(ObjectLoc != nullptr); + auto &ObjectLoc = *cast<AggregateStorageLocation>( + Env.getStorageLocation(*Object, SkipPast::Reference)); - auto &ConstructorVal = *Env.createValue(Object->getType()); - ConstructorVal.setProperty("has_value", Env.getBoolLiteralValue(true)); - Env.setValue(*ObjectLoc, ConstructorVal); + createNewStructValue(ObjectLoc, Env) + .setProperty("has_value", Env.getBoolLiteralValue(true)); } } @@ -1227,9 +1227,7 @@ class TopAnalysis final : public DataflowAnalysis<TopAnalysis, NoopLattice> { match(callExpr(callee(functionDecl(hasName("makeTop")))).bind("top"), *S, getASTContext()); if (const auto *E = selectFirst<CallExpr>("top", Matches)) { - auto &Loc = Env.createStorageLocation(*E); - Env.setValue(Loc, Env.makeTopBoolValue()); - Env.setStorageLocation(*E, Loc); + Env.setValueStrict(*E, Env.makeTopBoolValue()); } } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits