aboutsummaryrefslogtreecommitdiff
path: root/clang/test/SemaCXX/warn-unsafe-buffer-usage-array.cpp
diff options
context:
space:
mode:
authorMalavika Samak <malavika.samak@gmail.com>2024-12-12 13:27:39 +0530
committerGitHub <noreply@github.com>2024-12-12 13:27:39 +0530
commit9c50182bf4942f88cc9876eb29e70802448cddc8 (patch)
tree8db1acec72196e1a4e00562fa2894d1b2b3b2fcd /clang/test/SemaCXX/warn-unsafe-buffer-usage-array.cpp
parent9992b1624303262407ff82413563f39ba40544a0 (diff)
downloadllvm-9c50182bf4942f88cc9876eb29e70802448cddc8.zip
llvm-9c50182bf4942f88cc9876eb29e70802448cddc8.tar.gz
llvm-9c50182bf4942f88cc9876eb29e70802448cddc8.tar.bz2
[-Wunsafe-buffer-usage] Suppress warning for multi-dimensional constant arrays (#118249)
Do not warn about unsafe buffer access, when multi-dimensional constant arrays are accessed and their indices are within the bounds of the buffer. Warning in such cases would be a false positive. Such a suppression already exists for 1-d arrays and it is now extended to multi-dimensional arrays. (rdar://137926311) (rdar://140320139) Co-authored-by: MalavikaSamak <malavika2@apple.com>
Diffstat (limited to 'clang/test/SemaCXX/warn-unsafe-buffer-usage-array.cpp')
-rw-r--r--clang/test/SemaCXX/warn-unsafe-buffer-usage-array.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/warn-unsafe-buffer-usage-array.cpp b/clang/test/SemaCXX/warn-unsafe-buffer-usage-array.cpp
index c6c93a2..7dd6c83 100644
--- a/clang/test/SemaCXX/warn-unsafe-buffer-usage-array.cpp
+++ b/clang/test/SemaCXX/warn-unsafe-buffer-usage-array.cpp
@@ -52,3 +52,43 @@ void constant_id_string(unsigned idx) {
unsafe_char = ""[1]; //expected-warning{{unsafe buffer access}}
unsafe_char = ""[idx]; //expected-warning{{unsafe buffer access}}
}
+
+typedef float Float4x4[4][4];
+
+// expected-warning@+1 {{'matrix' is an unsafe buffer that does not perform bounds checks}}
+float two_dimension_array(Float4x4& matrix, unsigned idx) {
+ // expected-warning@+1{{unsafe buffer access}}
+ float a = matrix[0][4];
+
+ a = matrix[0][3];
+
+ // expected-note@+1{{used in buffer access here}}
+ a = matrix[4][0];
+
+ a = matrix[idx][0]; // expected-note{{used in buffer access here}}
+
+ a = matrix[0][idx]; //expected-warning{{unsafe buffer access}}
+
+ a = matrix[idx][idx]; //expected-warning{{unsafe buffer access}} // expected-note{{used in buffer access here}}
+
+ return matrix[1][1];
+}
+
+typedef float Float2x3x4[2][3][4];
+float multi_dimension_array(Float2x3x4& matrix) {
+ float *f = matrix[0][2];
+ return matrix[1][2][3];
+}
+
+char array_strings[][11] = {
+ "Apple", "Banana", "Cherry", "Date", "Elderberry"
+};
+
+char array_string[] = "123456";
+
+char access_strings() {
+ char c = array_strings[0][4];
+ c = array_strings[3][10];
+ c = array_string[5];
+ return c;
+}