[clang-tools-extra] [clang-tidy][modernize-loop-convert]check isDependentSizedArrayType (PR #69062)
Congcong Cai via cfe-commits
cfe-commits at lists.llvm.org
Sun Oct 15 17:17:30 PDT 2023
https://github.com/HerrCai0907 updated https://github.com/llvm/llvm-project/pull/69062
>From bfeaa2eeaa3d20e1919288bcf1027ec196378236 Mon Sep 17 00:00:00 2001
From: Congcong Cai <congcongcai0907 at 163.com>
Date: Sun, 15 Oct 2023 00:20:08 +0800
Subject: [PATCH 1/3] [clang-tidy][modernize-loop-convert]check
isDependentSizedArrayType before resolve type size
---
.../clang-tidy/modernize/LoopConvertCheck.cpp | 1 +
clang-tools-extra/docs/ReleaseNotes.rst | 4 ++++
.../clang-tidy/checkers/modernize/loop-convert-basic.cpp | 9 +++++++++
3 files changed, 14 insertions(+)
diff --git a/clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp b/clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp
index f90d99a8d66069d..8beaa62c78ba0ab 100644
--- a/clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp
@@ -753,6 +753,7 @@ void LoopConvertCheck::doConversion(
bool IsCheapToCopy =
!Descriptor.ElemType.isNull() &&
Descriptor.ElemType.isTriviallyCopyableType(*Context) &&
+ !Descriptor.ElemType->isDependentSizedArrayType() &&
// TypeInfo::Width is in bits.
Context->getTypeInfo(Descriptor.ElemType).Width <= 8 * MaxCopySize;
bool UseCopy = CanCopy && ((VarNameFromAlias && !AliasVarIsRef) ||
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index 03e5dc6f164af2a..ae440210d8a4f2b 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -269,6 +269,10 @@ Changes in existing checks
<clang-tidy/checks/modernize/loop-convert>` to support for-loops with
iterators initialized by free functions like ``begin``, ``end``, or ``size``.
+- Improved :doc:`modernize-loop-convert
+ <clang-tidy/checks/modernize/loop-convert>` to avoid crash dor dependent
+ array.
+
- Improved :doc:`modernize-return-braced-init-list
<clang-tidy/checks/modernize/return-braced-init-list>` check to ignore
false-positives when constructing the container with ``count`` copies of
diff --git a/clang-tools-extra/test/clang-tidy/checkers/modernize/loop-convert-basic.cpp b/clang-tools-extra/test/clang-tidy/checkers/modernize/loop-convert-basic.cpp
index 71ae4c46e6a5e95..8d8144a729bbdee 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/modernize/loop-convert-basic.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/modernize/loop-convert-basic.cpp
@@ -939,4 +939,13 @@ void fundamentalTypesTest() {
// CHECK-FIXES: for (double Double : Doubles)
}
+template <unsigned int p> void test() {
+ unsigned int test[3][p];
+ // Initialize to zero
+ for (unsigned int i = 0; i < p; ++i)
+ for (unsigned int j = 0; j < 3; ++j) // CHECK-MESSAGES: warning: use range-based for loop instead
+ // CHECK-FIXES: (auto & j : test)
+ test[j][i] = 0;
+}
+
} // namespace PseudoArray
>From 89ddc2510e74b7b7460384860ce691a6784fa82b Mon Sep 17 00:00:00 2001
From: Congcong Cai <congcongcai0907 at 163.com>
Date: Sun, 15 Oct 2023 09:42:33 +0800
Subject: [PATCH 2/3] fix
---
clang-tools-extra/docs/ReleaseNotes.rst | 7 ++-----
.../clang-tidy/checkers/modernize/loop-convert-basic.cpp | 6 ++++--
2 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index ae440210d8a4f2b..63f9a2418eca5aa 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -267,11 +267,8 @@ Changes in existing checks
- Improved :doc:`modernize-loop-convert
<clang-tidy/checks/modernize/loop-convert>` to support for-loops with
- iterators initialized by free functions like ``begin``, ``end``, or ``size``.
-
-- Improved :doc:`modernize-loop-convert
- <clang-tidy/checks/modernize/loop-convert>` to avoid crash dor dependent
- array.
+ iterators initialized by free functions like ``begin``, ``end``, or ``size``
+ and avoid crash for array of dependent array.
- Improved :doc:`modernize-return-braced-init-list
<clang-tidy/checks/modernize/return-braced-init-list>` check to ignore
diff --git a/clang-tools-extra/test/clang-tidy/checkers/modernize/loop-convert-basic.cpp b/clang-tools-extra/test/clang-tidy/checkers/modernize/loop-convert-basic.cpp
index 8d8144a729bbdee..2e43bc6ff96e4e5 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/modernize/loop-convert-basic.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/modernize/loop-convert-basic.cpp
@@ -943,9 +943,11 @@ template <unsigned int p> void test() {
unsigned int test[3][p];
// Initialize to zero
for (unsigned int i = 0; i < p; ++i)
- for (unsigned int j = 0; j < 3; ++j) // CHECK-MESSAGES: warning: use range-based for loop instead
- // CHECK-FIXES: (auto & j : test)
+ for (unsigned int j = 0; j < 3; ++j)
test[j][i] = 0;
+ // CHECK-MESSAGES: :[[@LINE-2]]:5: warning: use range-based for loop instead
+ // CHECK-FIXES: (auto & j : test)
+ // CHECK-FIXES: j[i] = 0;
}
} // namespace PseudoArray
>From 4980cbfc04ee9475f01695d4fe9de7952b8ce752 Mon Sep 17 00:00:00 2001
From: Congcong Cai <congcongcai0907 at 163.com>
Date: Mon, 16 Oct 2023 07:57:23 +0800
Subject: [PATCH 3/3] update test
---
.../checkers/modernize/loop-convert-basic.cpp | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/clang-tools-extra/test/clang-tidy/checkers/modernize/loop-convert-basic.cpp b/clang-tools-extra/test/clang-tidy/checkers/modernize/loop-convert-basic.cpp
index 2e43bc6ff96e4e5..e2b9336d620f507 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/modernize/loop-convert-basic.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/modernize/loop-convert-basic.cpp
@@ -939,15 +939,18 @@ void fundamentalTypesTest() {
// CHECK-FIXES: for (double Double : Doubles)
}
-template <unsigned int p> void test() {
- unsigned int test[3][p];
- // Initialize to zero
- for (unsigned int i = 0; i < p; ++i)
- for (unsigned int j = 0; j < 3; ++j)
- test[j][i] = 0;
+template <unsigned p> void _dependenceArrayTest() {
+ unsigned test[3][p];
+ for (unsigned i = 0; i < p; ++i)
+ for (unsigned j = 0; j < 3; ++j)
+ printf("%d", test[j][i]);
// CHECK-MESSAGES: :[[@LINE-2]]:5: warning: use range-based for loop instead
// CHECK-FIXES: (auto & j : test)
- // CHECK-FIXES: j[i] = 0;
+ // CHECK-FIXES: printf("%d", j[i]);
+}
+void dependenceArrayTest() {
+ _dependenceArrayTest<1>();
+ _dependenceArrayTest<2>();
}
} // namespace PseudoArray
More information about the cfe-commits
mailing list