Bug 13566

Summary: Glibc should define gets for C++11
Product: glibc Reporter: Tom de Vries <vries>
Component: stdioAssignee: Joseph Myers <jsm28>
Status: RESOLVED FIXED    
Severity: normal CC: bz-glibc, jwakely.gcc
Priority: P2 Flags: fweimer: security-
Version: 2.15   
Target Milestone: ---   
Host: Target:
Build: Last reconfirmed:

Description Tom de Vries 2012-01-05 18:23:30 UTC
With this change:
...
	[BZ #13528]
	* libio/stdio.h: Do not declare gets for ISO C11 and _GNU_SOURCE.
...

gets is no longer defined for C++11, while it should be. This causes breakage when building libstdc++. See also discussion at http://gcc.gnu.org/ml/gcc/2012-01/msg00041.html .
Comment 1 Jonathan Wakely 2012-01-05 18:49:58 UTC
(In reply to comment #0)
> http://gcc.gnu.org/ml/gcc/2012-01/msg00041.html .

That build failure is in C++03 code, not C++11

gets() needs to be defined for C++ even when _GNU_SOURCE is defined.

I suggest checking whether __cplusplus <= 201103L
Comment 2 Joseph Myers 2012-01-06 18:15:14 UTC
Fixed in commit 8ecd6b2a1283a28bcf56cfe48099fafa412a3929.
Comment 3 Bryan Kadzban 2012-02-05 20:00:07 UTC
...And un-fixed in this commit, a day later:

http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=c3a87236702cb73be1dada3438bbd3c3934e83f8

Looks like either that needs to be rolled back, or gcc needs to be changed to not define _GNU_SOURCE.  (But I bet that latter change will break lots more stuff in libstdc++...)
Comment 4 Tom de Vries 2012-02-05 20:28:02 UTC
related gcc bug:

Bug 51785 - gets not anymore declared
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51785
Comment 5 Bryan Kadzban 2012-02-05 21:09:14 UTC
Ah, indeed.

Well, I'll let the gcc and glibc people figure out what to do here.  Nothing has been released with these changes yet (at least not AFAIK), so it's only hitting people trying to use head versions, which isn't many.
Comment 6 Joseph Myers 2012-03-06 20:57:45 UTC
GCC was fixed for 4.7.  glibc patch for GCC <= 4.6 pending review: http://sourceware.org/ml/libc-alpha/2012-03/msg00111.html
Comment 7 Joseph Myers 2012-03-09 22:10:35 UTC
Fixed, again, by removing the __USE_GNU conditional after further discussion on libc-alpha.