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

Reply via email to