@@ -81,18 +81,20 @@ void AvoidCArraysCheck::registerMatchers(MatchFinder *Finder) {
81
81
82
82
void AvoidCArraysCheck::check (const MatchFinder::MatchResult &Result) {
83
83
const auto *ArrayType = Result.Nodes .getNodeAs <TypeLoc>(" typeloc" );
84
- bool const IsInParam =
84
+ const bool IsInParam =
85
85
Result.Nodes .getNodeAs <ParmVarDecl>(" param_decl" ) != nullptr ;
86
86
const bool IsVLA = ArrayType->getTypePtr ()->isVariableArrayType ();
87
- // in function parameter, we also don't know the size of IncompleteArrayType.
88
- const bool IsUnknownSize =
89
- IsVLA || (ArrayType->getTypePtr ()->isIncompleteArrayType () && IsInParam);
90
87
enum class RecommendType { Array, Vector, Span };
91
- const RecommendType RecommendType =
92
- (IsInParam && Result.Context ->getLangOpts ().CPlusPlus20 )
93
- ? RecommendType::Span
94
- : IsUnknownSize ? RecommendType::Vector
95
- : RecommendType::Array;
88
+ RecommendType RecommendType = RecommendType::Array;
89
+ if (IsVLA) {
90
+ RecommendType = RecommendType::Vector;
91
+ } else if (ArrayType->getTypePtr ()->isIncompleteArrayType () && IsInParam) {
92
+ // in function parameter, we also don't know the size of
93
+ // IncompleteArrayType.
94
+ RecommendType = Result.Context ->getLangOpts ().CPlusPlus20
95
+ ? RecommendType::Span
96
+ : RecommendType::Vector;
97
+ }
96
98
diag (ArrayType->getBeginLoc (),
97
99
" do not declare %select{C-style|C VLA}0 arrays, use "
98
100
" %select{std::array<>|std::vector<>|std::span<>}1 instead" )
0 commit comments