summaryrefslogtreecommitdiffstats
path: root/newlib
diff options
context:
space:
mode:
authorasomers <asomers@FreeBSD.org>2017-04-04 09:04:54 +0200
committerCorinna Vinschen <corinna@vinschen.de>2017-04-04 11:44:02 +0200
commit84a6dba57ed351a275889a3e8c87f566e3b3e508 (patch)
tree621f7726ee2488fb7841206b28b018ef9e7a256f /newlib
parente0dabc0e8dd6d9e2a21ceef124a1e4bf9f3d8aa3 (diff)
downloadcygnal-84a6dba57ed351a275889a3e8c87f566e3b3e508.tar.gz
cygnal-84a6dba57ed351a275889a3e8c87f566e3b3e508.tar.bz2
cygnal-84a6dba57ed351a275889a3e8c87f566e3b3e508.zip
Fix C++ includability of crypto headers with static array sizes
C99 allows array function parameters to use the static keyword for their sizes. This tells the compiler that the parameter will have at least the specified size, and calling code will fail to compile if that guarantee is not met. However, this syntax is not legal in C++. This commit reverts r300824, which worked around the problem for sys/md5.h only, and introduces a new macro: min_size(). min_size(x) can be used in headers as a static array size, but will still compile in C++ mode. Reviewed by: cem, ed MFC after: 4 weeks Sponsored by: Spectra Logic Corp Differential Revision: https://reviews.freebsd.org/D8277 fix a typo in __STDC_VERSION__ in __min_size requirements MFC after: 1 week Sponsored by: Panzura
Diffstat (limited to 'newlib')
-rw-r--r--newlib/libc/include/sys/cdefs.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/newlib/libc/include/sys/cdefs.h b/newlib/libc/include/sys/cdefs.h
index 0c8fced27..68172ad65 100644
--- a/newlib/libc/include/sys/cdefs.h
+++ b/newlib/libc/include/sys/cdefs.h
@@ -361,6 +361,20 @@
__builtin_types_compatible_p(__typeof(expr), t), yes, no)
#endif
+/*
+ * C99 Static array indices in function parameter declarations. Syntax such as:
+ * void bar(int myArray[static 10]);
+ * is allowed in C99 but not in C++. Define __min_size appropriately so
+ * headers using it can be compiled in either language. Use like this:
+ * void bar(int myArray[__min_size(10)]);
+ */
+#if !defined(__cplusplus) && \
+ (!defined(__STDC_VERSION__) || (__STDC_VERSION__ >= 199901))
+#define __min_size(x) static (x)
+#else
+#define __min_size(x) (x)
+#endif
+
#if __GNUC_PREREQ__(2, 96)
#define __malloc_like __attribute__((__malloc__))
#define __pure __attribute__((__pure__))