https://github.com/earnol created https://github.com/llvm/llvm-project/pull/183847
Add test coverage for incompatible pointer type diagnostics when passing multidimensional arrays to functions expecting flat pointers. Tests cover 2D, 3D, 4D arrays, zero-sized dimensions, struct arrays, and type mismatches. >From bf4d6c8bc330b65f3998a9e160654b8e9c9ca58c Mon Sep 17 00:00:00 2001 From: Vladislav Aranov <[email protected]> Date: Fri, 27 Feb 2026 22:48:27 +0100 Subject: [PATCH] [clang][test] Add multi-dim-array diagnostic test for multi-dimensional arrays. Add test coverage for incompatible pointer type diagnostics when passing multidimensional arrays to functions expecting flat pointers. Tests cover 2D, 3D, 4D arrays, zero-sized dimensions, struct arrays, and type mismatches. --- clang/test/Sema/multi-dim-array.c | 52 +++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 clang/test/Sema/multi-dim-array.c diff --git a/clang/test/Sema/multi-dim-array.c b/clang/test/Sema/multi-dim-array.c new file mode 100644 index 0000000000000..3b6fab87548ae --- /dev/null +++ b/clang/test/Sema/multi-dim-array.c @@ -0,0 +1,52 @@ +// RUN: %clang_cc1 %s -fsyntax-only -verify -pedantic -Wno-strict-prototypes -Wno-zero-length-array + +int array_acceptor_case1(unsigned long * par1) // expected-note 3 {{passing argument to parameter 'par1' here}} +{ + return par1 != (unsigned long *)0; +} + +int array_acceptor_case2(unsigned long * par1) // expected-note {{passing argument to parameter 'par1' here}} +{ + return par1 != (unsigned long *)0; +} + +int array_acceptor_case3(unsigned long * par1) // expected-note {{passing argument to parameter 'par1' here}} +{ + return par1 != (unsigned long *)0; +} + +struct S +{ + int a; +}; + +int array_acceptor_case4(struct S * par1) // expected-note {{passing argument to parameter 'par1' here}} +{ + return par1 != (struct S *)0; +} + +int array_acceptor_case5(struct S * par1) // expected-note {{passing argument to parameter 'par1' here}} +{ + return par1 != (struct S *)0; +} + + +int array_tester() +{ + unsigned long mdarr[5][6]; + double mddarr[5][6]; + unsigned long sdarr[30]; + unsigned long mdarr3d[5][6][2]; + unsigned long mdarr4d[5][6][2][1]; + unsigned long mdarrz4d[5][6][0][1]; + struct S mdsarr[5][6][2]; + + array_acceptor_case1(sdarr); + array_acceptor_case1(mdarr); // expected-error {{incompatible pointer types passing 'unsigned long[5][6]' to parameter of type 'unsigned long *'}} + array_acceptor_case1(mdarr3d); // expected-error {{incompatible pointer types passing 'unsigned long[5][6][2]' to parameter of type 'unsigned long *'}} + array_acceptor_case1(mdarr4d); // expected-error {{incompatible pointer types passing 'unsigned long[5][6][2][1]' to parameter of type 'unsigned long *'}} + array_acceptor_case2(mddarr); // expected-error {{incompatible pointer types passing 'double[5][6]' to parameter of type 'unsigned long *'}} + array_acceptor_case4(mddarr); // expected-error {{incompatible pointer types passing 'double[5][6]' to parameter of type 'struct S *'}} + array_acceptor_case3(mdarrz4d); // expected-error {{incompatible pointer types passing 'unsigned long[5][6][0][1]' to parameter of type 'unsigned long *'}} + array_acceptor_case5(mdsarr); // expected-error {{incompatible pointer types passing 'struct S[5][6][2]' to parameter of type 'struct S *'}} +} _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
