]> sourceware.org Git - newlib-cygwin.git/commitdiff
Fix C++ includability of crypto headers with static array sizes
authorasomers <asomers@FreeBSD.org>
Tue, 4 Apr 2017 07:04:54 +0000 (09:04 +0200)
committerCorinna Vinschen <corinna@vinschen.de>
Tue, 4 Apr 2017 09:44:02 +0000 (11:44 +0200)
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

newlib/libc/include/sys/cdefs.h

index 0c8fced2789da4bcb8127c95b48e90fde491b971..68172ad657daa93ee9ccd712b85d520415b5522e 100644 (file)
            __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__))
This page took 0.034531 seconds and 5 git commands to generate.