libiberty/getopt.c file is defining _NO_PROTO which causes conflicting
 declarations for the functions in AIX header files like stdio.h & stdlib.h.
 These declarations are being considered as errors in C23 which wasn't
 the case with C17.

Here is the error we get.

/gcc_build/./prev-gcc/xgcc -B/gcc_build/./prev-gcc/ 
-B/home/sangam/install/GCC/powerpc-ibm-aix7.3.3.0/bin/ -B/home/sangam
/install/GCC/powerpc-ibm-aix7.3.3.0/bin/ 
-B/home/sangam/install/GCC/powerpc-ibm-aix7.3.3.0/lib/ -isystem /home/sangam/ins
tall/GCC/powerpc-ibm-aix7.3.3.0/include -isystem 
/home/sangam/install/GCC/powerpc-ibm-aix7.3.3.0/sys-include   -fno-check
ing -c -DHAVE_CONFIG_H -g -O2 -fno-checking  -I. 
-I/opt/freeware/src/packages/BUILD/gcc/libiberty/../include  -W -Wall -W
write-strings -Wc++-compat -Wstrict-prototypes -Wshadow=local -pedantic  
-D_GNU_SOURCE  /opt/freeware/src/packages/BUILD/
gcc/libiberty/getopt.c -o getopt.o


In file included from 
/opt/freeware/src/packages/BUILD/gcc/libiberty/getopt.c:45:
/gcc_build/prev-gcc/include-fixed/stdio.h:593:12: error: conflicting types for 
'fgetpos64'; have 'int(FILE *, fpos64_t *)
' {aka 'int(FILE *, long long int *)'}
  593 | extern int fgetpos64(FILE *, fpos64_t *);
      |            ^~~~~~~~~
/gcc_build/prev-gcc/include-fixed/stdio.h:298:17: note: previous declaration of 
'fgetpos64' with type 'int(void)'
  298 | extern int      fgetpos();
      |                 ^~~~~~~
/gcc_build/prev-gcc/include-fixed/stdio.h:594:14: error: conflicting types for 
'fopen64'; have 'FILE *(const char *, cons
t char *)'
  594 | extern FILE *fopen64(const char *, const char *);
      |              ^~~~~~~

/gcc_build/prev-gcc/include-fixed/stdio.h:259:17: note: previous declaration of 
'fopen64' with type 'FILE *(void)'
  259 | extern FILE *   fopen();
      |                 ^~~~~
/gcc_build/prev-gcc/include-fixed/stdio.h:595:14: error: conflicting types for 
'freopen64'; have 'FILE *(const char *, co
nst char *, FILE *)'
  595 | extern FILE *freopen64(const char *, const char *, FILE *);
      |              ^~~~~~~~~
/gcc_build/prev-gcc/include-fixed/stdio.h:260:17: note: previous declaration of 
'freopen64' with type 'FILE *(void)'
  260 | extern FILE *   freopen();
      |                 ^~~~~~~
/gcc_build/prev-gcc/include-fixed/stdio.h:597:12: error: conflicting types for 
'fsetpos64'; have 'int(FILE *, const fpos6
4_t *)' {aka 'int(FILE *, const long long int *)'}
  597 | extern int fsetpos64(FILE *, const fpos64_t *);
      |            ^~~~~~~~~
/gcc_build/prev-gcc/include-fixed/stdio.h:300:17: note: previous declaration of 
'fsetpos64' with type 'int(void)'
  300 | extern int      fsetpos();
      |                 ^~~~~~~
In file included from 
/opt/freeware/src/packages/BUILD/gcc/libiberty/getopt.c:216:
/gcc_build/prev-gcc/include-fixed/stdlib.h: In function 'strtold':
/gcc_build/prev-gcc/include-fixed/stdlib.h:233:30: error: too many arguments to 
function 'strtod'


Compiled with this patch on RHEL8.10 ppc64le as well.

---
 libiberty/getopt.c | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/libiberty/getopt.c b/libiberty/getopt.c
index 2f7086cc0c8..48736d4db41 100644
--- a/libiberty/getopt.c
+++ b/libiberty/getopt.c
@@ -23,12 +23,6 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
    USA.  */
 
-/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>.
-   Ditto for AIX 3.2 and <stdlib.h>.  */
-#ifndef _NO_PROTO
-# define _NO_PROTO
-#endif
-
 #ifdef HAVE_CONFIG_H
 # include <config.h>
 #endif
-- 
2.41.0

Reply via email to