ARRAY_END() returns a pointer one past the end of the last element in
the array argument. This pointer is useful for iterating over the
elements of an array:
for (T *p = a, p < ENDOF(a); p++)
...
Cc: Kees Cook <kees@kernel.org>
Cc: Christopher Bazley <chris.bazley.wg14@gmail.com>
Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Cc: Marco Elver <elver@google.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
Message-ID: <37b1088dbd01a21d2f9d460aa510726119b3bcb0.1752193588.git.alx@kernel.org>
---
include/linux/array_size.h | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/include/linux/array_size.h b/include/linux/array_size.h
index 06d7d83196ca..62382973078e 100644
--- a/include/linux/array_size.h
+++ b/include/linux/array_size.h
@@ -10,4 +10,10 @@
*/
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
+/**
+ * ARRAY_END - get a pointer to one past the last element in array @a
+ * @a: array
+ */
+#define ARRAY_END(a) (a + ARRAY_SIZE(a))
+
#endif /* _LINUX_ARRAY_SIZE_H */
--
2.51.0
Hi Alejandro,
kernel test robot noticed the following build warnings:
[auto build test WARNING on 6146a0f1dfae5d37442a9ddcba012add260bceb0]
url: https://github.com/intel-lab-lkp/linux/commits/Alejandro-Colomar/array_size-h-Add-ARRAY_END/20251109-062234
base: 6146a0f1dfae5d37442a9ddcba012add260bceb0
patch link: https://lore.kernel.org/r/35255c1ceb54518779a45351dcd79a3c1910818a.1762637046.git.alx%40kernel.org
patch subject: [PATCH v2 1/4] array_size.h: Add ARRAY_END()
config: x86_64-randconfig-001-20251109 (https://download.01.org/0day-ci/archive/20251109/202511092053.40sHnHlA-lkp@intel.com/config)
compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 87f0227cb60147a26a1eeb4fb06e3b505e9c7261)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251109/202511092053.40sHnHlA-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202511092053.40sHnHlA-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> drivers/block/floppy.c:4805:9: warning: 'ARRAY_END' macro redefined [-Wmacro-redefined]
4805 | #define ARRAY_END(X) (&((X)[ARRAY_SIZE(X)]))
| ^
include/linux/array_size.h:17:9: note: previous definition is here
17 | #define ARRAY_END(a) (a + ARRAY_SIZE(a))
| ^
1 warning generated.
vim +/ARRAY_END +4805 drivers/block/floppy.c
5a74db06cc8d36 Philippe De Muyter 2009-02-18 4804
5a74db06cc8d36 Philippe De Muyter 2009-02-18 @4805 #define ARRAY_END(X) (&((X)[ARRAY_SIZE(X)]))
5a74db06cc8d36 Philippe De Muyter 2009-02-18 4806
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Hi Alejandro,
kernel test robot noticed the following build warnings:
[auto build test WARNING on 6146a0f1dfae5d37442a9ddcba012add260bceb0]
url: https://github.com/intel-lab-lkp/linux/commits/Alejandro-Colomar/array_size-h-Add-ARRAY_END/20251109-062234
base: 6146a0f1dfae5d37442a9ddcba012add260bceb0
patch link: https://lore.kernel.org/r/35255c1ceb54518779a45351dcd79a3c1910818a.1762637046.git.alx%40kernel.org
patch subject: [PATCH v2 1/4] array_size.h: Add ARRAY_END()
config: alpha-defconfig (https://download.01.org/0day-ci/archive/20251109/202511091804.XUQA4dOK-lkp@intel.com/config)
compiler: alpha-linux-gcc (GCC) 15.1.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251109/202511091804.XUQA4dOK-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202511091804.XUQA4dOK-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> drivers/block/floppy.c:4805:9: warning: 'ARRAY_END' redefined
4805 | #define ARRAY_END(X) (&((X)[ARRAY_SIZE(X)]))
| ^~~~~~~~~
In file included from include/linux/string.h:6,
from include/linux/bitmap.h:13,
from include/linux/nodemask.h:91,
from include/linux/numa.h:6,
from include/linux/async.h:13,
from drivers/block/floppy.c:166:
include/linux/array_size.h:17:9: note: this is the location of the previous definition
17 | #define ARRAY_END(a) (a + ARRAY_SIZE(a))
| ^~~~~~~~~
vim +/ARRAY_END +4805 drivers/block/floppy.c
5a74db06cc8d36 Philippe De Muyter 2009-02-18 4804
5a74db06cc8d36 Philippe De Muyter 2009-02-18 @4805 #define ARRAY_END(X) (&((X)[ARRAY_SIZE(X)]))
5a74db06cc8d36 Philippe De Muyter 2009-02-18 4806
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Hi, On Sun, Nov 09, 2025 at 06:43:46PM +0800, kernel test robot wrote: > Hi Alejandro, > > kernel test robot noticed the following build warnings: > > [auto build test WARNING on 6146a0f1dfae5d37442a9ddcba012add260bceb0] > > url: https://github.com/intel-lab-lkp/linux/commits/Alejandro-Colomar/array_size-h-Add-ARRAY_END/20251109-062234 > base: 6146a0f1dfae5d37442a9ddcba012add260bceb0 > patch link: https://lore.kernel.org/r/35255c1ceb54518779a45351dcd79a3c1910818a.1762637046.git.alx%40kernel.org > patch subject: [PATCH v2 1/4] array_size.h: Add ARRAY_END() > config: alpha-defconfig (https://download.01.org/0day-ci/archive/20251109/202511091804.XUQA4dOK-lkp@intel.com/config) > compiler: alpha-linux-gcc (GCC) 15.1.0 > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251109/202511091804.XUQA4dOK-lkp@intel.com/reproduce) > > If you fix the issue in a separate patch/commit (i.e. not just a new version of > the same patch/commit), kindly add following tags > | Reported-by: kernel test robot <lkp@intel.com> > | Closes: https://lore.kernel.org/oe-kbuild-all/202511091804.XUQA4dOK-lkp@intel.com/ > > All warnings (new ones prefixed by >>): > > >> drivers/block/floppy.c:4805:9: warning: 'ARRAY_END' redefined > 4805 | #define ARRAY_END(X) (&((X)[ARRAY_SIZE(X)])) > | ^~~~~~~~~ Hmmm, nice! There's already an ARRAY_END() there. I'll remove that definition. BTW, this reminds me that I forgot to parenthesize 'a' in my implementation. Do you have any preference on the implementation? I could use either of (&((a)[ARRAY_SIZE(a)])) ((a) + ARRAY_SIZE(a)) Have a lovely day! Alex > In file included from include/linux/string.h:6, > from include/linux/bitmap.h:13, > from include/linux/nodemask.h:91, > from include/linux/numa.h:6, > from include/linux/async.h:13, > from drivers/block/floppy.c:166: > include/linux/array_size.h:17:9: note: this is the location of the previous definition > 17 | #define ARRAY_END(a) (a + ARRAY_SIZE(a)) > | ^~~~~~~~~ > > > vim +/ARRAY_END +4805 drivers/block/floppy.c > > 5a74db06cc8d36 Philippe De Muyter 2009-02-18 4804 > 5a74db06cc8d36 Philippe De Muyter 2009-02-18 @4805 #define ARRAY_END(X) (&((X)[ARRAY_SIZE(X)])) > 5a74db06cc8d36 Philippe De Muyter 2009-02-18 4806 > > -- > 0-DAY CI Kernel Test Service > https://github.com/intel/lkp-tests/wiki -- <https://www.alejandro-colomar.es> Use port 80 (that is, <...:80/>).
© 2016 - 2025 Red Hat, Inc.