diff options
author | Malavika Samak <malavika.samak@gmail.com> | 2024-12-12 13:27:39 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-12-12 13:27:39 +0530 |
commit | 9c50182bf4942f88cc9876eb29e70802448cddc8 (patch) | |
tree | 8db1acec72196e1a4e00562fa2894d1b2b3b2fcd /clang/test/SemaCXX/warn-unsafe-buffer-usage-array.cpp | |
parent | 9992b1624303262407ff82413563f39ba40544a0 (diff) | |
download | llvm-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.cpp | 40 |
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; +} |