Bug 27854

Summary: g++ < 4.3 doesn't compile unistd.h with -O2 -pedantic
Product: Sisyphus Reporter: Ivan A. Melnikov <iv>
Component: glibc-develAssignee: placeholder <placeholder>
Status: CLOSED WONTFIX QA Contact: qa-sisyphus
Severity: normal    
Priority: P3 CC: glebfm, ldv, placeholder
Version: unstable   
Hardware: all   
OS: Linux   

Description Ivan A. Melnikov 2012-10-16 08:59:20 MSK
Простой пример:

$ cat a.cpp
#include <unistd.h>

int main() { return 0; }

$ g++-4.1 -O2 -pedantic a.cpp
/usr/include/bits/unistd.h: In function ‘int gethostname(char*, size_t)’:
/usr/include/bits/unistd.h:344: error: declaration of ‘int gethostname(char*, size_t) throw ()’ throws different exceptions
/usr/include/unistd.h:901: error: from previous declaration ‘int gethostname(char*, size_t)’
/usr/include/bits/unistd.h: In function ‘int getdomainname(char*, size_t)’:
/usr/include/bits/unistd.h:373: error: declaration of ‘int getdomainname(char*, size_t) throw ()’ throws different exceptions
/usr/include/unistd.h:920: error: from previous declaration ‘int getdomainname(char*, size_t)’

Если убрать -O2 или -pedantic -- работает.

Обнаружил при попытке разобраться, что же случилось с libncursesxx:

http://lists.altlinux.org/pipermail/devel/2012-October/195599.html

$ rpm -qf /usr/include/unistd.h
glibc-devel-2.16-alt4
$ rpm -qf `which g++-4.1`
gcc4.1-c++-4.1.2-alt11
Comment 1 Dmitry V. Levin 2012-10-16 15:23:30 MSK
Не знаю, на что более корректно это повесить, наверное, на glibc-devel.
В g++ >= 4.3 это работает, а фиксить поддержку -O2 -pedantic в старых компиляторах -- это маловероятно.

см. тж. http://sourceware.org/bugzilla/show_bug.cgi?id=14530 и http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b7bfe116e6304da848759b69a6d713da3e93e936
Comment 2 Dmitry V. Levin 2017-10-28 04:35:28 MSK
g++ < 4.3 is irrelevant.