This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


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
 	;;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]