git: 8b923102f957 - main - Revert "cdefs: Remove __func__ define"

From: Warner Losh <imp_at_FreeBSD.org>
Date: Mon, 27 Nov 2023 22:00:46 UTC
The branch main has been updated by imp:

URL: https://cgit.FreeBSD.org/src/commit/?id=8b923102f957e72c686d41075ce040f61e64fe6f

commit 8b923102f957e72c686d41075ce040f61e64fe6f
Author:     Warner Losh <imp@FreeBSD.org>
AuthorDate: 2023-11-27 18:47:21 +0000
Commit:     Warner Losh <imp@FreeBSD.org>
CommitDate: 2023-11-27 21:59:54 +0000

    Revert "cdefs: Remove __func__ define"
    
    This reverts commit 17a238a15fbed01477fbc54744d35cbccdb65871. There were
    too many other changes accidentally mixed in.
    
    Sponsored by:           Netflix
---
 sys/sys/cdefs.h                    | 40 ++++++++++++++++++++++++++++++++++++--
 tests/sys/opencrypto/cryptodevh.py |  4 ++++
 2 files changed, 42 insertions(+), 2 deletions(-)

diff --git a/sys/sys/cdefs.h b/sys/sys/cdefs.h
index bcbf418f9323..c5b6190077b3 100644
--- a/sys/sys/cdefs.h
+++ b/sys/sys/cdefs.h
@@ -96,9 +96,14 @@
 /*
  * The __CONCAT macro is used to concatenate parts of symbol names, e.g.
  * with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo.
+ * The __CONCAT macro is a bit tricky to use if it must work in non-ANSI
+ * mode -- there must be no spaces between its arguments, and for nested
+ * __CONCAT's, all the __CONCAT's must be at the left.  __CONCAT can also
+ * concatenate double-quoted strings produced by the __STRING macro, but
+ * this only works with ANSI C.
  *
  * __XSTRING is like __STRING, but it expands any macros in its argument
- * first.
+ * first.  It is only available with ANSI C.
  */
 #if defined(__STDC__) || defined(__cplusplus)
 #define	__P(protos)	protos		/* full-blown ANSI C */
@@ -117,7 +122,33 @@
 #define	__inline			/* delete GCC keyword */
 #endif /* ! __CC_SUPPORTS___INLINE */
 #endif /* !__cplusplus */
-#endif	/* __STDC__ || __cplusplus */
+
+#else	/* !(__STDC__ || __cplusplus) */
+#define	__P(protos)	()		/* traditional C preprocessor */
+#define	__CONCAT(x,y)	x/**/y
+#define	__STRING(x)	"x"
+
+#if !defined(__CC_SUPPORTS___INLINE)
+#define	__const				/* delete pseudo-ANSI C keywords */
+#define	__inline
+#define	__signed
+#define	__volatile
+/*
+ * In non-ANSI C environments, new programs will want ANSI-only C keywords
+ * deleted from the program and old programs will want them left alone.
+ * When using a compiler other than gcc, programs using the ANSI C keywords
+ * const, inline etc. as normal identifiers should define -DNO_ANSI_KEYWORDS.
+ * When using "gcc -traditional", we assume that this is the intent; if
+ * __GNUC__ is defined but __STDC__ is not, we leave the new keywords alone.
+ */
+#ifndef	NO_ANSI_KEYWORDS
+#define	const				/* delete ANSI C keywords */
+#define	inline
+#define	signed
+#define	volatile
+#endif	/* !NO_ANSI_KEYWORDS */
+#endif	/* !__CC_SUPPORTS___INLINE */
+#endif	/* !(__STDC__ || __cplusplus) */
 
 /*
  * Compiler-dependent macros to help declare dead (non-returning) and
@@ -312,6 +343,11 @@
 #define	__unreachable()	((void)0)
 #endif
 
+/* XXX: should use `#if __STDC_VERSION__ < 199901'. */
+#if !__GNUC_PREREQ__(2, 7)
+#define	__func__	NULL
+#endif
+
 #if (defined(__GNUC__) && __GNUC__ >= 2) && !defined(__STRICT_ANSI__) || __STDC_VERSION__ >= 199901
 #define	__LONG_LONG_SUPPORTED
 #endif
diff --git a/tests/sys/opencrypto/cryptodevh.py b/tests/sys/opencrypto/cryptodevh.py
index 2d723999abc7..9607bcd4d115 100644
--- a/tests/sys/opencrypto/cryptodevh.py
+++ b/tests/sys/opencrypto/cryptodevh.py
@@ -29,6 +29,10 @@ def __STRING(x): return #x
 
 def __XSTRING(x): return __STRING(x)	 
 
+def __P(protos): return ()		 
+
+def __STRING(x): return "x"
+
 def __aligned(x): return __attribute__((__aligned__(x)))
 
 def __section(x): return __attribute__((__section__(x)))