diff options
author | Clément Chigot <clement.chigot@atos.net> | 2021-05-06 16:08:15 +0200 |
---|---|---|
committer | Clément Chigot <clement.chigot@atos.net> | 2022-01-12 16:59:47 +0100 |
commit | 14e0d8329750776a1807626867f87dacc102f9ed (patch) | |
tree | 00e766cd37adf3fed25f88ea34bebfd9981aa488 /libcpp | |
parent | 75845d584f490c294d40908168e5721adc38145d (diff) | |
download | gcc-14e0d8329750776a1807626867f87dacc102f9ed.zip gcc-14e0d8329750776a1807626867f87dacc102f9ed.tar.gz gcc-14e0d8329750776a1807626867f87dacc102f9ed.tar.bz2 |
aix: handle 64bit inodes for include directories
On AIX, stat will store inodes in 32bit even when using LARGE_FILES.
If the inode is larger, it will return -1 in st_ino.
Thus, in incpath.c when comparing include directories, if several
of them have 64bit inodes, they will be considered as duplicated.
gcc/ChangeLog:
2022-01-12 Clément Chigot <clement.chigot@atos.net>
* configure.ac: Check sizeof ino_t and dev_t.
(HOST_STAT_FOR_64BIT_INODES): New AC_DEFINE to provide stat
syscall being able to handle 64bit inodes.
* config.in: Regenerate.
* configure: Regenerate.
* incpath.c (HOST_STAT_FOR_64BIT_INODES): New define.
(remove_duplicates): Use it.
libcpp/ChangeLog:
2022-01-12 Clément Chigot <clement.chigot@atos.net>
* configure.ac: Check sizeof ino_t and dev_t.
* config.in: Regenerate.
* configure: Regenerate.
* include/cpplib.h (INO_T_CPP): Change for AIX.
(DEV_T_CPP): New macro.
(struct cpp_dir): Use it.
Diffstat (limited to 'libcpp')
-rw-r--r-- | libcpp/config.in | 6 | ||||
-rwxr-xr-x | libcpp/configure | 67 | ||||
-rw-r--r-- | libcpp/configure.ac | 3 | ||||
-rw-r--r-- | libcpp/include/cpplib.h | 10 |
4 files changed, 85 insertions, 1 deletions
diff --git a/libcpp/config.in b/libcpp/config.in index 89aa6a1..9983aee 100644 --- a/libcpp/config.in +++ b/libcpp/config.in @@ -258,6 +258,12 @@ /* Define to the version of this package. */ #undef PACKAGE_VERSION +/* The size of `dev_t', as computed by sizeof. */ +#undef SIZEOF_DEV_T + +/* The size of `ino_t', as computed by sizeof. */ +#undef SIZEOF_INO_T + /* The size of `int', as computed by sizeof. */ #undef SIZEOF_INT diff --git a/libcpp/configure b/libcpp/configure index 2797292..7514539 100755 --- a/libcpp/configure +++ b/libcpp/configure @@ -6644,6 +6644,73 @@ $as_echo "#define HAVE_UCHAR 1" >>confdefs.h fi +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of ino_t" >&5 +$as_echo_n "checking size of ino_t... " >&6; } +if ${ac_cv_sizeof_ino_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (ino_t))" "ac_cv_sizeof_ino_t" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_ino_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (ino_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_ino_t=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_ino_t" >&5 +$as_echo "$ac_cv_sizeof_ino_t" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_INO_T $ac_cv_sizeof_ino_t +_ACEOF + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of dev_t" >&5 +$as_echo_n "checking size of dev_t... " >&6; } +if ${ac_cv_sizeof_dev_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (dev_t))" "ac_cv_sizeof_dev_t" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_dev_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (dev_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_dev_t=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_dev_t" >&5 +$as_echo "$ac_cv_sizeof_dev_t" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_DEV_T $ac_cv_sizeof_dev_t +_ACEOF + + + # g++ on Solaris 10+ defines _XOPEN_SOURCE=600, which exposes a different # iconv() prototype. ac_ext=cpp diff --git a/libcpp/configure.ac b/libcpp/configure.ac index bc2373c..9b60425 100644 --- a/libcpp/configure.ac +++ b/libcpp/configure.ac @@ -103,6 +103,9 @@ if test $ac_cv_type_uchar = yes; then [Define if <sys/types.h> defines \`uchar'.]) fi +AC_CHECK_SIZEOF(ino_t) +AC_CHECK_SIZEOF(dev_t) + # g++ on Solaris 10+ defines _XOPEN_SOURCE=600, which exposes a different # iconv() prototype. AC_LANG_PUSH([C++]) diff --git a/libcpp/include/cpplib.h b/libcpp/include/cpplib.h index cb7ec17..ebf6fcc 100644 --- a/libcpp/include/cpplib.h +++ b/libcpp/include/cpplib.h @@ -752,10 +752,18 @@ struct cpp_callbacks #ifdef VMS #define INO_T_CPP ino_t ino[3] +#elif defined (_AIX) && SIZEOF_INO_T == 4 +#define INO_T_CPP ino64_t ino #else #define INO_T_CPP ino_t ino #endif +#if defined (_AIX) && SIZEOF_DEV_T == 4 +#define DEV_T_CPP dev64_t dev +#else +#define DEV_T_CPP dev_t dev +#endif + /* Chain of directories to look for include files in. */ struct cpp_dir { @@ -790,7 +798,7 @@ struct cpp_dir /* The C front end uses these to recognize duplicated directories in the search path. */ INO_T_CPP; - dev_t dev; + DEV_T_CPP; }; /* The kind of the cpp_macro. */ |