This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
RFC: PR target/40722: [4.5 Regression] ia32intrin.h defines of _rotl, _rotr conflict with target stdlib.h decls
- From: "H.J. Lu" <hongjiu dot lu at intel dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Sat, 20 Mar 2010 10:59:35 -0700
- Subject: RFC: PR target/40722: [4.5 Regression] ia32intrin.h defines of _rotl, _rotr conflict with target stdlib.h decls
- Reply-to: "H.J. Lu" <hjl dot tools at gmail dot com>
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.
diff --git a/fixincludes/mkfixinc.sh b/fixincludes/mkfixinc.sh
index b45f179..30932d0 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#endif/" \
+ \$INPUT_STDLIB_H > \$OUTPUT_STDLIB_H
+
+exit 0
+EOF
+)
+ ;;
+
*)
cat < ${srcdir}/fixinc.in > ${target} || exit 1
;;