[clang-tools-extra] [clang-tidy]suggest use `std::span` as replacement of c array in C++20 for modernize-avoid-c-arrays (PR #108555)

Congcong Cai via cfe-commits cfe-commits at lists.llvm.org
Sat Sep 14 02:00:39 PDT 2024


================
@@ -72,11 +81,24 @@ void AvoidCArraysCheck::registerMatchers(MatchFinder *Finder) {
 
 void AvoidCArraysCheck::check(const MatchFinder::MatchResult &Result) {
   const auto *ArrayType = Result.Nodes.getNodeAs<TypeLoc>("typeloc");
-
+  const bool IsInParam =
+      Result.Nodes.getNodeAs<ParmVarDecl>("param_decl") != nullptr;
+  const bool IsVLA = ArrayType->getTypePtr()->isVariableArrayType();
+  enum class RecommendType { Array, Vector, Span };
+  RecommendType RecommendType = RecommendType::Array;
+  if (IsVLA) {
+    RecommendType = RecommendType::Vector;
+  } else if (ArrayType->getTypePtr()->isIncompleteArrayType() && IsInParam) {
+    // in function parameter, we also don't know the size of
+    // IncompleteArrayType.
+    RecommendType = Result.Context->getLangOpts().CPlusPlus20
+                        ? RecommendType::Span
+                        : RecommendType::Vector;
+  }
----------------
HerrCai0907 wrote:

If I remember correctly, LLVM only has this requirement for simple if statement, but not for if - else if statement for readability.

https://github.com/llvm/llvm-project/pull/108555


More information about the cfe-commits mailing list