[clang-tools-extra] [clang-tidy] Fix crash in modernize-use-trailing-return-type (PR #70709)
Piotr Zegar via cfe-commits
cfe-commits at lists.llvm.org
Mon Oct 30 12:14:08 PDT 2023
https://github.com/PiotrZSL created https://github.com/llvm/llvm-project/pull/70709
Resolved the crash that occurred during the use of a user-defined C-style string literal. The fix entails checking whether the identifier is non-empty before attempting to read its name.
>From 05653ab752f430858f9791e8f04b530164910ed1 Mon Sep 17 00:00:00 2001
From: Piotr Zegar <me at piotrzegar.pl>
Date: Mon, 30 Oct 2023 19:04:59 +0000
Subject: [PATCH] [clang-tidy] Fix crash in modernize-use-trailing-return-type
Resolved the crash that occurred during the use of a user-defined
C-style string literal. The fix entails checking whether the
identifier is non-empty before attempting to read its name.
---
.../modernize/UseTrailingReturnTypeCheck.cpp | 2 +-
.../use-trailing-return-type-cxx20.cpp | 18 ++++++++++++++++++
2 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/clang-tools-extra/clang-tidy/modernize/UseTrailingReturnTypeCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseTrailingReturnTypeCheck.cpp
index b81cfbcbfd16ccc..5a456c58fb5cc53 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseTrailingReturnTypeCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseTrailingReturnTypeCheck.cpp
@@ -103,7 +103,7 @@ struct UnqualNameVisitor : public RecursiveASTVisitor<UnqualNameVisitor> {
bool VisitDeclRefExpr(DeclRefExpr *S) {
DeclarationName Name = S->getNameInfo().getName();
- return S->getQualifierLoc() || !Name.isIdentifier() ||
+ return S->getQualifierLoc() || Name.isEmpty() || !Name.isIdentifier() ||
!visitUnqualName(Name.getAsIdentifierInfo()->getName());
}
diff --git a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-trailing-return-type-cxx20.cpp b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-trailing-return-type-cxx20.cpp
index 63fe7a95fdc94ac..72fdcc01779650e 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-trailing-return-type-cxx20.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-trailing-return-type-cxx20.cpp
@@ -98,3 +98,21 @@ struct TestDefaultOperatorB {
// CHECK-MESSAGES: :[[@LINE-1]]:15: warning: use a trailing return type for this function [modernize-use-trailing-return-type]
// CHECK-FIXES: {{^}} friend auto operator<(const TestDefaultOperatorB &, const TestDefaultOperatorB &) noexcept -> bool = default;{{$}}
};
+
+namespace PR69863 {
+
+template <unsigned Len>
+struct CustomCompileTimeString {
+ constexpr CustomCompileTimeString(const char (&)[Len]) noexcept {}
+};
+
+template <CustomCompileTimeString Str>
+constexpr decltype(Str) operator""__csz() noexcept {
+// CHECK-MESSAGES: :[[@LINE-1]]:25: warning: use a trailing return type for this function [modernize-use-trailing-return-type]
+// CHECK-FIXES: {{^}}constexpr auto operator""__csz() noexcept -> decltype(Str) {
+ return Str;
+}
+
+inline constexpr CustomCompileTimeString SomeString = "This line will cause a crash"__csz;
+
+}
More information about the cfe-commits
mailing list