aboutsummaryrefslogtreecommitdiff
path: root/clang-tools-extra/unittests
diff options
context:
space:
mode:
authorClement Courbet <courbet@google.com>2022-06-30 09:34:20 +0200
committerClement Courbet <courbet@google.com>2022-08-10 09:08:05 +0200
commit5331e1229aa6d0d33b5ec9fab7c05310187746d9 (patch)
treeafd317c381c11c7e668f27a2630f197d90b4989f /clang-tools-extra/unittests
parent0071a79532e8d664b734956a431d8c8c942cc25e (diff)
downloadllvm-5331e1229aa6d0d33b5ec9fab7c05310187746d9.zip
llvm-5331e1229aa6d0d33b5ec9fab7c05310187746d9.tar.gz
llvm-5331e1229aa6d0d33b5ec9fab7c05310187746d9.tar.bz2
[clang][transformer] Fix crash on replacement-less ASTEdit.
Given that we provide an EditGenerator edit(ASTEdit), we can't ever be sure that the user won't give us an empty replacement. Differential Revision: https://reviews.llvm.org/D128887
Diffstat (limited to 'clang-tools-extra/unittests')
-rw-r--r--clang-tools-extra/unittests/clang-tidy/TransformerClangTidyCheckTest.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/clang-tools-extra/unittests/clang-tidy/TransformerClangTidyCheckTest.cpp b/clang-tools-extra/unittests/clang-tidy/TransformerClangTidyCheckTest.cpp
index a3600ab..9106d5a 100644
--- a/clang-tools-extra/unittests/clang-tidy/TransformerClangTidyCheckTest.cpp
+++ b/clang-tools-extra/unittests/clang-tidy/TransformerClangTidyCheckTest.cpp
@@ -90,6 +90,32 @@ TEST(TransformerClangTidyCheckTest, DiagnosticsCorrectlyGenerated) {
EXPECT_EQ(Errors[0].Message.FileOffset, 10U);
}
+transformer::ASTEdit noReplacementEdit(transformer::RangeSelector Target) {
+ transformer::ASTEdit E;
+ E.TargetRange = std::move(Target);
+ return E;
+}
+
+TEST(TransformerClangTidyCheckTest, EmptyReplacement) {
+ class DiagOnlyCheck : public TransformerClangTidyCheck {
+ public:
+ DiagOnlyCheck(StringRef Name, ClangTidyContext *Context)
+ : TransformerClangTidyCheck(
+ makeRule(returnStmt(), edit(noReplacementEdit(node(RootID))),
+ cat("message")),
+ Name, Context) {}
+ };
+ std::string Input = "int h() { return 5; }";
+ std::vector<ClangTidyError> Errors;
+ EXPECT_EQ("int h() { }", test::runCheckOnCode<DiagOnlyCheck>(Input, &Errors));
+ EXPECT_EQ(Errors.size(), 1U);
+ EXPECT_EQ(Errors[0].Message.Message, "message");
+ EXPECT_THAT(Errors[0].Message.Ranges, testing::IsEmpty());
+
+ // The diagnostic is anchored to the match, "return 5".
+ EXPECT_EQ(Errors[0].Message.FileOffset, 10U);
+}
+
TEST(TransformerClangTidyCheckTest, DiagnosticMessageEscaped) {
class GiveDiagWithPercentSymbol : public TransformerClangTidyCheck {
public: