mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 20:40:05 +00:00
Define __CORRECT_ISO_CPP_STRING_H_PROTO correctly for Clang.
In the string/string.h and string/strings.h headers, we have a couple of macros that "tell the caller that we provide correct C++ prototypes" according to the comment; they are used to determine whether to wrap some prototypes in "extern "C++"" (and provide multiple overloads of them, and some other magic) when __cplusplus is defined. The macros are set to check for sufficiently-recent GCC versions (4.4 and later), but this is not the right check for non-GCC compilers. In particular, these macros should also be set when using Clang -- if they are not set, then Clang will be unable to correctly diagnose a number of subtle bugs that will be errors in GCC compilations. As per discussion on earlier versions of this patch, rather than restrict the fix to Clang per se, we assume that all C++ compilers that claim to fully support C++98 are using a standard-conforming C++ standard library, which seems pretty reasonable. Clang has been providing an appropriate value of __cplusplus since May 2012.
This commit is contained in:
parent
abc26e998f
commit
3f637079f5
@ -1,3 +1,10 @@
|
||||
2013-12-24 Brooks Moses <bmoses@google.com>
|
||||
|
||||
* string/string.h (__CORRECT_ISO_CPP_STRING_H_PROTO): Define for
|
||||
all compilers that claim C++98 compliance, not just GCC.
|
||||
* string/strings.h (__CORRECT_ISO_CPP_STRINGS_H_PROTO):
|
||||
Likewise.
|
||||
|
||||
2013-12-24 Maxim Kuvyrkov <maxim@kugelworks.com>
|
||||
|
||||
* NEWS: Restore accidentally deleted bug-fix entries.
|
||||
|
@ -31,8 +31,12 @@ __BEGIN_DECLS
|
||||
#define __need_NULL
|
||||
#include <stddef.h>
|
||||
|
||||
/* Tell the caller that we provide correct C++ prototypes. */
|
||||
#if defined __cplusplus && __GNUC_PREREQ (4, 4)
|
||||
/* Provide correct C++ prototypes, and indicate this to the caller. This
|
||||
requires a compatible C++ standard library. As a heuristic, we provide
|
||||
these when the compiler indicates full conformance with C++98 or later,
|
||||
and for older GCC versions that are known to provide a compatible
|
||||
libstdc++. */
|
||||
#if defined __cplusplus && (__cplusplus >= 199711L || __GNUC_PREREQ (4, 4))
|
||||
# define __CORRECT_ISO_CPP_STRING_H_PROTO
|
||||
#endif
|
||||
|
||||
|
@ -27,8 +27,12 @@
|
||||
# define __need_size_t
|
||||
# include <stddef.h>
|
||||
|
||||
/* Tell the caller that we provide correct C++ prototypes. */
|
||||
# if defined __cplusplus && __GNUC_PREREQ (4, 4)
|
||||
/* Provide correct C++ prototypes, and indicate this to the caller. This
|
||||
requires a compatible C++ standard library. As a heuristic, we provide
|
||||
these when the compiler indicates full conformance with C++98 or later,
|
||||
and for older GCC versions that are known to provide a compatible
|
||||
libstdc++. */
|
||||
# if defined __cplusplus && (__cplusplus >= 199711L || __GNUC_PREREQ (4, 4))
|
||||
# define __CORRECT_ISO_CPP_STRINGS_H_PROTO
|
||||
# endif
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user