This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Fix C++ issues with C11 glibc changes


This patch fixes C++ issues with the C11 changes:

* static_assert is a C++11 keyword, _Static_assert is not, so
  static_assert must not be defined as a macro for C++.

* gets is still in C++11, and GCC always defines _GNU_SOURCE for C++
  (so the library implementation, largely in headers, can use glibc
  functions that aren't in ISO C); the declaration is needed for
  <cstdio> to import it into namespace std.  (I doubt it really
  *should* have been kept in C++11, given the adoption of various C11
  library features there, but it's certainly in C++03 and it's
  probably also useful to keep working with older GCC versions.)

* char16_t and char32_t are keywords in C++11, so should not be
  defined as typedefs in uchar.h in that case.  (I didn't make uchar.h
  predefine __STDC_UTF_16__ and __STDC_UTF_32__ for C++; for C, they
  are predefined by GCC; see
  <http://gcc.gnu.org/ml/gcc-patches/2011-08/msg01524.html>.)

Tested x86_64-linux-gnu.  OK for glibc?  Does this all look right to
the libstdc++ people?

2012-01-06  Joseph Myers  <joseph@codesourcery.com>

	[BZ #13566]
	* assert/assert.h (static_assert): Don't define for C++.
	* libio/stdio.h (gets): Do declare for C++ <= C++11.
	* wcsmbs/uchar.h (char16_t, char32_t): Don't typedef for C++11.

diff --git a/assert/assert.h b/assert/assert.h
index 4022e28..2e3e2b5 100644
--- a/assert/assert.h
+++ b/assert/assert.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,1992,1994-2001,2003,2004,2007,2011
+/* Copyright (C) 1991,1992,1994-2001,2003,2004,2007,2011,2012
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -115,7 +115,7 @@ __END_DECLS
 #endif /* NDEBUG.  */
 
 
-#ifdef __USE_ISOC11
+#if defined __USE_ISOC11 && !defined __cplusplus
 /* Static assertion.  Requires support in the compiler.  */
 # undef static_assert
 # define static_assert _Static_assert
diff --git a/libio/stdio.h b/libio/stdio.h
index b392028..d9cb573 100644
--- a/libio/stdio.h
+++ b/libio/stdio.h
@@ -1,5 +1,5 @@
 /* Define ISO C stdio on top of C++ iostreams.
-   Copyright (C) 1991, 1994-2010, 2011 Free Software Foundation, Inc.
+   Copyright (C) 1991, 1994-2011, 2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -628,13 +628,16 @@ __BEGIN_NAMESPACE_STD
 extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
      __wur;
 
-#ifndef __USE_ISOC11
+#if !defined __USE_ISOC11 \
+    || (defined __cplusplus && __cplusplus <= 201103L)
 /* Get a newline-terminated string from stdin, removing the newline.
    DO NOT USE THIS FUNCTION!!  There is no limit on how much it will read.
 
    The function has been officially removed in ISO C11.  This opportunity
    is used to also remove it from the GNU feature list.  It is now only
    available when explicitly using an old ISO C, Unix, or POSIX standard.
+   GCC defines _GNU_SOURCE when building C++ code and the function is still
+   in C++11, so it is also available for C++.
 
    This function is a possible cancellation point and therefore not
    marked with __THROW.  */
diff --git a/wcsmbs/uchar.h b/wcsmbs/uchar.h
index bb5f3ba..706b9a2 100644
--- a/wcsmbs/uchar.h
+++ b/wcsmbs/uchar.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011 Free Software Foundation, Inc.
+/* Copyright (C) 2011, 2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -40,7 +40,7 @@ __END_NAMESPACE_C99
 #endif
 
 
-#ifdef __GNUC__
+#if defined __GNUC__ && !defined __USE_ISOCXX11
 /* Define the 16-bit and 32-bit character types.  Use the information
    provided by the compiler.  */
 # if !defined __CHAR16_TYPE__ || !defined __CHAR32_TYPE__

-- 
Joseph S. Myers
joseph@codesourcery.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]