1 From bb21afc362a3ecba07ab386a0bc4385e75fbd4b5 Mon Sep 17 00:00:00 2001
2 From: "Gabriel F. T. Gomes" <gftg@linux.vnet.ibm.com>
3 Date: Mon, 14 Aug 2017 17:51:51 -0300
4 Subject: [PATCH] Do not use generic selection in C++ mode
6 The logic to protect the use of generic selection (_Generic) does not
7 check for C or C++ mode, however, generic selection is a C-only
10 Tested for powerpc64le.
12 * misc/sys/cdefs.h (__HAVE_GENERIC_SELECTION): Define to 0, if
15 (cherry picked from commit 6913ad65e00bb32417ad39c41d292b976171e27e)
16 [Romain rebase on glibc 2.26]
17 Signed-off-by: Romain Naour <romain.naour@gmail.com>
19 misc/sys/cdefs.h | 19 ++++++++++---------
20 1 file changed, 10 insertions(+), 9 deletions(-)
22 diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h
23 index 06523bf..0c80821 100644
24 --- a/misc/sys/cdefs.h
25 +++ b/misc/sys/cdefs.h
27 # define __glibc_macro_warning(msg)
30 -/* Support for generic selection (ISO C11) is available in GCC since
31 - version 4.9. Previous versions do not provide generic selection,
32 - even though they might set __STDC_VERSION__ to 201112L, when in
33 - -std=c11 mode. Thus, we must check for !defined __GNUC__ when
34 - testing __STDC_VERSION__ for generic selection support.
35 +/* Generic selection (ISO C11) is a C-only feature, available in GCC
36 + since version 4.9. Previous versions do not provide generic
37 + selection, even though they might set __STDC_VERSION__ to 201112L,
38 + when in -std=c11 mode. Thus, we must check for !defined __GNUC__
39 + when testing __STDC_VERSION__ for generic selection support.
40 On the other hand, Clang also defines __GNUC__, so a clang-specific
41 check is required to enable the use of generic selection. */
42 -#if __GNUC_PREREQ (4, 9) \
43 - || __glibc_clang_has_extension (c_generic_selections) \
44 - || (!defined __GNUC__ && defined __STDC_VERSION__ \
45 - && __STDC_VERSION__ >= 201112L)
46 +#if !defined __cplusplus \
47 + && (__GNUC_PREREQ (4, 9) \
48 + || __glibc_clang_has_extension (c_generic_selections) \
49 + || (!defined __GNUC__ && defined __STDC_VERSION__ \
50 + && __STDC_VERSION__ >= 201112L))
51 # define __HAVE_GENERIC_SELECTION 1
53 # define __HAVE_GENERIC_SELECTION 0