_GNU_SOURCE implies _BSD_SOURCE and the latest _POSIX_C_SOURCE.
This showed up as open_memstream not being visible in <stdio.h>
if only _GNU_SOURCE was defined.
Bug: 17361504
Change-Id: I38f9843f4e6ee770a6325ad50f779bda5495ffca
diff --git a/libc/include/sys/cdefs.h b/libc/include/sys/cdefs.h
index b223afd..5082327 100644
--- a/libc/include/sys/cdefs.h
+++ b/libc/include/sys/cdefs.h
@@ -362,13 +362,22 @@
* do it in <sys/cdefs.h> instead because that's where our existing
* _POSIX_C_SOURCE tests were, and we're already confident that <sys/cdefs.h>
* is included everywhere it should be.
+ *
+ * The _GNU_SOURCE test needs to come before any _BSD_SOURCE or _POSIX* tests
+ * because _GNU_SOURCE implies everything else.
*/
-#if defined(_BSD_SOURCE)
-# define __USE_BSD 1
-#endif
-
#if defined(_GNU_SOURCE)
# define __USE_GNU 1
+# undef _POSIX_SOURCE
+# define _POSIX_SOURCE 1
+# undef _POSIX_C_SOURCE
+# define _POSIX_C_SOURCE 200809L
+# undef _BSD_SOURCE
+# define _BSD_SOURCE 1
+#endif
+
+#if defined(_BSD_SOURCE)
+# define __USE_BSD 1
#endif
/*-