This removes the need_64bit_hwi logic, nothing else (well, brings libcpp in line with gcc).
Bootstrap / regtest pending on x86_64-unknown-linux-gnu. Just as I promised to send this before committing the "let's try this" patch (which is now said to fix wide-int fallout). Richard. 2014-05-07 Richard Biener <rguent...@suse.de> gcc/ * config.gcc: Remove need_64bit_hwint. * configure.ac: Do not define NEED_64BIT_HOST_WIDE_INT. * hwint.h: Do not check NEED_64BIT_HOST_WIDE_INT but assume it to be true. * config.in: Regenerate. * configure: Likewise. libcpp/ * configure.ac: Copy gcc logic of detecting a 64bit type. Remove HOST_WIDE_INT define. * include/cpplib.h: typedef cpp_num_part to a 64bit type, similar to how hwint.h does it. * config.in: Regenerate. * configure: Likewise. Index: trunk/gcc/config.gcc =================================================================== *** trunk.orig/gcc/config.gcc 2014-04-30 10:16:58.491135331 +0200 --- trunk/gcc/config.gcc 2014-04-30 10:24:43.902103288 +0200 *************** *** 164,176 **** # gas Set to yes or no depending on whether the target # system normally uses GNU as. # - # need_64bit_hwint Set to yes if HOST_WIDE_INT must be 64 bits wide - # for this target. This is true if this target - # supports "long" or "wchar_t" wider than 32 bits, - # or BITS_PER_WORD is wider than 32 bits. - # The setting made here must match the one made in - # other locations such as libcpp/configure.ac - # # configure_default_options # Set to an initializer for configure_default_options # in configargs.h, based on --with-cpu et cetera. --- 164,169 ---- *************** gnu_ld="$gnu_ld_flag" *** 233,239 **** default_use_cxa_atexit=no default_gnu_indirect_function=no target_gtfiles= - need_64bit_hwint=yes need_64bit_isa= native_system_header_dir=/usr/include target_type_format_char='@' --- 226,231 ---- *************** m32c*-*-*) *** 310,323 **** ;; aarch64*-*-*) cpu_type=aarch64 - need_64bit_hwint=yes extra_headers="arm_neon.h" extra_objs="aarch64-builtins.o aarch-common.o" target_has_targetm_common=yes ;; alpha*-*-*) cpu_type=alpha - need_64bit_hwint=yes extra_options="${extra_options} g.opt" ;; am33_2.0-*-linux*) --- 302,313 ---- *************** arm*-*-*) *** 333,339 **** target_type_format_char='%' c_target_objs="arm-c.o" cxx_target_objs="arm-c.o" - need_64bit_hwint=yes extra_options="${extra_options} arm/arm-tables.opt" ;; avr-*-*) --- 323,328 ---- *************** i[34567]86-*-*) *** 363,369 **** cpu_type=i386 c_target_objs="i386-c.o" cxx_target_objs="i386-c.o" - need_64bit_hwint=yes extra_options="${extra_options} fused-madd.opt" extra_headers="cpuid.h mmintrin.h mm3dnow.h xmmintrin.h emmintrin.h pmmintrin.h tmmintrin.h ammintrin.h smmintrin.h --- 352,357 ---- *************** x86_64-*-*) *** 393,403 **** adxintrin.h fxsrintrin.h xsaveintrin.h xsaveoptintrin.h avx512cdintrin.h avx512erintrin.h avx512pfintrin.h shaintrin.h" - need_64bit_hwint=yes ;; ia64-*-*) extra_headers=ia64intrin.h - need_64bit_hwint=yes extra_options="${extra_options} g.opt fused-madd.opt" ;; hppa*-*-*) --- 381,389 ---- *************** microblaze*-*-*) *** 420,426 **** ;; mips*-*-*) cpu_type=mips - need_64bit_hwint=yes extra_headers="loongson.h" extra_options="${extra_options} g.opt mips/mips-tables.opt" ;; --- 406,411 ---- *************** picochip-*-*) *** 438,444 **** powerpc*-*-*) cpu_type=rs6000 extra_headers="ppc-asm.h altivec.h spe.h ppu_intrinsics.h paired.h spu2vmx.h vec_types.h si2vmx.h htmintrin.h htmxlintrin.h" - need_64bit_hwint=yes case x$with_cpu in xpowerpc64|xdefault64|x6[23]0|x970|xG5|xpower[345678]|xpower6x|xrs64a|xcell|xa2|xe500mc64|xe5500|Xe6500) cpu_is_64bit=yes --- 423,428 ---- *************** powerpc*-*-*) *** 447,453 **** extra_options="${extra_options} g.opt fused-madd.opt rs6000/rs6000-tables.opt" ;; rs6000*-*-*) - need_64bit_hwint=yes extra_options="${extra_options} g.opt fused-madd.opt rs6000/rs6000-tables.opt" ;; score*-*-*) --- 431,436 ---- *************** sparc*-*-*) *** 459,480 **** c_target_objs="sparc-c.o" cxx_target_objs="sparc-c.o" extra_headers="visintrin.h" - need_64bit_hwint=yes ;; spu*-*-*) cpu_type=spu - need_64bit_hwint=yes ;; s390*-*-*) cpu_type=s390 - need_64bit_hwint=yes extra_options="${extra_options} fused-madd.opt" extra_headers="s390intrin.h htmintrin.h htmxlintrin.h" ;; # Note the 'l'; we need to be able to match e.g. "shle" or "shl". sh[123456789lbe]*-*-* | sh-*-*) cpu_type=sh - need_64bit_hwint=yes extra_options="${extra_options} fused-madd.opt" extra_objs="${extra_objs} sh_treg_combine.o sh-mem.o sh_optimize_sett_clrt.o" ;; --- 442,459 ---- *************** xtensa*-*-*) *** 491,501 **** ;; tilegx*-*-*) cpu_type=tilegx - need_64bit_hwint=yes ;; tilepro*-*-*) cpu_type=tilepro - need_64bit_hwint=yes ;; esac --- 470,478 ---- *************** case ${target} in *** 683,689 **** *) default_use_cxa_atexit=yes;; esac - # need_64bit_hwint=yes # system compiler has this for all arch! use_gcc_stdint=wrap ;; *-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu | *-*-gnu* | *-*-kopensolaris*-gnu) --- 660,665 ---- *************** hppa*64*-*-linux*) *** 1183,1189 **** glibc-stdint.h pa/pa-linux.h pa/pa64-regs.h pa/pa-64.h \ pa/pa64-linux.h" gas=yes gnu_ld=yes - need_64bit_hwint=yes ;; hppa*-*-linux*) target_cpu_default="MASK_PA_11|MASK_NO_SPACE_REGS" --- 1159,1164 ---- *************** hppa*64*-*-hpux11*) *** 1258,1264 **** esac extra_options="${extra_options} pa/pa-hpux.opt \ pa/pa-hpux1010.opt pa/pa64-hpux.opt hpux11.opt" - need_64bit_hwint=yes tmake_file="t-slibgcc" case x${enable_threads} in x | xyes | xposix ) --- 1233,1238 ---- *************** mipstx39-*-elf* | mipstx39el-*-elf*) *** 2092,2098 **** ;; mmix-knuth-mmixware) tm_file="${tm_file} newlib-stdint.h" - need_64bit_hwint=yes use_gcc_stdint=wrap ;; mn10300-*-*) --- 2066,2071 ---- Index: trunk/gcc/config.in =================================================================== *** trunk.orig/gcc/config.in 2014-04-28 11:53:47.560632455 +0200 --- trunk/gcc/config.in 2014-04-30 10:26:38.000000000 +0200 *************** *** 1729,1740 **** #endif - /* Define to 1 if HOST_WIDE_INT must be 64 bits wide (see hwint.h). */ - #ifndef USED_FOR_TARGET - #undef NEED_64BIT_HOST_WIDE_INT - #endif - - /* Define to the address where bug reports for this package should be sent. */ #ifndef USED_FOR_TARGET #undef PACKAGE_BUGREPORT --- 1729,1734 ---- Index: trunk/gcc/configure =================================================================== *** trunk.orig/gcc/configure 2014-04-28 13:26:42.395248635 +0200 --- trunk/gcc/configure 2014-04-30 10:26:36.287095551 +0200 *************** else *** 11150,11161 **** done fi - if test x$need_64bit_hwint = xyes; then - - $as_echo "#define NEED_64BIT_HOST_WIDE_INT 1" >>confdefs.h - - fi - if test x$use_long_long_for_widest_fast_int = xyes; then $as_echo "#define USE_LONG_LONG_FOR_WIDEST_FAST_INT 1" >>confdefs.h --- 11150,11155 ---- *************** else *** 17994,18000 **** lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF ! #line 17997 "configure" #include "confdefs.h" #if HAVE_DLFCN_H --- 17988,17994 ---- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF ! #line 17991 "configure" #include "confdefs.h" #if HAVE_DLFCN_H *************** else *** 18100,18106 **** lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF ! #line 18103 "configure" #include "confdefs.h" #if HAVE_DLFCN_H --- 18094,18100 ---- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF ! #line 18097 "configure" #include "confdefs.h" #if HAVE_DLFCN_H Index: trunk/gcc/configure.ac =================================================================== *** trunk.orig/gcc/configure.ac 2014-04-28 13:26:42.397248634 +0200 --- trunk/gcc/configure.ac 2014-04-30 10:54:47.723979097 +0200 *************** else *** 1372,1382 **** done fi - if test x$need_64bit_hwint = xyes; then - AC_DEFINE(NEED_64BIT_HOST_WIDE_INT, 1, - [Define to 1 if HOST_WIDE_INT must be 64 bits wide (see hwint.h).]) - fi - if test x$use_long_long_for_widest_fast_int = xyes; then AC_DEFINE(USE_LONG_LONG_FOR_WIDEST_FAST_INT, 1, [Define to 1 if the 'long long' (or '__int64') is wider than 'long' but still --- 1372,1377 ---- Index: trunk/gcc/hwint.h =================================================================== *** trunk.orig/gcc/hwint.h 2014-01-07 10:20:15.790453288 +0100 --- trunk/gcc/hwint.h 2014-04-30 10:27:31.640091740 +0200 *************** extern char sizeof_long_long_must_be_8[s *** 56,62 **** Thus, we use that unless we have to use 'long long' or '__int64' because we're targeting a 64-bit machine from a 32-bit host. */ ! #if HOST_BITS_PER_LONG >= 64 || !defined NEED_64BIT_HOST_WIDE_INT # define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_LONG # define HOST_WIDE_INT long # define HOST_WIDE_INT_C(X) X ## L --- 56,62 ---- Thus, we use that unless we have to use 'long long' or '__int64' because we're targeting a 64-bit machine from a 32-bit host. */ ! #if HOST_BITS_PER_LONG >= 64 # define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_LONG # define HOST_WIDE_INT long # define HOST_WIDE_INT_C(X) X ## L Index: trunk/libcpp/config.in =================================================================== *** trunk.orig/libcpp/config.in 2013-03-01 12:05:05.628540226 +0100 --- trunk/libcpp/config.in 2014-04-30 11:09:46.000000000 +0200 *************** *** 180,185 **** --- 180,188 ---- /* Define to 1 if you have the <locale.h> header file. */ #undef HAVE_LOCALE_H + /* Define to 1 if the system has the type `long long'. */ + #undef HAVE_LONG_LONG + /* Define to 1 if you have the <memory.h> header file. */ #undef HAVE_MEMORY_H *************** *** 228,236 **** /* Define to 1 if you have the <unistd.h> header file. */ #undef HAVE_UNISTD_H ! /* Define to the widest efficient host integer type at least as wide as the ! target's size_t type. */ ! #undef HOST_WIDE_INT /* Define as const if the declaration of iconv() needs const. */ #undef ICONV_CONST --- 231,238 ---- /* Define to 1 if you have the <unistd.h> header file. */ #undef HAVE_UNISTD_H ! /* Define to 1 if the system has the type `__int64'. */ ! #undef HAVE___INT64 /* Define as const if the declaration of iconv() needs const. */ #undef ICONV_CONST *************** *** 262,267 **** --- 264,275 ---- /* The size of `long', as computed by sizeof. */ #undef SIZEOF_LONG + /* The size of `long long', as computed by sizeof. */ + #undef SIZEOF_LONG_LONG + + /* The size of `__int64', as computed by sizeof. */ + #undef SIZEOF___INT64 + /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. Index: trunk/libcpp/configure =================================================================== *** trunk.orig/libcpp/configure 2014-02-24 17:40:11.060711433 +0100 --- trunk/libcpp/configure 2014-04-30 11:09:43.683917411 +0200 *************** _ACEOF *** 5566,5571 **** --- 5566,5657 ---- fi + ac_fn_c_check_type "$LINENO" "long long" "ac_cv_type_long_long" "$ac_includes_default" + if test "x$ac_cv_type_long_long" = x""yes; then : + + cat >>confdefs.h <<_ACEOF + #define HAVE_LONG_LONG 1 + _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 long long" >&5 + $as_echo_n "checking size of long long... " >&6; } + if test "${ac_cv_sizeof_long_long+set}" = set; then : + $as_echo_n "(cached) " >&6 + else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then : + + else + if test "$ac_cv_type_long_long" = 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_set_status 77 + as_fn_error "cannot compute sizeof (long long) + See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_long_long=0 + fi + fi + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 + $as_echo "$ac_cv_sizeof_long_long" >&6; } + + + + cat >>confdefs.h <<_ACEOF + #define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long + _ACEOF + + + fi + + ac_fn_c_check_type "$LINENO" "__int64" "ac_cv_type___int64" "$ac_includes_default" + if test "x$ac_cv_type___int64" = x""yes; then : + + cat >>confdefs.h <<_ACEOF + #define HAVE___INT64 1 + _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 __int64" >&5 + $as_echo_n "checking size of __int64... " >&6; } + if test "${ac_cv_sizeof___int64+set}" = set; then : + $as_echo_n "(cached) " >&6 + else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (__int64))" "ac_cv_sizeof___int64" "$ac_includes_default"; then : + + else + if test "$ac_cv_type___int64" = 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_set_status 77 + as_fn_error "cannot compute sizeof (__int64) + See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof___int64=0 + fi + fi + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof___int64" >&5 + $as_echo "$ac_cv_sizeof___int64" >&6; } + + + + cat >>confdefs.h <<_ACEOF + #define SIZEOF___INT64 $ac_cv_sizeof___int64 + _ACEOF + + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 $as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } if test "${ac_cv_struct_tm+set}" = set; then : *************** $as_echo "#define ENABLE_CANONICAL_SYSTE *** 7151,7191 **** fi - - case $target in - aarch64*-*-* | \ - alpha*-*-* | \ - arm*-*-* | \ - x86_64-*-* | \ - ia64-*-* | \ - hppa*64*-*-* | \ - i[34567]86-*-* | x86_64-*-solaris2.1[0-9]* | \ - mips*-*-* | \ - mmix-*-* | \ - powerpc*-*-* | \ - rs6000*-*-* | \ - s390*-*-* | \ - sparc*-*-* | \ - spu-*-* | \ - sh[123456789lbe]*-*-* | sh-*-* | \ - tilegx*-*-* | tilepro*-*-* ) - need_64bit_hwint=yes ;; - *) - need_64bit_hwint=no ;; - esac - - case $need_64bit_hwint:$ac_cv_sizeof_long in - *:8 | no:*) host_wide_int=long ;; - *) host_wide_int='long long' ;; - esac - - - - cat >>confdefs.h <<_ACEOF - #define HOST_WIDE_INT $host_wide_int - _ACEOF - - case $target in i?86-* | x86_64-*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext --- 7237,7242 ---- Index: trunk/libcpp/configure.ac =================================================================== *** trunk.orig/libcpp/configure.ac 2014-04-30 10:16:58.480135332 +0200 --- trunk/libcpp/configure.ac 2014-04-30 10:56:21.677972629 +0200 *************** AC_TYPE_SIZE_T *** 64,69 **** --- 64,71 ---- AC_TYPE_SSIZE_T AC_TYPE_UINTPTR_T AC_CHECK_TYPE(ptrdiff_t, int) + AC_CHECK_TYPES([long long], [AC_CHECK_SIZEOF(long long)]) + AC_CHECK_TYPES([__int64], [AC_CHECK_SIZEOF(__int64)]) AC_STRUCT_TM AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(long) *************** if test $enable_canonical_system_headers *** 180,218 **** 1, [Define to enable system headers canonicalization.]) fi - m4_changequote(,) - case $target in - aarch64*-*-* | \ - alpha*-*-* | \ - arm*-*-* | \ - x86_64-*-* | \ - ia64-*-* | \ - hppa*64*-*-* | \ - i[34567]86-*-* | x86_64-*-solaris2.1[0-9]* | \ - mips*-*-* | \ - mmix-*-* | \ - powerpc*-*-* | \ - rs6000*-*-* | \ - s390*-*-* | \ - sparc*-*-* | \ - spu-*-* | \ - sh[123456789lbe]*-*-* | sh-*-* | \ - tilegx*-*-* | tilepro*-*-* ) - need_64bit_hwint=yes ;; - *) - need_64bit_hwint=yes ;; - esac - - case $need_64bit_hwint:$ac_cv_sizeof_long in - *:8 | no:*) host_wide_int=long ;; - *) host_wide_int='long long' ;; - esac - m4_changequote([,]) - - AC_DEFINE_UNQUOTED(HOST_WIDE_INT, $host_wide_int, - [Define to the widest efficient host integer type at least - as wide as the target's size_t type.]) - case $target in i?86-* | x86_64-*) AC_TRY_COMPILE([], [asm ("pcmpestri %0, %%xmm0, %%xmm1" : : "i"(0))], --- 182,187 ---- Index: trunk/libcpp/include/cpplib.h =================================================================== *** trunk.orig/libcpp/include/cpplib.h 2014-01-07 10:20:27.942452756 +0100 --- trunk/libcpp/include/cpplib.h 2014-04-30 11:09:27.230918544 +0200 *************** extern int cpp_defined (cpp_reader *, co *** 819,825 **** /* A preprocessing number. Code assumes that any unused high bits of the double integer are set to zero. */ ! typedef unsigned HOST_WIDE_INT cpp_num_part; typedef struct cpp_num cpp_num; struct cpp_num { --- 819,842 ---- /* A preprocessing number. Code assumes that any unused high bits of the double integer are set to zero. */ ! ! /* Find a type with at least 64bit precision, mimicking hwint.h. ! This type has to be equal to unsigned HOST_WIDE_INT, see ! gcc/c-family/c-lex.c. */ ! #if SIZEOF_LONG >= 8 ! typedef unsigned long cpp_num_part; ! #else ! # if SIZEOF_LONG_LONG >= 8 ! typedef unsigned long long cpp_num_part; ! # else ! # if SIZEOF___INT64 >= 8 ! typedef unsigned __int64 cpp_num_part; ! # else ! #error "This line should be impossible to reach" ! # endif ! # endif ! #endif ! typedef struct cpp_num cpp_num; struct cpp_num {