Author: huqizhi Date: 2023-09-08T14:52:14+08:00 New Revision: b0ea2790c41db65b3c283f78a5f534bc26fc6f8f
URL: https://github.com/llvm/llvm-project/commit/b0ea2790c41db65b3c283f78a5f534bc26fc6f8f DIFF: https://github.com/llvm/llvm-project/commit/b0ea2790c41db65b3c283f78a5f534bc26fc6f8f.diff LOG: [ASTImport]CXXBoolLiteralExpr should be handled explicitly in statement comparation In the comparation of return statement, return value(if it is CXXBoolLiteralExpr) should be handled explicitly, otherwise an incorrect result would be returned. Reviewed By: steakhal, donat.nagy Differential Revision: https://reviews.llvm.org/D159479 Added: Modified: clang/lib/AST/ASTStructuralEquivalence.cpp clang/unittests/AST/StructuralEquivalenceTest.cpp Removed: ################################################################################ diff --git a/clang/lib/AST/ASTStructuralEquivalence.cpp b/clang/lib/AST/ASTStructuralEquivalence.cpp index b211e349a41299a..544420234ef0eb0 100644 --- a/clang/lib/AST/ASTStructuralEquivalence.cpp +++ b/clang/lib/AST/ASTStructuralEquivalence.cpp @@ -366,6 +366,10 @@ class StmtComparer { return true; } + bool IsStmtEquivalent(const CXXBoolLiteralExpr *E1, const CXXBoolLiteralExpr *E2) { + return E1->getValue() == E2->getValue(); + } + /// End point of the traversal chain. bool TraverseStmt(const Stmt *S1, const Stmt *S2) { return true; } diff --git a/clang/unittests/AST/StructuralEquivalenceTest.cpp b/clang/unittests/AST/StructuralEquivalenceTest.cpp index 1001ce49b067396..4e9f476659b9ee6 100644 --- a/clang/unittests/AST/StructuralEquivalenceTest.cpp +++ b/clang/unittests/AST/StructuralEquivalenceTest.cpp @@ -1798,6 +1798,25 @@ TEST_F(StructuralEquivalenceCacheTest, SimpleNonEq) { TU, cxxRecordDecl(hasName("B"), unless(isImplicit()))))); } +TEST_F(StructuralEquivalenceCacheTest, ReturnStmtNonEq) { + auto TU = makeTuDecls( + R"( + bool x(){ return true; } + )", + R"( + bool x(){ return false; } + )", + Lang_CXX03); + + StructuralEquivalenceContext Ctx( + get<0>(TU)->getASTContext(), get<1>(TU)->getASTContext(), + NonEquivalentDecls, StructuralEquivalenceKind::Default, false, false); + + auto X = findDeclPair<FunctionDecl>(TU, functionDecl(hasName("x"))); + EXPECT_FALSE(Ctx.IsEquivalent(X.first->getBody(), X.second->getBody())); + +} + TEST_F(StructuralEquivalenceCacheTest, SpecialNonEq) { auto TU = makeTuDecls( R"( _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits