RFC: PR target/40722: [4.5 Regression] ia32intrin.h defines of _rotl, _rotr conflict with target stdlib.h decls

Richard Guenther richard.guenther@gmail.com
Sat Mar 20 21:57:00 GMT 2010


On Sat, Mar 20, 2010 at 7:08 PM, H.J. Lu <hongjiu.lu@intel.com> wrote:
> On Sat, Mar 20, 2010 at 10:59:35AM -0700, H.J. Lu wrote:
>> Hi,
>>
>> stdlib.h on mingw defines some new gcc 4.5 intrinsics as normal functions.
>> We can either disable gcc intrinsics on mingw or fix stdlib.h on mingw.
>> But fixincludes isn't run on mingw. Here is a hack to fix stdlib.h
>> mingw.
>>
>>
>> H.J.
>> ---
>> 2010-03-20  H.J. Lu  <hongjiu.lu@intel.com>
>>
>>       PR target/40722
>>       * mkfixinc.sh: Fix stdlib.h for mingw.
>>
>
>
> Of course, we need to include <x86intrin.h> for gcc 4.5 and above.
> Otherwise, those functions won't be available in <stdlib.h>.

Hm.  It makes more sense to disable gcc intrinsics, otherwise you'd
get different behavior when compiling with different GCC versions.

Richard.

>
> H.J.
> 2010-03-20  H.J. Lu  <hongjiu.lu@intel.com>
>
>        PR target/40722
>        * mkfixinc.sh: Fix stdlib.h for mingw.
>
> diff --git a/fixincludes/mkfixinc.sh b/fixincludes/mkfixinc.sh
> index b45f179..c353d89 100755
> --- a/fixincludes/mkfixinc.sh
> +++ b/fixincludes/mkfixinc.sh
> @@ -15,8 +15,6 @@ case $machine in
>     i?86-moss-msdos* | \
>     i?86-*-pe | \
>     i?86-*-cygwin* | \
> -    i?86-*-mingw32* | \
> -    x86_64-*-mingw32* | \
>     i?86-*-interix* | \
>     *-*-vxworks* | \
>     powerpc-*-eabisim* | \
> @@ -29,6 +27,51 @@ case $machine in
>        (echo "#! /bin/sh" ; echo "exit 0" ) > ${target}
>         ;;
>
> +    i?86-*-mingw32* | \
> +    x86_64-*-mingw32*)
> +        # We only want to fix stdlib.h in mingw.
> +       # FIXME: Is SED available on mingw?
> +       (cat > ${target} << EOF
> +#! /bin/sh
> +
> +OUTPUT_DIR=\$1
> +if [ "x\$OUTPUT_DIR" = "x" ]; then
> +  echo fixincludes: no output directory specified
> +  exit 1
> +fi
> +
> +if [ ! -d \$OUTPUT_DIR ]; then
> +  echo fixincludes: output dir \"\$OUTPUT_DIR\" is an invalid directory
> +  exit 1
> +fi
> +
> +INPUT_DIR=\$2
> +if [ "x\$INPUT_DIR" = "x" ]; then
> +  echo fixincludes: no input directory specified
> +  exit 1
> +fi
> +
> +if [ ! -d \$INPUT_DIR ]; then
> +  echo fixincludes: input dir \"\$INPUT_DIR\" is an invalid directory
> +  exit 1
> +fi
> +
> +INPUT_STDLIB_H=\$INPUT_DIR/stdlib.h
> +if [ ! -f \$INPUT_STDLIB_H ]; then
> +  echo fixincludes: \"stdlib.h\" is an invalid file
> +  exit 1
> +fi
> +
> +OUTPUT_STDLIB_H=\$OUTPUT_DIR/stdlib.h
> +sed -e "s/\(.*_rotl.*\)/#if __GNUC__ < 4 || (__GNUC__ == 4 \&\& __GNUC_MINOR__ < 5)\n\1/" \
> +    -e "s/\(.*_lrotr.*\)/\1\n#else\n\#include <x86intrin.h>\n#endif/" \
> +   \$INPUT_STDLIB_H > \$OUTPUT_STDLIB_H
> +
> +exit 0
> +EOF
> +)
> +        ;;
> +
>     *)
>        cat < ${srcdir}/fixinc.in > ${target} || exit 1
>        ;;
>



More information about the Gcc-patches mailing list