From d0779068c39b3774a53309805eab4a7ca970070c Mon Sep 17 00:00:00 2001 From: Alejandro Colomar Date: Thu, 22 May 2025 01:15:40 +0200 Subject: [PATCH] c: Add [PR117025] PR c/117025 gcc/ChangeLog: * Makefile.in (USER_H): Add . * ginclude/stdcountof.h: New file. gcc/testsuite/ChangeLog: * gcc.dg/countof-stdcountof.c: New test. Signed-off-by: Alejandro Colomar --- gcc/Makefile.in | 1 + gcc/ginclude/stdcountof.h | 31 +++++++++++++++++++++++ gcc/testsuite/gcc.dg/countof-stdcountof.c | 24 ++++++++++++++++++ 3 files changed, 56 insertions(+) create mode 100644 gcc/ginclude/stdcountof.h create mode 100644 gcc/testsuite/gcc.dg/countof-stdcountof.c diff --git a/gcc/Makefile.in b/gcc/Makefile.in index a45238639f1..49869531bc8 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -480,6 +480,7 @@ USER_H = $(srcdir)/ginclude/float.h \ $(srcdir)/ginclude/stdalign.h \ $(srcdir)/ginclude/stdatomic.h \ $(srcdir)/ginclude/stdckdint.h \ + $(srcdir)/ginclude/stdcountof.h \ $(EXTRA_HEADERS) USER_H_INC_NEXT_PRE = @user_headers_inc_next_pre@ diff --git a/gcc/ginclude/stdcountof.h b/gcc/ginclude/stdcountof.h new file mode 100644 index 00000000000..1d914f40e5d --- /dev/null +++ b/gcc/ginclude/stdcountof.h @@ -0,0 +1,31 @@ +/* Copyright (C) 2025 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. */ + +/* ISO C2Y: 7.21 Array count . */ + +#ifndef _STDCOUNTOF_H +#define _STDCOUNTOF_H + +#define countof _Countof + +#endif /* stdcountof.h */ diff --git a/gcc/testsuite/gcc.dg/countof-stdcountof.c b/gcc/testsuite/gcc.dg/countof-stdcountof.c new file mode 100644 index 00000000000..2fb0c6306ef --- /dev/null +++ b/gcc/testsuite/gcc.dg/countof-stdcountof.c @@ -0,0 +1,24 @@ +/* { dg-do run } */ +/* { dg-options "-std=c2y -pedantic-errors" } */ + +#include + +#define assert(e) ((e) ? (void) 0 : __builtin_abort ()) + +extern int strcmp (const char *, const char *); + +#ifndef countof +#error "countof not defined" +#endif + +int a[3]; +int b[countof a]; + +#define str(x) #x +#define xstr(x) str(x) + +int +main (void) +{ + assert (strcmp (xstr(countof), "_Countof") == 0); +} -- 2.47.2