[csw-users] Unable to compile spawn.h using G++ 4.6.3
Dmitri Shubin
sbn at tbricks.com
Tue Apr 24 18:05:19 CEST 2012
Hello!
I got another problem with GCC 4.6.3 -- I cannot compile files that
includes /usr/include/spawn.h in C++ mode:
$ cat a.cpp
#include <spawn.h>
$ /opt/csw/gcc4/bin/g++ -c a.cpp
In file included from a.cpp:1:0:
/usr/include/spawn.h:42:14: error: expected ',' or '...' before 'argv'
/usr/include/spawn.h:50:14: error: expected ',' or '...' before 'argv'
$ cat -n /usr/include/spawn.h
...
35 #if defined(__STDC__)
36
37 extern int posix_spawn(
38 pid_t *_RESTRICT_KYWD pid,
39 const char *_RESTRICT_KYWD path,
40 const posix_spawn_file_actions_t *file_actions,
41 const posix_spawnattr_t *_RESTRICT_KYWD attrp,
42 char *const argv[_RESTRICT_KYWD],
43 char *const envp[_RESTRICT_KYWD]);
44
45 extern int posix_spawnp(
46 pid_t *_RESTRICT_KYWD pid,
47 const char *_RESTRICT_KYWD file,
48 const posix_spawn_file_actions_t *file_actions,
49 const posix_spawnattr_t *_RESTRICT_KYWD attrp,
50 char *const argv[_RESTRICT_KYWD],
51 char *const envp[_RESTRICT_KYWD]);
...
When preprocessed this file:
$ /opt/csw/gcc4/bin/g++ -E a.cpp
...
extern int posix_spawn(
pid_t *__restrict pid,
const char *__restrict path,
const posix_spawn_file_actions_t *file_actions,
const posix_spawnattr_t *__restrict attrp,
char *const argv[__restrict], // <-----------
SBN: line 42 of /usr/include/spawn.h
char *const envp[__restrict]);
So looks like GCC don't understand __restrice keyword in array-brackets.
$ uname -a
SunOS rock1 5.10 Generic_147441-15 i86pc i386 i86pc
$ cat /etc/release
Oracle Solaris 10 8/11 s10x_u10wos_17b X86
Copyright (c) 1983, 2011, Oracle and/or its affiliates. All rights
reserved.
Assembled 23 August 2011
GCC 4.5.1 from Blastwave successfully compiled this file.
The difference is that _RESTRICT_KYWD expanded in it to empty string.
AFAIU this is due to GCC 4.6.3 defines __STDC_VERSION__ macro to 199901L
in C++ mode
$ /opt/csw/gcc4/bin/gcc -x c++ -dM -E - </dev/null | grep STDC
#define __STDC_HOSTED__ 1
#define __STDC_VERSION__ 199901L
There is no such definition for 4.5.1
Any suggestions?
Thanks!
More information about the users
mailing list