Index: BOOK/cross-tools/alpha/gcc-final.xml
===================================================================
--- BOOK/cross-tools/alpha/gcc-final.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/cross-tools/alpha/gcc-final.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -22,4 +22,12 @@
   <sect2 role="installation">
     <title>Installation of GCC Cross Compiler</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/cross-tools/alpha/gcc-static.xml
===================================================================
--- BOOK/cross-tools/alpha/gcc-static.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/cross-tools/alpha/gcc-static.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -23,4 +23,12 @@
     <title>Installation of Cross GCC Compiler with Static libgcc
     and no Threads</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/cross-tools/common/gcc-final.xml
===================================================================
--- BOOK/cross-tools/common/gcc-final.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/cross-tools/common/gcc-final.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -22,4 +22,12 @@
   <sect2 role="installation">
     <title>Installation of GCC Cross Compiler</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/cross-tools/common/gcc-static.xml
===================================================================
--- BOOK/cross-tools/common/gcc-static.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/cross-tools/common/gcc-static.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -23,4 +23,12 @@
     <title>Installation of Cross GCC Compiler with Static libgcc
     and no Threads</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../../final-system/common/gcc.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../../final-system/common/gcc.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <para os="aa">Make a couple of essential adjustments to the specs file
Index: BOOK/cross-tools/mips/gcc-final.xml
===================================================================
--- BOOK/cross-tools/mips/gcc-final.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/cross-tools/mips/gcc-final.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -22,4 +22,12 @@
   <sect2 role="installation">
     <title>Installation of GCC Cross Compiler</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/cross-tools/mips/gcc-static.xml
===================================================================
--- BOOK/cross-tools/mips/gcc-static.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/cross-tools/mips/gcc-static.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -23,4 +23,12 @@
     <title>Installation of Cross GCC Compiler with Static libgcc
     and no Threads</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/cross-tools/mips64-64/gcc-final.xml
===================================================================
--- BOOK/cross-tools/mips64-64/gcc-final.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/cross-tools/mips64-64/gcc-final.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -22,4 +22,12 @@
   <sect2 role="installation">
     <title>Installation of GCC Cross Compiler</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/cross-tools/mips64-64/gcc-static.xml
===================================================================
--- BOOK/cross-tools/mips64-64/gcc-static.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/cross-tools/mips64-64/gcc-static.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -23,4 +23,12 @@
     <title>Installation of Cross GCC Compiler with Static libgcc
     and no Threads</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../x86_64-64/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/cross-tools/mips64/gcc-final.xml
===================================================================
--- BOOK/cross-tools/mips64/gcc-final.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/cross-tools/mips64/gcc-final.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -22,4 +22,12 @@
   <sect2 role="installation">
     <title>Installation of GCC Cross Compiler</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/cross-tools/mips64/gcc-static.xml
===================================================================
--- BOOK/cross-tools/mips64/gcc-static.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/cross-tools/mips64/gcc-static.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -23,4 +23,12 @@
     <title>Installation of Cross GCC Compiler with Static libgcc
     and no Threads</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/cross-tools/ppc/gcc-final.xml
===================================================================
--- BOOK/cross-tools/ppc/gcc-final.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/cross-tools/ppc/gcc-final.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -22,4 +22,12 @@
   <sect2 role="installation">
     <title>Installation of GCC Cross Compiler</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/cross-tools/ppc/gcc-static.xml
===================================================================
--- BOOK/cross-tools/ppc/gcc-static.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/cross-tools/ppc/gcc-static.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -23,4 +23,12 @@
     <title>Installation of Cross GCC Compiler with Static libgcc
     and no Threads</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/cross-tools/ppc64/gcc-final.xml
===================================================================
--- BOOK/cross-tools/ppc64/gcc-final.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/cross-tools/ppc64/gcc-final.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -22,4 +22,12 @@
   <sect2 role="installation">
     <title>Installation of GCC Cross Compiler</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/cross-tools/ppc64/gcc-static.xml
===================================================================
--- BOOK/cross-tools/ppc64/gcc-static.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/cross-tools/ppc64/gcc-static.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -23,4 +23,12 @@
     <title>Installation of Cross GCC Compiler with Static libgcc
     and no Threads</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/cross-tools/sparc/gcc-final.xml
===================================================================
--- BOOK/cross-tools/sparc/gcc-final.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/cross-tools/sparc/gcc-final.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -22,4 +22,12 @@
   <sect2 role="installation">
     <title>Installation of GCC Cross Compiler</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/cross-tools/sparc/gcc-static.xml
===================================================================
--- BOOK/cross-tools/sparc/gcc-static.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/cross-tools/sparc/gcc-static.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -23,4 +23,12 @@
     <title>Installation of Cross GCC Compiler with Static libgcc
     and no Threads</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/cross-tools/sparc64-64/gcc-final.xml
===================================================================
--- BOOK/cross-tools/sparc64-64/gcc-final.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/cross-tools/sparc64-64/gcc-final.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -22,4 +22,12 @@
   <sect2 role="installation">
     <title>Installation of GCC Cross Compiler</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/cross-tools/sparc64-64/gcc-static.xml
===================================================================
--- BOOK/cross-tools/sparc64-64/gcc-static.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/cross-tools/sparc64-64/gcc-static.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -23,4 +23,12 @@
     <title>Installation of Cross GCC Compiler with Static libgcc
     and no Threads</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../x86_64-64/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/cross-tools/sparc64/gcc-final.xml
===================================================================
--- BOOK/cross-tools/sparc64/gcc-final.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/cross-tools/sparc64/gcc-final.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -22,4 +22,12 @@
   <sect2 role="installation">
     <title>Installation of GCC Cross Compiler</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/cross-tools/sparc64/gcc-static.xml
===================================================================
--- BOOK/cross-tools/sparc64/gcc-static.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/cross-tools/sparc64/gcc-static.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -23,4 +23,12 @@
     <title>Installation of Cross GCC Compiler with Static libgcc
     and no Threads</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/cross-tools/x86_64-64/gcc-final.xml
===================================================================
--- BOOK/cross-tools/x86_64-64/gcc-final.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/cross-tools/x86_64-64/gcc-final.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -22,4 +22,12 @@
   <sect2 role="installation">
     <title>Installation of GCC Cross Compiler</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/cross-tools/x86_64-64/gcc-static.xml
===================================================================
--- BOOK/cross-tools/x86_64-64/gcc-static.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/cross-tools/x86_64-64/gcc-static.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -23,4 +23,12 @@
     <title>Installation of Cross GCC Compiler with Static libgcc
     and no Threads</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/cross-tools/x86_64/gcc-final.xml
===================================================================
--- BOOK/cross-tools/x86_64/gcc-final.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/cross-tools/x86_64/gcc-final.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -22,4 +22,12 @@
   <sect2 role="installation">
     <title>Installation of GCC Cross Compiler</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/cross-tools/x86_64/gcc-static.xml
===================================================================
--- BOOK/cross-tools/x86_64/gcc-static.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/cross-tools/x86_64/gcc-static.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -23,4 +23,12 @@
     <title>Installation of Cross GCC Compiler with Static libgcc
     and no Threads</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/final-system/64/gcc.xml
===================================================================
--- BOOK/final-system/64/gcc.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/final-system/64/gcc.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -21,4 +21,12 @@
   <sect2 role="installation">
     <title>Installation of GCC</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <para os="p5">Apply the following patch so that GCC links to /lib
Index: BOOK/final-system/common/gcc.xml
===================================================================
--- BOOK/final-system/common/gcc.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/final-system/common/gcc.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -25,4 +25,9 @@
   <sect2 role="installation">
     <title>Installation of GCC</title>
+
+    <para os="p1">The following patch contains a number of updates to the
+    &gcc-version; branch by the GCC developers:</para>
+
+<screen os="p2"><userinput>patch -Np1 -i ../&gcc-branch_update-patch;</userinput></screen>
 
     <para os="d">Apply a <command>sed</command> substitution that will suppress the
Index: BOOK/final-system/mips64-64/gcc.xml
===================================================================
--- BOOK/final-system/mips64-64/gcc.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/final-system/mips64-64/gcc.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -21,4 +21,12 @@
   <sect2 role="installation">
     <title>Installation of GCC</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/final-system/mips64/gcc.xml
===================================================================
--- BOOK/final-system/mips64/gcc.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/final-system/mips64/gcc.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -21,4 +21,12 @@
   <sect2 role="installation">
     <title>Installation of GCC</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/final-system/multilib/gcc.xml
===================================================================
--- BOOK/final-system/multilib/gcc.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/final-system/multilib/gcc.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -21,4 +21,12 @@
   <sect2 role="installation">
     <title>Installation of GCC</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/final-system/ppc64/gcc.xml
===================================================================
--- BOOK/final-system/ppc64/gcc.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/final-system/ppc64/gcc.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -21,4 +21,12 @@
   <sect2 role="installation">
     <title>Installation of GCC</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../common/gcc.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <para os="ap1">GCC includes a <filename class="directory">nof</filename> directory
Index: BOOK/introduction/common/changelog.xml
===================================================================
--- BOOK/introduction/common/changelog.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/introduction/common/changelog.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -131,4 +131,7 @@
         <listitem>
           <para>[Jim] - Removed Tree - No Longer Required.</para>
+        </listitem>
+        <listitem>
+          <para>[Jim] - Added GCC Branch Update Patch.</para>
         </listitem>
       </itemizedlist>
Index: BOOK/materials/common/patches.xml
===================================================================
--- BOOK/materials/common/patches.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/materials/common/patches.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -70,4 +70,13 @@
         url="&patches-root;&expect-spawn-patch;"/></para>
         <para>MD5 sum: <literal>&expect-spawn-patch-md5;</literal></para>
+      </listitem>
+    </varlistentry>
+
+    <varlistentry>
+      <term>GCC Branch Update Patch - <token>&gcc-branch_update-patch-size;</token>:</term>
+      <listitem>
+        <para>Download: <ulink
+        url="&patches-root;&gcc-branch_update-patch;"/></para>
+        <para>MD5 sum: <literal>&gcc-branch_update-patch-md5;</literal></para>
       </listitem>
     </varlistentry>
Index: BOOK/patches.ent
===================================================================
--- BOOK/patches.ent	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/patches.ent	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -28,4 +28,8 @@
 <!ENTITY expect-spawn-patch-md5 "7706e1e8238c72eed8dc905d6f3b6aa9">
 <!ENTITY expect-spawn-patch-size "6.9 KB">
+
+<!ENTITY gcc-branch_update-patch "gcc-&gcc-version;-branch_update-1.patch">
+<!ENTITY gcc-branch_update-patch-md5 "e9e4236fa439ece67f02ab8377ee5811">
+<!ENTITY gcc-branch_update-patch-size "812 KB">
 
 <!ENTITY gcc-posix-patch "gcc-&gcc-version;-posix-1.patch">
Index: BOOK/temp-system/alpha/gcc.xml
===================================================================
--- BOOK/temp-system/alpha/gcc.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/temp-system/alpha/gcc.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -22,4 +22,12 @@
   <sect2 role="installation">
     <title>Installation of GCC</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../../cross-tools/alpha/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../../cross-tools/alpha/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/temp-system/common/gcc.xml
===================================================================
--- BOOK/temp-system/common/gcc.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/temp-system/common/gcc.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -22,4 +22,12 @@
   <sect2 role="installation">
     <title>Installation of GCC</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../../cross-tools/common/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../../cross-tools/common/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/temp-system/mips/gcc.xml
===================================================================
--- BOOK/temp-system/mips/gcc.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/temp-system/mips/gcc.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -22,4 +22,12 @@
   <sect2 role="installation">
     <title>Installation of GCC</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../../cross-tools/mips/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../../cross-tools/mips/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/temp-system/mips64-64/gcc.xml
===================================================================
--- BOOK/temp-system/mips64-64/gcc.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/temp-system/mips64-64/gcc.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -22,4 +22,12 @@
   <sect2 role="installation">
     <title>Installation of GCC</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../../cross-tools/mips64-64/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../../cross-tools/mips64-64/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/temp-system/mips64/gcc.xml
===================================================================
--- BOOK/temp-system/mips64/gcc.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/temp-system/mips64/gcc.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -22,4 +22,12 @@
   <sect2 role="installation">
     <title>Installation of GCC</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../../cross-tools/mips64/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../../cross-tools/mips64/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/temp-system/ppc/gcc.xml
===================================================================
--- BOOK/temp-system/ppc/gcc.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/temp-system/ppc/gcc.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -22,4 +22,12 @@
   <sect2 role="installation">
     <title>Installation of GCC</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../../cross-tools/ppc/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../../cross-tools/ppc/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/temp-system/ppc64/gcc.xml
===================================================================
--- BOOK/temp-system/ppc64/gcc.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/temp-system/ppc64/gcc.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -22,4 +22,12 @@
   <sect2 role="installation">
     <title>Installation of GCC</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../../cross-tools/x86_64/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../../cross-tools/x86_64/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/temp-system/sparc/gcc.xml
===================================================================
--- BOOK/temp-system/sparc/gcc.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/temp-system/sparc/gcc.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -22,4 +22,12 @@
   <sect2 role="installation">
     <title>Installation of GCC</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../../cross-tools/sparc/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../../cross-tools/sparc/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/temp-system/sparc64-64/gcc.xml
===================================================================
--- BOOK/temp-system/sparc64-64/gcc.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/temp-system/sparc64-64/gcc.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -22,4 +22,12 @@
   <sect2 role="installation">
     <title>Installation of GCC</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../../cross-tools/sparc64-64/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../../cross-tools/sparc64-64/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/temp-system/sparc64/gcc.xml
===================================================================
--- BOOK/temp-system/sparc64/gcc.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/temp-system/sparc64/gcc.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -22,4 +22,12 @@
   <sect2 role="installation">
     <title>Installation of GCC</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../../cross-tools/sparc64/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../../cross-tools/sparc64/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/temp-system/x86_64-64/gcc.xml
===================================================================
--- BOOK/temp-system/x86_64-64/gcc.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/temp-system/x86_64-64/gcc.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -22,4 +22,12 @@
   <sect2 role="installation">
     <title>Installation of GCC</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../../cross-tools/x86_64-64/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../../cross-tools/x86_64-64/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: BOOK/temp-system/x86_64/gcc.xml
===================================================================
--- BOOK/temp-system/x86_64/gcc.xml	(revision 9bb8064c5dcfeef13ae7921e726653033d62b922)
+++ BOOK/temp-system/x86_64/gcc.xml	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -22,4 +22,12 @@
   <sect2 role="installation">
     <title>Installation of GCC</title>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../../cross-tools/x86_64/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p1'])"/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../../cross-tools/x86_64/gcc-static.xml"
+    xpointer="xpointer(//*[@os='p2'])"/>
 
     <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
Index: patches/gcc-4.3.2-branch_update-1.patch
===================================================================
--- patches/gcc-4.3.2-branch_update-1.patch	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
+++ patches/gcc-4.3.2-branch_update-1.patch	(revision 4883ef51e9c6158c681318e00b36008e90398a47)
@@ -0,0 +1,24024 @@
+Submitted By: Jim Gifford (jim at linuxfromscratch dot org)
+Date: 12-21-2008
+Initial Package Version: 4.3.2
+Origin: Upstream
+Upstream Status: Applied
+Description: This is a branch update for gcc-4.3.2, and should be
+             rechecked periodically.
+
+diff -Naur gcc-4.3.2.orig/contrib/ChangeLog gcc-4.3.2/contrib/ChangeLog
+--- gcc-4.3.2.orig/contrib/ChangeLog	2008-08-27 11:03:13.000000000 -0700
++++ gcc-4.3.2/contrib/ChangeLog	2008-12-04 15:00:19.000000000 -0800
+@@ -1,3 +1,11 @@
++2008-12-04  Janis Johnson  <janis187@us.ibm.com>
++
++	Backport from mainline:
++	2008-10-18  Jakub Jelinek  <jakub@redhat.com>
++	            Janis Johnson  <janis187@us.ibm.com>
++
++	* dg-extract-results.sh: New file.
++
+ 2008-08-27  Release Manager
+ 
+ 	* GCC 4.3.2 released.
+diff -Naur gcc-4.3.2.orig/contrib/dg-extract-results.sh gcc-4.3.2/contrib/dg-extract-results.sh
+--- gcc-4.3.2.orig/contrib/dg-extract-results.sh	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/contrib/dg-extract-results.sh	2008-12-04 15:00:19.000000000 -0800
+@@ -0,0 +1,416 @@
++#! /bin/sh
++
++# For a specified tool and optional list of test variants, extract
++# test results from one or more test summary (.sum) files and combine
++# the results into a new test summary file, sent to the standard output.
++# The resulting file can be used with test result comparison scripts for
++# results from tests that were run in parallel.  See usage() below.
++
++# Copyright (C) 2008 Free Software Foundation
++# Contributed by Janis Johnson <janis187@us.ibm.com>
++#
++# This file is part of GCC.
++#
++# GCC is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3, or (at your option)
++# any later version.
++#
++# GCC is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with GCC; see the file COPYING.  If not, write to
++# the Free Software Foundation, 51 Franklin Street, Fifth Floor,
++# Boston, MA 02110-1301, USA.
++
++PROGNAME=dg-extract-results.sh
++
++usage() {
++  cat <<EOF >&2
++Usage: $PROGNAME [-t tool] [-l variant-list] [-L] sum-file ...
++
++    tool           The tool (e.g. g++, libffi) for which to create a
++                   new test summary file.  If not specified then all
++                   specified sum files must be for the same tool.
++    variant-list   One or more test variant names.  If the list is
++                   not specified then one is constructed from all
++                   variants in the files for <tool>.
++    sum-file       A test summary file with the format of those
++                   created by runtest from DejaGnu.
++    If -L is used, merge *.log files instead of *.sum.  In this
++    mode the exact order of lines may not be preserved, just different
++    Running *.exp chunks should be in correct order.
++EOF
++}
++
++# Write a message to the standard error.
++
++msg() {
++  echo "$@" >&2
++}
++
++# Parse the command-line options.
++
++VARIANTS=""
++TOOL=""
++MODE="sum"
++
++while getopts "l:t:L" ARG; do
++  case $ARG in
++  l)  VARIANTS="${VARIANTS} ${OPTARG}";;
++  t)  test -z "$TOOL" || (msg "${PROGNAME}: only one tool can be specified"; exit 1);
++      TOOL="${OPTARG}";;
++  L)  MODE="log";;
++  \?) usage; exit 0;;
++  esac
++done
++shift `expr ${OPTIND} - 1`
++
++if test $# -lt 1 ; then
++  usage
++  exit 1
++fi
++
++TMPDIR=${TMPDIR-/tmp}
++SUM_FILES="$@"
++FIRST_SUM=$1
++TMP=
++trap 'EXIT_STATUS=$?; rm -rf $TMP && exit $EXIT_STATUS' 0
++# Create a (secure) tmp directory for tmp files.
++{
++  TMP=`(umask 077 && mktemp -d -q "${TMPDIR}/dg-combine-results-$$-XXXXXX") 2>/dev/null` &&
++  test -n "$TMP" && test -d "$TMP"
++} ||
++{
++  TMP=${TMPDIR}/dg-combine-results-$$-$RANDOM
++  (umask 077 && mkdir $TMP)
++} ||
++{
++  msg "${PROGNAME}: cannot create a temporary directory"
++  { (exit 1); exit 1; }
++}
++
++# Find a good awk.
++
++if test -z "$AWK" ; then
++  for AWK in gawk nawk awk
++  do
++    if type $AWK 2>&1 | grep 'not found' > /dev/null 2>&1 ; then
++      :
++    else
++      break
++    fi
++  done
++fi
++
++# Verify that the specified summary files exist.
++
++ERROR=0
++for FILE in $SUM_FILES
++do
++  if ! test -f $FILE ; then
++    msg "${PROGNAME}: file $FILE does not exist."
++    ERROR=1
++  fi
++done
++test $ERROR -eq 0 || exit 1
++
++if [ -z "$TOOL" ]; then
++  # If no tool was specified, all specified summary files must be for
++  # the same tool.
++
++  CNT=`grep '=== .* tests ===' $SUM_FILES | $AWK '{ print $3 }' | sort -u | wc -l`
++  if [ $CNT -eq 1 ]; then
++    TOOL=`grep '=== .* tests ===' $FIRST_SUM | $AWK '{ print $2 }'`
++  else
++    msg "${PROGNAME}: sum files are for multiple tools, specify a tool"
++    msg ""
++    usage
++    exit 1
++  fi
++else
++  # Ignore the specified summary files that are not for this tool.  This
++  # should keep the relevant files in the same order.
++
++  SUM_FILES=`grep -l "=== $TOOL" $SUM_FILES`
++  if test -z "$SUM_FILES" ; then
++    msg "${PROGNAME}: none of the specified files are results for $TOOL"
++    exit 1
++  fi
++fi
++
++if [ "$TOOL" = acats ]; then
++  # Acats *.sum or *.log files aren't dejagnu generated, and they have
++  # somewhat different format.
++  ACATS_AWK=${TMP}/acats.awk
++  cat <<EOF > $ACATS_AWK
++BEGIN {
++  print_prologue=1; chapter=""; insummary=0
++  passcnt=0; failcnt=0; unsupcnt=0; failures=""
++}
++/=== acats configuration ===/ {
++  insummary=0
++  if (print_prologue) print
++  next
++}
++/=== acats tests ===/ {
++  if (print_prologue) print
++  print_prologue=0
++  next
++}
++/^Running chapter / {
++  chapter=\$3
++  print > "${TMP}/chapter-"chapter
++  next
++}
++/=== acats Summary ===/ {
++  chapter=""
++  insummary=1
++  next
++}
++/^# of expected passes/		{ if (insummary == 1) passcnt += \$5; next; }
++/^# of unexpected failures/	{ if (insummary == 1) failcnt += \$5; next; }
++/^# of unsupported tests/	{ if (insummary == 1) unsupcnt += \$5; next; }
++/^\*\*\* FAILURES: / {
++  if (insummary == 1) {
++    if (failures) sub(/^\*\*\* FAILURES:/,"")
++    failures=failures""\$0
++  }
++}
++{
++  if (print_prologue) { print; next }
++  if (chapter) print > "${TMP}/chapter-"chapter
++}
++END {
++  system ("cat ${TMP}/chapter-*")
++  print "		=== acats Summary ==="
++  print "# of expected passes		" passcnt
++  print "# of unexpected failures	" failcnt
++  if (unsupcnt) print "# of unsupported tests		" unsupcnt
++  if (failures) print failures
++}
++EOF
++
++  $AWK -f $ACATS_AWK $SUM_FILES
++  exit 0
++fi
++
++# If no variants were specified, find all variants in the remaining
++# summary files.  Otherwise, ignore specified variants that aren't in
++# any of those summary files.
++
++if test -z "$VARIANTS" ; then
++  VAR_AWK=${TMP}/variants.awk
++  cat <<EOF > $VAR_AWK
++/^Schedule of variations:/      { in_vars=1; next }
++/^$/                            { in_vars=0 }
++/^Running target/               { exit }
++{ if (in_vars==1) print \$1; else next }
++EOF
++
++  touch ${TMP}/varlist
++  for FILE in $SUM_FILES; do
++    $AWK -f $VAR_AWK $FILE >> ${TMP}/varlist
++  done
++  VARIANTS="`sort -u ${TMP}/varlist`"
++else
++  VARS="$VARIANTS"
++  VARIANTS=""
++  for VAR in $VARS
++  do
++    grep -q "Running target $VAR" $SUM_FILES && VARIANTS="$VARIANTS $VAR"
++  done
++fi
++
++# Find out if we have more than one variant, or any at all.
++
++VARIANT_COUNT=0
++for VAR in $VARIANTS
++do
++  VARIANT_COUNT=`expr $VARIANT_COUNT + 1`
++done
++
++if test $VARIANT_COUNT -eq 0 ; then
++  msg "${PROGNAME}: no file for $TOOL has results for the specified variants"
++  exit 1
++fi
++
++cat $SUM_FILES \
++  | $AWK '/^Running/ { if ($2 != "target" && $3 == "...") print "EXPFILE: "$2 } ' \
++  | sort -u > ${TMP}/expfiles
++
++# Write the begining of the combined summary file.
++
++head -n 2 $FIRST_SUM
++echo
++echo "		=== $TOOL tests ==="
++echo
++echo "Schedule of variations:"
++for VAR in $VARIANTS
++do
++  echo "    $VAR"
++done
++echo
++
++# For each test variant for the tool, copy test reports from each of the
++# summary files.  Set up two awk scripts from within the loop to
++# initialize VAR and TOOL with the script, rather than assuming that the
++# available version of awk can pass variables from the command line.
++
++for VAR in $VARIANTS
++do
++  GUTS_AWK=${TMP}/guts.awk
++  cat << EOF > $GUTS_AWK
++BEGIN {
++  variant="$VAR"
++  firstvar=1
++  expfileno=1
++  cnt=0
++  print_using=0
++}
++/^EXPFILE: / {
++  expfiles[expfileno] = \$2
++  expfilesr[\$2] = expfileno
++  expfileno = expfileno + 1
++}
++/^Running target / {
++  curvar = \$3
++  if (variant == curvar && firstvar == 1) { print; print_using=1; firstvar = 0 }
++  next
++}
++/^Using / {
++  if (variant == curvar && print_using) { print; next }
++}
++/^Running / {
++  print_using=0
++  if (variant == curvar) {
++    curfile="${TMP}/list"expfilesr[\$2]
++    expfileseen[\$2]=expfileseen[\$2] + 1
++    testname="00"
++    next
++  }
++}
++/\===/ { curvar = ""; next }
++/^(PASS|XPASS|FAIL|XFAIL|UNRESOLVED|WARNING|ERROR|UNSUPPORTED|UNTESTED|KFAIL):/ {
++  testname=\$2
++  # Ugly hack for gfortran.dg/dg.exp
++  if ("$TOOL" == "gfortran" && testname ~ /^gfortran.dg\/g77\//)
++    testname="h"testname
++}
++/^$/ { if ("$MODE" == "sum") next }
++{ if (variant == curvar && curfile) {
++    if ("$MODE" == "sum") {
++      printf "%s %08d|", testname, cnt > curfile
++      cnt = cnt + 1
++    }
++    filewritten[curfile]=1
++    print > curfile
++  } else
++    next
++}
++END {
++  n=1
++  while (n < expfileno) {
++    if (expfileseen[expfiles[n]]) {
++      print "Running "expfiles[n]" ..."
++      if (filewritten["${TMP}/list"n]) {
++	if (expfileseen[expfiles[n]] == 1)
++	  cmd="cat"
++	else
++	  cmd="LC_ALL=C sort"
++	if ("$MODE" == "sum")
++	  system (cmd" ${TMP}/list"n" | sed -n 's/^[^ ]* [^ |]*|//p'")
++	else
++	  system ("cat ${TMP}/list"n)
++      }
++    }
++    n = n + 1
++  }
++}
++EOF
++
++  SUMS_AWK=${TMP}/sums.awk
++  rm -f $SUMS_AWK
++  cat << EOF > $SUMS_AWK
++BEGIN {
++  variant="$VAR"
++  tool="$TOOL"
++  passcnt=0; failcnt=0; untstcnt=0; xpasscnt=0; xfailcnt=0; unsupcnt=0; unrescnt=0;
++  curvar=""; insummary=0
++}
++/^Running target /		{ curvar = \$3; next }
++/^# of /			{ if (variant == curvar) insummary = 1 }
++/^# of expected passes/		{ if (insummary == 1) passcnt += \$5; next; }
++/^# of unexpected successes/	{ if (insummary == 1) xpasscnt += \$5; next; }
++/^# of unexpected failures/	{ if (insummary == 1) failcnt += \$5; next; }
++/^# of expected failures/	{ if (insummary == 1) xfailcnt += \$5; next; }
++/^# of untested testcases/	{ if (insummary == 1) untstcnt += \$5; next; }
++/^# of unresolved testcases/	{ if (insummary == 1) unrescnt += \$5; next; }
++/^# of unsupported tests/	{ if (insummary == 1) unsupcnt += \$5; next; }
++/^$/				{ if (insummary == 1)
++				    { insummary = 0; curvar = "" }
++				  next
++				}
++{ next }
++END {
++  printf ("\t\t=== %s Summary for %s ===\n\n", tool, variant)
++  if (passcnt != 0) printf ("# of expected passes\t\t%d\n", passcnt)
++  if (xpasscnt != 0) printf ("# of unexpected successes\t%d\n", xpasscnt)
++  if (failcnt != 0) printf ("# of unexpected failures\t%d\n", failcnt)
++  if (xfailcnt != 0) printf ("# of expected failures\t\t%d\n", xfailcnt)
++  if (untstcnt != 0) printf ("# of untested testcases\t\t%d\n", untstcnt)
++  if (unrescnt != 0) printf ("# of unresolved testcases\t%d\n", unrescnt)
++  if (unsupcnt != 0) printf ("# of unsupported tests\t\t%d\n", unsupcnt)
++}
++EOF
++
++  PVAR=`echo $VAR | sed 's,/,.,g'`
++  TMPFILE=${TMP}/var-$PVAR
++  rm -f $TMPFILE
++  rm -f ${TMP}/list*
++  cat ${TMP}/expfiles $SUM_FILES | $AWK -f $GUTS_AWK
++  cat $SUM_FILES | $AWK -f $SUMS_AWK > $TMPFILE
++  # If there are multiple variants, output the counts for this one;
++  # otherwise there will just be the final counts at the end.
++  test $VARIANT_COUNT -eq 1 || cat $TMPFILE
++done
++
++# Set up an awk script to get the combined summary counts for the tool.
++
++TOTAL_AWK=${TMP}/total.awk
++cat << EOF > $TOTAL_AWK
++BEGIN {
++  tool="$TOOL"
++  passcnt=0; failcnt=0; untstcnt=0; xpasscnt=0; xfailcnt=0; unsupcnt=0; unrescnt=0
++}
++/^# of expected passes/		{ passcnt += \$5 }
++/^# of unexpected failures/	{ failcnt += \$5 }
++/^# of unexpected successes/	{ xpasscnt += \$5 }
++/^# of expected failures/	{ xfailcnt += \$5 }
++/^# of untested testcases/	{ untstcnt += \$5 }
++/^# of unresolved testcases/	{ unrescnt += \$5 }
++/^# of unsupported tests/	{ unsupcnt += \$5 }
++END {
++  printf ("\n\t\t=== %s Summary ===\n\n", tool)
++  if (passcnt != 0) printf ("# of expected passes\t\t%d\n", passcnt)
++  if (failcnt != 0) printf ("# of unexpected failures\t%d\n", failcnt)
++  if (xpasscnt != 0) printf ("# of unexpected successes\t%d\n", xpasscnt)
++  if (xfailcnt != 0) printf ("# of expected failures\t\t%d\n", xfailcnt)
++  if (untstcnt != 0) printf ("# of untested testcases\t\t%d\n", untstcnt)
++  if (unrescnt != 0) printf ("# of unresolved testcases\t%d\n", unrescnt)
++  if (unsupcnt != 0) printf ("# of unsupported tests\t\t%d\n", unsupcnt)
++}
++EOF
++
++# Find the total summaries for the tool and add to the end of the output.
++cat ${TMP}/var-* | $AWK -f $TOTAL_AWK
++
++# This is ugly, but if there's version output from the compiler under test
++# at the end of the file, we want it.  The other thing that might be there
++# is the final summary counts.
++tail -n 2 $FIRST_SUM | grep -q '^#' || tail -n 2 $FIRST_SUM
++
++exit 0
+diff -Naur gcc-4.3.2.orig/fixincludes/ChangeLog gcc-4.3.2/fixincludes/ChangeLog
+--- gcc-4.3.2.orig/fixincludes/ChangeLog	2008-08-27 11:02:53.000000000 -0700
++++ gcc-4.3.2/fixincludes/ChangeLog	2008-12-15 10:19:57.000000000 -0800
+@@ -1,3 +1,8 @@
++2008-12-10  Steve Ellcey  <sje@cup.hp.com>
++
++	* inclhack.def (hpux_spu_info): Match PA as well as IA64.
++	* fixincl.x: Regenerate.
++
+ 2008-08-27  Release Manager
+ 
+ 	* GCC 4.3.2 released.
+diff -Naur gcc-4.3.2.orig/fixincludes/fixincl.x gcc-4.3.2/fixincludes/fixincl.x
+--- gcc-4.3.2.orig/fixincludes/fixincl.x	2008-03-06 17:40:11.000000000 -0800
++++ gcc-4.3.2/fixincludes/fixincl.x	2008-12-15 10:19:57.000000000 -0800
+@@ -2,11 +2,11 @@
+  * 
+  * DO NOT EDIT THIS FILE   (fixincl.x)
+  * 
+- * It has been AutoGen-ed  Wednesday February 20, 2008 at 05:10:00 AM CET
++ * It has been AutoGen-ed  Monday December 15, 2008 at 10:16:56 AM PST
+  * From the definitions    inclhack.def
+  * and the template file   fixincl
+  */
+-/* DO NOT SVN-MERGE THIS FILE, EITHER Wed Feb 20 05:10:00 CET 2008
++/* DO NOT SVN-MERGE THIS FILE, EITHER Mon Dec 15 10:16:56 PST 2008
+  *
+  * You must regenerate it.  Use the ./genfixes script.
+  *
+@@ -22,23 +22,18 @@
+  *  inclhack copyright (c) 1998, 1999, 2000, 2001
+  *  The Free Software Foundation, Inc.
+  *
+-  *  inclhack is free software.
++  *  inclhack is free software: you can redistribute it and/or modify it
++ *  under the terms of the GNU General Public License as published by the
++ *  Free Software Foundation, either version 3 of the License, or
++ *  (at your option) any later version.
+  *  
+- *  You may redistribute it and/or modify it under the terms of the
+- *  GNU General Public License, as published by the Free Software
+- *  Foundation; either version 2 of the License, or (at your option)
+- *  any later version.
+- *  
+- *  inclhack is distributed in the hope that it will be useful,
+- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *  inclhack is distributed in the hope that it will be useful, but
++ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+  *  See the GNU General Public License for more details.
+  *  
+- *  You should have received a copy of the GNU General Public License
+- *  along with inclhack.  If not, write to:
+- *  	The Free Software Foundation, Inc.,
+- *  	51 Franklin Street, Fifth Floor
+- *  	Boston, MA  02110-1301, USA.
++ *  You should have received a copy of the GNU General Public License along
++ *  with this program.  If not, see <http://www.gnu.org/licenses/>.
+  */
+ 
+ /* * * * * * * * * * * * * * * * * * * * * * * * * *
+@@ -3301,7 +3296,7 @@
+  *  File name selection pattern
+  */
+ tSCC zHpux_Spu_InfoList[] =
+-  "ia64/sys/getppdp.h\0";
++  "*/sys/getppdp.h\0";
+ /*
+  *  Machine/OS name selection pattern
+  */
+diff -Naur gcc-4.3.2.orig/fixincludes/inclhack.def gcc-4.3.2/fixincludes/inclhack.def
+--- gcc-4.3.2.orig/fixincludes/inclhack.def	2008-03-06 17:40:11.000000000 -0800
++++ gcc-4.3.2/fixincludes/inclhack.def	2008-12-15 10:19:57.000000000 -0800
+@@ -1927,7 +1927,7 @@
+ fix = {
+     hackname = hpux_spu_info;
+     mach     = "*-hp-hpux*";
+-    files    = ia64/sys/getppdp.h;
++    files    = "*/sys/getppdp.h";
+     select   = "^.*extern.*spu_info.*";
+ 
+     c_fix     = format;
+diff -Naur gcc-4.3.2.orig/gcc/ChangeLog gcc-4.3.2/gcc/ChangeLog
+--- gcc-4.3.2.orig/gcc/ChangeLog	2008-08-27 11:01:53.000000000 -0700
++++ gcc-4.3.2/gcc/ChangeLog	2008-12-18 13:55:31.000000000 -0800
+@@ -1,3 +1,687 @@
++2008-12-18  Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	PR middle-end/38565
++	* gimplifier.c (gimplify_init_constructor): For constant vector
++	CONSTRUCTORs use GENERIC_TREE_OPERAND instead of TREE_OPERAND.
++
++2008-12-14  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
++
++	PR target/38062
++	Backport from mainline:
++	2008-04-08  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
++
++	* collect2.c (write_c_file): Don't wrap in "#ifdef __cplusplus".
++
++2008-12-12  Rainer Emrich  <r.emrich@de.tecosim.com>
++
++	PR bootstrap/38383
++	* pa64-hpux.h (LINK_GCC_C_SEQUENCE_SPEC): Don't hardcode search path
++	for the milli.a library.
++
++2008-12-12  H.J. Lu  <hongjiu.lu@intel.com>
++
++	Backport from mainline:
++	2008-12-12  H.J. Lu  <hongjiu.lu@intel.com>
++
++	PR target/38402
++	* gcc/doc/md.texi: Remove Y and document Yz, Y2, Yi and Ym
++	constraints for x86.
++
++2008-12-11  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
++
++	PR testsuite/35677
++	* emutls.c (__emutls_get_address): Make sure offset is really zero
++	before initializing the object's offset.
++
++2008-12-10  Richard Guenther  <rguenther@suse.de>
++
++	Backport from trunk the fix for PR38051.
++
++	PR tree-optimization/38478
++	* tree-ssa-structalias.c (update_alias_info): Manually find
++	written variables.
++
++2008-12-09  Janis Johnson  <janis187@us.ibm.com>
++
++	* doc/sourcebuild.texi (Test Directives): Fix formatting.
++
++2008-12-07  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* tree-sra.c (scalarize_use): Create another temporary with the proper
++	type for signed types in the use_all && !is_output bitfield case.
++
++2008-12-05  Janis Johnson  <janis187@us.ibm.com>
++
++	Backport from mainline:
++	2008-05-15  Janis Johnson  <janis187@us.ibm.com>
++
++	* doc/sourcebuild.texi: Document support for torture tests.
++
++2008-12-04  Janis Johnson  <janis187@us.ibm.com>
++
++	Backport from mainline:
++	2008-10-18  Jakub Jelinek  <jakub@redhat.com>
++	            Janis Johnson  <janis187@us.ibm.com>
++
++	* Makefile.in (lang_checks_parallelized, check_gcc_parallelize,
++	check_p_tool, check_p_vars, check_p_subno, check_p_comma,
++	check_p_subwork, check_p_numbers, check_p_subdir, check_p_subdirs):
++	New variables.
++	(check-subtargets, check-%-subtargets, check-parallel-%): New
++	targets.
++	(check-%): For test targets listed in lang_checks_parallelized
++	if -j is used and RUNTESTFLAGS doesn't specify tests to execute,
++	run the testing in multiple make goals, possibly parallel, and
++	afterwards run dg-extract-results.sh to merge the sum and log files.
++
++2008-12-04  Eric Botcazou  <ebotcazou@adacore.com>
++            Gary Funck  <gary@intrepid.com>
++
++	* cse.c (lookup_as_function): Delete mode frobbing code.
++	(equiv_constant): Re-implement it there for SUBREGs.
++
++2008-12-04  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* cse.c (equiv_constant): Fix pasto.
++
++2008-12-04  Danny Smith  <dannysmith@users.sourceforge.net>
++
++	Backport from mainline:
++	2008-12-02  Danny Smith   <dannysmith@users.sourceforge.net>
++
++        PR target/38054
++	* config/i386/winnt.c (i386_pe_encode_section_info): Condition stdcall
++	decoration of function RTL names here on Ada language.
++
++2008-12-02  Janis Johnson  <janis187@us.ibm.com>
++
++	Backport from mainline:
++	2008-11-26  Janis Johnson  <janis187@us.ibm.com>
++
++	PR testsuite/28870
++	* doc/sourcebuild.texi (Test Directives): Add dg-timeout and
++	dg-timeout-factor.
++
++2008-12-01  Uros Bizjak  <ubizjak@gmail.com>
++
++	Backport from mainline:
++	2008-11-25  Uros Bizjak  <ubizjak@gmail.com>
++
++	PR target/38254
++	* config/i386/sync.md (memory_barrier_nosse): New insn pattern.
++	(memory_barrier): Generate memory_barrier_nosse insn for
++	!(TARGET_64BIT || TARGET_SSE2).
++	* config/i386/sse.md (*sse2_mfence): Also enable for TARGET_64BIT.
++
++2008-11-30  Eric Botcazou  <ebotcazou@adacore.com>
++
++	PR target/38287
++	* config/sparc/sparc.md (divsi3 expander): Remove constraints.
++	(divsi3_sp32): Add new alternative with 'K' for operand #2.
++	(cmp_sdiv_cc_set): Factor common string.
++	(udivsi3_sp32): Add new alternative with 'K' for operand #2.
++	Add TARGET_V9 case.
++	(cmp_udiv_cc_set): Factor common string.
++
++2008-11-26  Fredrik Unger  <fred@tree.se>
++
++	* config/soft-fp/floatuntisf.c (__floatuntisf): Correct
++	function name from __floatundisf.
++	* config/soft-fp/fixdfti.c (__fixdfti): Correct argument type to
++	DFtype.
++
++2008-11-25  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* regrename.c (merge_overlapping_regs): Add registers artificially
++	defined at the top of the basic block to the set of live ones just
++	before the first insn.
++
++2008-11-24  Jakub Jelinek  <jakub@redhat.com>
++            Eric Botcazou  <ebotcazou@adacore.com>
++
++	* df-scan.c (df_get_call_refs): For unconditional noreturn calls
++	add EH_USES regs as artificial uses.
++	(df_get_entry_block_def_set): Don't handle EH_USES here.
++
++2008-11-22  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* config/sparc/sparc.c (TARGET_ASM_OUTPUT_DWARF_DTPREL): Define
++	only if HAVE_AS_SPARC_UA_PCREL is defined.
++
++2008-11-21  Paolo Carlini  <paolo.carlini@oracle.com>
++
++	PR other/38214
++	* doc/invoke.texi (Optimization Options): Fix typo.
++
++2008-11-20  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
++
++	PR bootstrap/33100
++	* config.gcc (i[34567]86-*-solaris2*): Don't include
++	i386/t-crtstuff here.
++	Move extra_parts, i386/t-sol2 in tmake_file to libgcc/config.host.
++	* config/i386/t-sol2: Move to libgcc/config/i386.
++
++2008-11-20  Richard Guenther  <rguenther@suse.de>
++
++	PR tree-optimization/37868
++	* tree-ssa-structalias.c (set_uids_in_ptset): Add SFTs based on
++	pointed to variable and access size.
++
++	Backport from mainline:
++	2008-07-07  Richard Guenther  <rguenther@suse.de>
++
++        * tree-ssa-structalias.c (struct variable_info): Add is_full_var flag.
++        (new_var_info): Set it to false.
++        (solution_set_add): Correctly handle pointers outside a var and
++        inside a field.
++        (type_safe): Treat variables with is_full_var properly.
++        (do_sd_constraint): Likewise.
++        (do_ds_constraint): Likewise.
++        (process_constraint): Remove zeroing offset for !use_field_sensitive.
++        (get_constraint_for_ptr_offset): New function.
++        (get_constraint_for_component_ref): Handle is_full_vars properly.
++        (get_constraint_for): Handle POINTER_PLUS_EXPR.
++        (handle_ptr_arith): Remove.
++        (find_func_aliases): Handle POINTER_PLUS_EXPR through generic
++	get_constraint_for code.
++        (create_function_info_for): For parameter and result varinfos set
++        is_full_var flag.
++        (create_variable_info_for): Set is_full_var flag whenever we
++        just created a single varinfo for a decl.
++        (init_alias_vars): Initialize use_field_sensitive from
++        max-fields-for-field-sensitive parameter.
++
++2008-11-18  Ben Elliston  <bje@au.ibm.com>
++
++	Backport from mainline:
++	2008-09-28  Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	PR target/37640
++	* config/rs6000/rs6000.c (rs6000_expand_compare_and_swapqhi): Force
++	address to a register before taking the lower part.
++
++2008-11-16  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* config/sparc/sparc.c (function_arg_vector_value): Remove 'base_mode'
++	parameter.  Use DImode for computing the number of registers.
++	(function_arg): Adjust for above change.
++	(function_value): Likewise.
++
++2008-11-14  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	* config/spu/spu-elf.h (STANDARD_STARTFILE_PREFIX_2): Disable default.
++	(STANDARD_INCLUDE_DIR): Redefine to "/include".
++	(LOCAL_INCLUDE_DIR): Undefine.
++	* config/spu/t-spu-elf (NATIVE_SYSTEM_HEADER_DIR): Define.
++
++2008-11-14  Dodji Seketeli  <dodji@redhat.com>
++
++	PR debug/27574
++	* cgraph.h: New abstract_and_needed member to struct cgraph_node.
++	* cgraphunit.c (cgraph_analyze_functions): Flag abstract functions
++	-which clones are reachable - as "abstract and needed".
++	* cgraph.c (cgraph_release_function_body):  If a node is
++	"abstract and needed", do not release its DECL_INITIAL() content
++	will be needed to emit debug info.
++
++2008-11-13  Uros Bizjak  <ubizjak@gmail.com>
++
++	Backport from mainline:
++	2008-06-06  Uros Bizjak <ubizjak@gmail.com>
++
++	PR rtl-optimization/36438
++	* cse.c (fold_rtx) [ASHIFT, LSHIFTRT, ASHIFTRT]: Break out early
++	for vector shifts with constant scalar shift operands.
++
++2008-11-12  Jason Merrill  <jason@redhat.com>
++
++	PR c++/38007
++	* c-common.c (c_common_signed_or_unsigned_type): Remove C++
++	special casing.
++
++2008-11-12  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	* gcc/config/s390/s390.h (INITIAL_FRAME_ADDRESS_RTX): Remove
++	packed-stack special handling.
++	(FRAME_ADDR_RTX): Add definition.
++
++2008-11-12  Ira Rosen  <irar@il.ibm.com>
++
++	PR tree-optimization/38079
++	* tree-vect-analyze.c (vect_analyze_data_refs): Replace dump_file
++	with vect_dump.
++
++2008-11-10  Andrew Haley  <aph@redhat.com>
++
++	Backport from mainline:
++
++        PR bootstrap/33304
++        * vec.h (VEC_TA): New.
++        (DEF_VEC_I, DEF_VEC_P, DEF_VEC_ALLOC_I, DEF_VEC_ALLOC_P,
++        DEF_VEC_O, DEF_VEC_ALLOC_O: Use VEC_TA.
++        * c-common.c (C_COMMON_FIXED_TYPES_SAT): New macro.
++        (C_COMMON_FIXED_MODE_TYPES_SAT): New macro.
++        (C_COMMON_FIXED_TYPES): Remove first arg.
++        (C_COMMON_FIXED_MODE_TYPES): Likewise.
++        * tree.c (MAKE_FIXED_TYPE_NODE): Break into two macros,
++        MAKE_FIXED_TYPE_NODE and MAKE_FIXED_TYPE_NODE_WIDTH in order
++        not to use empty macro arguments.
++
++2008-11-10  Uros Bizjak  <ubizjak@gmail.com>
++
++	Backport from mainline:
++	2008-11-10  Ralph Loader  <suckfish@ihug.co.nz>
++
++	PR middle-end/37807
++	PR middle-end/37809
++	* combine.c (force_to_mode): Do not process vector types.
++
++	* rtlanal.c (nonzero_bits1): Do not process vector types.
++	(num_sign_bit_copies1): Likewise.
++
++2008-11-06  Richard Guenther  <rguenther@suse.de>
++
++	Backport from mainline:
++	2008-09-13  H.J. Lu  <hongjiu.lu@intel.com>
++
++	PR rtl-optimization/37489
++	* cse.c (fold_rtx): Don't return const_true_rtx for float
++	compare if FLOAT_STORE_FLAG_VALUE is undefined.
++
++2008-11-06  Kazu Hirata  <kazu@codesourcery.com>
++
++	PR target/35574
++	* config/sparc/predicates.md (const_double_or_vector_operand):
++	New.
++	* config/sparc/sparc.c (sparc_extra_constraint_check): Handle the
++	'D' constraint.
++	* config/sparc/sparc.h: Document the 'D' constraint.
++	* config/sparc/sparc.md (*movdf_insn_sp32_v9, *movdf_insn_sp64):
++	Use the 'D' constraint in addition to 'F' in some alternatives.
++	(DF splitter): Generalize for V64mode.
++	* doc/md.texi (SPARC): Document the 'D' constraint.
++
++2008-11-05  Jakub Jelinek  <jakub@redhat.com>
++
++	PR c/37924
++	* combine.c (make_compound_operation): Don't call make_extraction with
++	non-positive length.
++	(simplify_shift_const_1): Canonicalize count even if complement_p.
++
++	PR tree-optimization/37879
++	* predict.c (tree_estimate_probability): Check if last_stmt is
++	non-NULL before dereferencing it.
++
++	PR middle-end/37858
++	* passes.c (execute_one_pass): Don't look at cfun->curr_properties
++	for ipa and simple ipa passes.
++
++	PR middle-end/37870
++	* expmed.c (extract_bit_field_1): If int_mode_for_mode returns
++	BLKmode for non-memory, convert using a wider MODE_INT mode
++	or through memory.
++
++2008-11-05  Hans-Peter Nilsson  <hp@axis.com>
++
++	PR target/38016
++	* config/cris/cris.c (cris_order_for_addsi3): Test for !REG_P, not
++	just MEM_P.
++
++2008-11-03  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* tree-sra.c (bitfield_overlaps_p): Fix oversight.
++
++2008-11-01  Hans-Peter Nilsson  <hp@axis.com>
++
++	PR target/37939
++	* config/cris/cris.c (cris_rtx_costs) <MULT>: Return 0 for an ADDI
++	operand.
++
++2008-11-01  Kaz Kojima  <kkojima@gcc.gnu.org>
++
++	Backport from mainline:
++	2008-10-24  Kaz Kojima  <kkojima@gcc.gnu.org>
++
++	PR rtl-optimization/37769
++	* regmove.c (optimize_reg_copy_2): Update REG_INC note if needed.
++
++2008-10-31  Kaz Kojima  <kkojima@gcc.gnu.org>
++
++	PR target/37909
++	Backport from mainline:
++	* config/sh/sh.c (untangle_mova): Return -1 when NEW_MOVA has
++	no address.
++
++2008-10-25  Kaz Kojima  <kkojima@gcc.gnu.org>
++
++	Backport from mainline:
++	* config/sh/t-sh: Use $(MULTILIB_CFLAGS) when compiling to
++	unwind-dw2-Os-4-200.o.
++
++2008-10-22  Chao-ying Fu  <fu@mips.com>
++
++	* config/mips/mips.opt (msmartmips): Accept -mno-smartmips.
++
++2008-10-22  Jakub Jelinek  <jakub@redhat.com>
++
++	PR middle-end/37882
++	* fold-const.c (build_range_type): For 1 .. signed_max
++	range call build_nonstandard_inter_type if signed_type_for
++	returned a type with bigger precision.
++
++2008-10-22  Richard Guenther  <rguenther@suse.de>
++
++	* tree-ssa-alias-warnings.c (skip_this_pointer): Skip pointers
++	for which we merged aliases of SMTs into their points-to sets.
++	* real.c (vax_f_format): Add missing initializer.
++
++2008-10-19  Richard Guenther  <rguenther@suse.de>
++
++	* tree-ssa-alias.c (may_alias_p): Remove bogus shortcut.
++
++2008-10-17  Andrew MacLeod  <amacleod@redhat.com>
++
++	PR tree-optimization/37102
++	* tree-outof-ssa.c (remove_gimple_phi_args): Remove all the PHI args  
++	from a node. Check to see if another PHI is dead.
++	(eliminate_useless_phis): Rename from eliminate_virtual_phis and remove
++	real PHIs which have no uses.
++	(rewrite_out_of_ssa): Call eliminate_useless_phis.
++
++2008-10-08  Simon Martin  <simartin@users.sourceforge.net>
++
++	PR c/35437
++	* expr.c (count_type_elements): Handle ERROR_MARK.
++
++2008-10-07  H.J. Lu  <hongjiu.lu@intel.com>
++
++	Backport from mainline:
++	2008-10-07  H.J. Lu  <hongjiu.lu@intel.com>
++
++	PR middle-end/37731
++	* expmed.c (expand_mult): Properly check DImode constant in
++	CONST_DOUBLE.
++
++2008-10-07  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* tree-ssa-loop-ivopts.c (may_be_nonaddressable_p) <VIEW_CONVERT_EXPR>:
++	Return true for non-addressable GIMPLE operands.
++
++2008-10-04  Gerald Pfeifer  <gerald@pfeifer.com>
++
++	* config/freebsd.h (HANDLE_PRAGMA_PACK_PUSH_POP): Define.
++
++2000-10-04  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
++
++	PR target/37603
++	* pa.c (legitimize_pic_address): Force function labels to memory in
++	word mode.
++
++2008-10-01  Richard Henderson  <rth@redhat.com>
++
++	PR tree-opt/35737
++	* tree-complex.c (set_component_ssa_name): Don't optimize
++	is_gimple_min_invariant values with ssa_names in abnormal phis.
++
++2008-09-30  Joseph Myers  <joseph@codesourcery.com>
++
++	* ifcvt.c (noce_emit_store_flag): If using condition from original
++	jump, reverse it if if_info->cond was reversed.
++
++2008-09-28  Eric Botcazou  <ebotcazou@adacore.com>
++
++	PR middle-end/36575
++	* fold-const.c (div_and_round_double) <ROUND_DIV_EXPR>: Fix typo.
++
++2008-09-25  Jakub Jelinek  <jakub@redhat.com>
++
++	PR c/37645
++	* c-common.c (handle_weakref_attribute): Ignore the attribute unless
++	the decl is a VAR_DECL or FUNCTION_DECL.
++
++2008-09-24  Richard Henderson  <rth@redhat.com>
++
++	* dwarf2.h (DW_OP_GNU_encoded_addr): New.
++	* unwind-dw2.c (execute_stack_op): Handle it.
++
++2008-09-21  Ira Rosen  <irar@il.ibm.com>
++
++	PR tree-optimization/37539
++	* tree-vect-transform.c (vect_transform_strided_load): Save vector
++	statement in related statement field only for the first load of the
++	group of loads with the same data reference.
++
++2008-09-20  Richard Guenther  <rguenther@suse.de>
++
++	Backport from mainline:
++	2008-08-29  Richard Guenther  <rguenther@suse.de>
++
++	PR middle-end/37236
++	* tree-ssa-structalias.c (intra_create_variable_infos): Mark
++	PARAM_NOALIAS tags with is_heapvar.
++	* tree-ssa-operands.c (access_can_touch_variable): Offset
++	based tests do not apply for heapvars.  Fix offset test.
++
++2008-09-19  Richard Guenther  <rguenther@suse.de>
++
++	PR tree-optimization/36343
++	* tree-ssa-structalias.c (struct variable_info): Remove
++	directly_dereferenced member.
++	(new_var_info): Do not set it.
++	(process_constraint_1): Likewise.
++	(set_uids_in_ptset): Remove TBAA-pruning code.
++	(find_what_p_points_to): Do not pass TBAA-pruning related
++	parameters.
++
++2008-09-19  Uros Bizjak  <ubizjak@gmail.com>
++
++	Backport from mainline:
++	2008-09-18  Uros Bizjak  <ubizjak@gmail.com>
++
++	PR rtl-optimization/37544
++	* regrename.c (maybe_mode_change): Exit early when copy_mode
++	is narrower than orig_mode and narrower than new_mode.
++
++2008-09-18  Janis Johnson  <janis187@us.ibm.com>
++
++	Backport from mainline:
++	2008-04-08  Janis Johnson  <janis187@us.ibm.com>
++	PR target/35620
++	* config/rs6000/rs6000.c (rs6000_check_sdmode): Handle additional
++	kinds of indirect references.
++
++	Backport from mainline:
++	2008-04-03  Janis Johnson  <janis187@us.ibm.com>
++
++	PR target/35713
++	* config/rs6000/rs6000.c (rs6000_gimplify_va_arg): Use integer
++	constants of the appropriate size for runtime calculations.
++
++	Backport from mainline:
++	2008-04-03  Janis Johnson  <janis187@us.ibm.com>
++	PR c/35712
++	* dfp.c (decimal_from_decnumber): Retain trailing zeroes for
++	decimal-float literal constant zero.
++
++2008-09-18  Andreas Krebbel  <krebbel1@de.ibm.com>
++
++	* doc/invoke.texi: Document -mhard-dfp, -mno-hard-dfp.
++	Mention -march=z9-109 and z9-ec.
++
++2008-09-12  Anatoly Sokolov  <aesok@post.ru>
++
++	PR target/37466
++	* config/avr/avr.md (movsi_lreg_const peephole2): Add match_dup for
++	scratch register after 'set' pattern.
++
++2008-09-12  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	* emit-rtl.c (set_reg_attrs_from_value): Fix invalid alignment
++	information passed to mark_reg_pointer.
++	* explow.c (force_reg): Likewise.
++
++2008-09-12  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	* config/spu/spu.c (spu_override_options): Default to -mno-safe-hints
++	when building for the celledp architecture.
++
++2008-09-09  Trevor Smigiel <Trevor_Smigiel@playstation.sony.com>
++
++	Improved branch hints, safe hints, and scheduling for Cell SPU.
++
++	* haifa-sched.c (sched_emit_insn) : Define.
++	* sched-int.h (sched_emit_insn) : Add prototype.
++	* doc/invoke.texi (-mdual-nops, -mhint-max-nops,
++	-mhint-max-distance -msafe-hints) : Document.
++	* config/spu/spu.c (spu_flag_var_tracking): New.
++	(TARGET_SCHED_INIT_GLOBAL, TARGET_SCHED_INIT,
++	TARGET_SCHED_REORDER, TARGET_SCHED_REORDER2,
++	TARGET_ASM_FILE_START): Define.
++	(TARGET_SCHED_ADJUST_PRIORITY): Remove.
++	(STOP_HINT_P, HINTED_P, SCHED_ON_EVEN_P): Define.
++	(spu_emit_branch_hint): Add blocks argument.
++	(insert_branch_hints, insert_nops): Remove.
++	(pad_bb, insert_hbrp_for_ilb_runout, insert_hbrp, in_spu_reorg,
++	uses_ls_unit, spu_sched_init_global, spu_sched_init,
++	spu_sched_reorder, asm_file_start): New functions.
++	(clock_var, spu_sched_length, pipe0_clock,
++	pipe1_clock, prev_clock_var, prev_priority,
++	spu_ls_first, prev_ls_clock): New static variables.
++	* config/spu/spu.h (TARGET_DEFAULT): Add MASK_SAFE_HINTS.
++	* config/spu.md (iprefetch): Add operand, make it clobber MEM.
++	(nopn_nv): Add a non-volatile version of nop.
++	* config/spu/spu.opt (-mdual-nops, -mhint-max-nops,
++	-mhint-max-distance, -msafe-hints): New options.
++
++2008-09-09  Jakub Jelinek  <jakub@redhat.com>
++
++	PR rtl-optimization/37408
++	* function.c (assign_parm_find_stack_rtl): Set correct MEM_SIZE
++	if parm is promoted.
++
++2008-09-08  Richard Henderson  <rth@redhat.com>
++
++	* config/alpha/alpha.c (alpha_split_lock_test_and_set): Move
++	memory barrier to below the test-and-set.
++	(alpha_split_lock_test_and_set_12): Likewise.
++
++2008-09-07  Richard Guenther  <rguenther@suse.de>
++	    Ira Rosen  <irar@il.ibm.com>
++
++	PR tree-optimization/36630
++	* tree-vect-transform.c (vect_update_ivs_after_vectorizer):
++	Call STRIP_NOPS before calling evolution_part_in_loop_num.
++
++2008-09-04  Ian Lance Taylor  <iant@google.com>
++
++	* varasm.c (narrowing_initializer_constant_valid_p): New
++	static function.
++	(initializer_constant_valid_p): Call it.
++
++2008-09-02  Jakub Jelinek  <jakub@redhat.com>
++
++	PR target/36332
++	* real.c (real_maxval): Clear a lower bit to make real_maxval
++	match get_max_float for IBM long double format.
++
++2008-09-02  Bob Wilson  <bob.wilson@acm.org>
++
++	* config/xtensa/xtensa.md (<u>mulsidi3): Use a temporary register.
++
++2008-09-01  Jakub Jelinek  <jakub@redhat.com>
++
++	PR middle-end/37248
++	PR middle-end/36449
++	* fold-const.c (make_bit_field_ref): Change bitpos and bitsize
++	arguments to HOST_WIDE_INT.
++	(fold_truthop): Change first_bit and end_bit to HOST_WIDE_INT.
++
++	Revert:
++	2008-06-11  Richard Guenther  <rguenther@suse.de>
++	PR middle-end/36449
++	* fold-const.c (fold_truthop): Remove code generating
++	BIT_FIELD_REFs of structure bases.
++	(fold_binary): Likewise.
++	(make_bit_field_ref): Remove.
++	(optimize_bit_field_compare): Remove.
++	(all_ones_mask_p): Remove.
++
++2008-08-31  Jakub Jelinek  <jakub@redhat.com>
++
++	PR target/37168
++	* config/rs6000/rs6000-protos.h (const_vector_elt_as_int): Add
++	prototype.
++	* config/rs6000/rs6000.c (const_vector_elt_as_int): No longer static.
++	* config/rs6000/altivec.md (easy_vector_constant_add_self splitter):
++	Also split V4SFmode.
++	* config/rs6000/predicates.md (easy_vector_constant_add_self): Handle
++	vector float modes.
++
++2008-08-29  Jakub Jelinek  <jakub@redhat.com>
++
++	PR c/37261
++	* fold-const.c (fold_binary): In (X | C1) & C2 canonicalization
++	compute new & and | in type rather than TREE_TYPE (arg0).
++
++2008-08-28  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	* config/spu/spu_mfcio.h (mfc_begin_critical_section): New function.
++	(mfc_end_critical_section): Likewise.
++
++2008-08-28  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	* config/rs6000/rs6000.c (rs6000_handle_altivec_attribute): Propagate
++	all type qualifiers from element type to vector type.
++
++2008-08-28  Dodji Seketeli  <dodji@redhat.com>
++
++	PR c++/36741
++	* tree.c (int_fits_type_p): Don't forget unsigned integers
++	  of type sizetype which higher end word equals -1.
++
++2008-08-28  Richard Guenther  <rguenther@suse.de>
++
++	PR middle-end/36548
++	PR middle-end/37125
++	* fold-const.c (extract_muldiv_1): Optimize (X * C1) % C2 only
++	if the multiplication does not overflow.
++
++2008-08-28  Richard Guenther  <rguenther@suse.de>
++
++	PR middle-end/36817
++	* tree-chrec.c (chrec_apply): Always call chrec_fold_plus which
++	makes sure to produce a result of the correct type.
++
++2008-08-28  Uros Bizjak  <ubizjak@gmail.com>
++
++	PR target/37184
++	* config/i386/i386.c (ix86_match_ccmode): Handle CCAmode,
++	CCCmode, CCOmode and CCSmode destination modes.
++
++	PR target/37191
++	* config/i386/mmx.md (*vec_extractv2sf_0): Avoid combining registers
++	from different units in a single alternative.
++	(*vec_extractv2sf_1): Ditto.
++	(*vec_extractv2si_0): Ditto.
++	(*vec_extractv2si_1): Ditto.
++	* config/i386/sse.md (sse2_storehpd): Ditto.
++	(sse2_storelpd): Ditto.
++	(sse2_loadhpd): Ditto.
++	(sse2_loadlpd): Ditto.
++
++	PR target/37197
++	* config/i386/i386.md (clzsi2_abm): Fix operand 1 constraints.
++	(popcountsi2): Ditto.
++	(clzdi2_abm): Ditto.
++	(popcountdi2): Ditto.
++	(clzhi2_abm): Ditto.
++	(popcounthi2): Ditto.
++
++2008-08-27  Joseph Myers  <joseph@codesourcery.com>
++
++	* BASE-VER: Set to 4.3.3.
++	* DEV-PHASE: Set to prerelease.
++
+ 2008-08-27  Release Manager
+ 
+ 	* GCC 4.3.2 released.
+diff -Naur gcc-4.3.2.orig/gcc/Makefile.in gcc-4.3.2/gcc/Makefile.in
+--- gcc-4.3.2.orig/gcc/Makefile.in	2008-08-01 02:51:03.000000000 -0700
++++ gcc-4.3.2/gcc/Makefile.in	2008-12-04 15:00:19.000000000 -0800
+@@ -420,6 +420,23 @@
+ xm_include_list=@xm_include_list@
+ xm_defines=@xm_defines@
+ lang_checks=check-gcc
++lang_checks_parallelized=check-gcc
++# This lists a couple of test files that take most time during check-gcc.
++# When doing parallelized check-gcc, these can run in parallel with the
++# remaining tests.  Each word in this variable stands for work for one
++# make goal and one extra make goal is added to handle all the *.exp
++# files not handled explicitly already.  If multiple *.exp files
++# should be run in the same runtest invocation (usually if they aren't
++# very long running, but still should be split of from the check-parallel-$lang
++# remaining tests runtest invocation), they should be concatenated with commas.
++# Note that [a-zA-Z] wildcards need to have []s prefixed with \ (needed
++# by tcl) and as the *.exp arguments are mached both as is and with
++# */ prefixed to it in runtest_file_p, it is usually desirable to include
++# a subdirectory name.
++check_gcc_parallelize=execute.exp=execute/2* \
++		      execute.exp=execute/\[013-9a-zA-Z\]* \
++		      compile.exp dg.exp \
++		      struct-layout-1.exp,unsorted.exp,stackalign.exp,i386.exp
+ lang_opt_files=@lang_opt_files@ $(srcdir)/c.opt $(srcdir)/common.opt
+ lang_specs_files=@lang_specs_files@
+ lang_tree_files=@lang_tree_files@
+@@ -4275,6 +4292,8 @@
+ 
+ check: $(CHECK_TARGETS)
+ 
++check-subtargets: $(patsubst %,%-subtargets,$(CHECK_TARGETS))
++
+ # The idea is to parallelize testing of multilibs, for example:
+ #   make -j3 check-gcc//sh-hms-sim/{-m1,-m2,-m3,-m3e,-m4}/{,-nofpu}
+ # will run 3 concurrent sessions of check-gcc, eventually testing
+@@ -4296,7 +4315,8 @@
+ 	-rm -f $@
+ 	sed '/set tmpdir/ s|testsuite|$(TESTSUITEDIR)|' < site.exp > $@
+ 
+-$(lang_checks): check-% : site.exp
++# This is only used for check-% targets that aren't parallelized.
++$(filter-out $(lang_checks_parallelized),$(lang_checks)): check-% : site.exp
+ 	-test -d $(TESTSUITEDIR) || mkdir $(TESTSUITEDIR)
+ 	test -d $(TESTSUITEDIR)/$* || mkdir $(TESTSUITEDIR)/$*
+ 	-(rootme=`${PWD_COMMAND}`; export rootme; \
+@@ -4313,6 +4333,108 @@
+ 	GCC_EXEC_PREFIX="$(libdir)/gcc/" ; export GCC_EXEC_PREFIX ; \
+ 	$(RUNTEST) --tool $* $(RUNTESTFLAGS))
+ 
++$(patsubst %,%-subtargets,$(filter-out $(lang_checks_parallelized),$(lang_checks))): check-%-subtargets:
++	@echo check-$*
++
++check_p_tool=$(firstword $(subst _, ,$*))
++check_p_vars=$(check_$(check_p_tool)_parallelize)
++check_p_subno=$(word 2,$(subst _, ,$*))
++check_p_comma=,
++check_p_subwork=$(subst $(check_p_comma), ,$(if $(check_p_subno),$(word $(check_p_subno),$(check_p_vars))))
++check_p_numbers=1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
++check_p_subdir=$(subst _,,$*)
++check_p_subdirs=$(wordlist 1,$(words $(check_$*_parallelize)),$(check_p_numbers))
++
++# For parallelized check-% targets, this decides whether parallelization
++# is desirable (if -jN is used and RUNTESTFLAGS doesn't contain anything
++# but optionally --target_board argument).  If it is desirable,
++# recursive make is run with check-parallel-$lang{,1,2,3,4,5} etc. goals,
++# which can be executed in parallel, as they are run in separate directories.
++# check-parallel-$lang{1,2,3,4,5} etc. goals invoke runtest with the longest
++# running *.exp files from the testsuite, as determined by check_$lang_parallelize
++# variable.  The check-parallel-$lang goal in that case invokes runtest with
++# all the remaining *.exp files not handled by the separate goals.
++# Afterwards contrib/dg-extract-results.sh is used to merge the sum and log
++# files.  If parallelization isn't desirable, only one recursive make
++# is run with check-parallel-$lang goal and check_$lang_parallelize variable
++# cleared to say that no additional arguments beyond $(RUNTESTFLAGS)
++# should be passed to runtest.
++#
++# To parallelize some language check, add the corresponding check-$lang
++# to lang_checks_parallelized variable and define check_$lang_parallelize
++# variable (see above check_gcc_parallelize description).
++$(lang_checks_parallelized): check-% : site.exp
++	@if [ -z "$(filter-out --target_board=%, $(RUNTESTFLAGS))" ] \
++	    && [ "$(filter -j, $(MFLAGS))" = "-j" ]; then \
++	  $(MAKE) TESTSUITEDIR="$(TESTSUITEDIR)" RUNTESTFLAGS="$(RUNTESTFLAGS)" \
++	    check-parallel-$* \
++	    $(patsubst %,check-parallel-$*_%, $(check_p_subdirs)); \
++	  for file in $(TESTSUITEDIR)/$*/$* \
++		      $(patsubst %,$(TESTSUITEDIR)/$*%/$*,$(check_p_subdirs));\
++	  do \
++	    mv -f $$file.sum $$file.sum.sep; mv -f $$file.log $$file.log.sep; \
++	  done; \
++	  $(SHELL) $(srcdir)/../contrib/dg-extract-results.sh \
++	    $(TESTSUITEDIR)/$*/$*.sum.sep \
++	    $(patsubst %,$(TESTSUITEDIR)/$*%/$*.sum.sep,$(check_p_subdirs)) \
++	    > $(TESTSUITEDIR)/$*/$*.sum; \
++	  $(SHELL) $(srcdir)/../contrib/dg-extract-results.sh -L \
++	    $(TESTSUITEDIR)/$*/$*.log.sep \
++	    $(patsubst %,$(TESTSUITEDIR)/$*%/$*.log.sep,$(check_p_subdirs)) \
++	    > $(TESTSUITEDIR)/$*/$*.log; \
++	else \
++	  $(MAKE) TESTSUITEDIR="$(TESTSUITEDIR)" RUNTESTFLAGS="$(RUNTESTFLAGS)" \
++	    check_$*_parallelize= check-parallel-$*; \
++	fi
++
++# Just print the parallelized subtargets for those that want to split
++# the testing across machines.
++$(patsubst %,%-subtargets,$(lang_checks_parallelized)): check-%-subtargets:
++	@echo check-parallel-$* \
++	  $(patsubst %,check-parallel-$*_%, $(check_p_subdirs))
++
++# In the if [ -n "$(check_p_subno)" ] case runtest should be given the name of
++# the given *.exp file(s).  See comment above check_gcc_parallelize variable
++# for details on the content of these variables.
++#
++# In the elif [ -n "$(check_p_vars)" ] case runtest should be given
++# names of all the *.exp files for this tool that aren't already handled by
++# other goals.  First it finds all the *.exp files for this tool, then
++# prunes those already specified in check_$lang_parallelize or duplicates.
++#
++# Otherwise check-$lang isn't parallelized and runtest is invoked just with
++# the $(RUNTESTFLAGS) arguments.
++check-parallel-% : site.exp
++	-test -d $(TESTSUITEDIR) || mkdir $(TESTSUITEDIR)
++	test -d $(TESTSUITEDIR)/$(check_p_subdir) || mkdir $(TESTSUITEDIR)/$(check_p_subdir)
++	-(rootme=`${PWD_COMMAND}`; export rootme; \
++	srcdir=`cd ${srcdir}; ${PWD_COMMAND}` ; export srcdir ; \
++	cd $(TESTSUITEDIR)/$(check_p_subdir); \
++	rm -f tmp-site.exp; \
++	sed '/set tmpdir/ s|testsuite|$(TESTSUITEDIR)/$(check_p_subdir)|' \
++		< ../../site.exp > tmp-site.exp; \
++	$(SHELL) $${srcdir}/../move-if-change tmp-site.exp site.exp; \
++	EXPECT=${EXPECT} ; export EXPECT ; \
++	if [ -f $${rootme}/../expect/expect ] ; then  \
++	   TCL_LIBRARY=`cd .. ; cd $${srcdir}/../tcl/library ; ${PWD_COMMAND}` ; \
++	    export TCL_LIBRARY ; fi ; \
++	GCC_EXEC_PREFIX="$(libdir)/gcc/" ; export GCC_EXEC_PREFIX ; \
++	runtestflags= ; \
++	if [ -n "$(check_p_subno)" ] ; then \
++	  runtestflags="$(check_p_subwork)"; \
++	elif [ -n "$(check_p_vars)" ] ; then \
++	  parts="`echo ' $(strip $(subst $(check_p_comma), ,$(check_p_vars))) ' \
++		  | sed 's/=[^ ]* / /g'`"; \
++	  for part in `find $$srcdir/testsuite/$(check_p_tool)* -name \*.exp` ; do \
++	    part=`basename $$part` ; \
++	    case " $$parts $$runtestflags " in \
++	      *" $$part "*) ;; \
++	      *) runtestflags="$$runtestflags $$part" ;; \
++	    esac ; \
++	  done ; \
++	fi ; \
++	$(RUNTEST) --tool $(check_p_tool) $(RUNTESTFLAGS) $$runtestflags)
++
+ check-consistency: testsuite/site.exp
+ 	-rootme=`${PWD_COMMAND}`; export rootme; \
+ 	srcdir=`cd ${srcdir}; ${PWD_COMMAND}` ; export srcdir ; \
+@@ -4350,7 +4472,7 @@
+ ${QMTEST_DIR} stamp-qmtest:
+ 	${QMTEST} -D ${QMTEST_DIR} create-tdb \
+ 	    -c gcc_database.GCCDatabase \
+-            -a srcdir=`cd ${srcdir}/testsuite && ${PWD_COMMAND}` && \
++	    -a srcdir=`cd ${srcdir}/testsuite && ${PWD_COMMAND}` && \
+ 	    $(STAMP) stamp-qmtest
+ 
+ # Create the QMTest context file.
+diff -Naur gcc-4.3.2.orig/gcc/ada/ChangeLog gcc-4.3.2/gcc/ada/ChangeLog
+--- gcc-4.3.2.orig/gcc/ada/ChangeLog	2008-08-27 11:02:00.000000000 -0700
++++ gcc-4.3.2/gcc/ada/ChangeLog	2008-12-04 15:00:19.000000000 -0800
+@@ -1,3 +1,36 @@
++2008-12-04  Janis Johnson  <janis187@us.ibm.com>
++
++	Backport from mainline:
++	2008-10-18  Jakub Jelinek  <jakub@redhat.com>
++	            Janis Johnson  <janis187@us.ibm.com>
++
++	* Make-lang.in (check-ada-subtargets): Depend on
++	check-acats-subtargets and check-gnat-subtargets.
++	(check_acats_targets): New variable.
++	(check-acats-subtargets, check-acats%): New targets.
++	(check-acats): If -j is used and CHAPTERS is empty, run the testing
++	in multiple make goals, possibly parallel, and afterwards run
++	dg-extract-results.sh to merge the sum and log files.
++
++2008-11-15  Bechir Zalila  <bechir.zalila@gmail.com>
++            Eric Botcazou  <ebotcazou@adacore.com>
++
++	PR ada/34289
++	* lib.ads: (Enable_Switch_Storing): Declare.
++	* lib.adb: (Enable_Switch_Storing): New procedure.
++	* switch-c.adb (Scan_Front_End_Switches): Add support for -gnatea.
++	* make.adb: (Compile_Sources.Compile): Add -gnatea as first option.
++	(Display): Never display -gnatea
++	* lang-specs.h: If -gnatea is present, pass -gnatez.
++
++2008-10-06  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* utils.c (can_fold_for_view_convert_p): New predicate.
++	(unchecked_convert): Use it to disable problematic folding with
++	VIEW_CONVERT_EXPR in the general case.  Always disable it for the
++	special VIEW_CONVERT_EXPR built for integral types and cope with
++	its addressability issues by preserving the first conversion.
++
+ 2008-08-27  Release Manager
+ 
+ 	* GCC 4.3.2 released.
+diff -Naur gcc-4.3.2.orig/gcc/ada/Make-lang.in gcc-4.3.2/gcc/ada/Make-lang.in
+--- gcc-4.3.2.orig/gcc/ada/Make-lang.in	2008-02-06 13:51:24.000000000 -0800
++++ gcc-4.3.2/gcc/ada/Make-lang.in	2008-12-04 15:00:19.000000000 -0800
+@@ -859,15 +859,47 @@
+ lang_checks += check-gnat
+ 
+ check-ada: check-acats check-gnat
++check-ada-subtargets: check-acats-subtargets check-gnat-subtargets
+ 
+ ACATSDIR = $(TESTSUITEDIR)/ada/acats
+ 
++check_acats_targets = $(patsubst %,check-acats%, 0 1 2)
++
+ check-acats:
+-	test -d $(ACATSDIR) || mkdir -p $(ACATSDIR)
++	@test -d $(ACATSDIR) || mkdir -p $(ACATSDIR); \
++	if [ -z "$(CHAPTERS)" ] && [ "$(filter -j, $(MFLAGS))" = "-j" ]; \
++	then \
++	  $(MAKE) $(check_acats_targets); \
++	  for idx in 0 1 2; do \
++	    mv -f $(ACATSDIR)$$idx/acats.sum $(ACATSDIR)$$idx/acats.sum.sep; \
++	    mv -f $(ACATSDIR)$$idx/acats.log $(ACATSDIR)$$idx/acats.log.sep; \
++	  done; \
++	  $(SHELL) $(srcdir)/../contrib/dg-extract-results.sh \
++	    $(ACATSDIR)0/acats.sum.sep $(ACATSDIR)1/acats.sum.sep \
++	    $(ACATSDIR)2/acats.sum.sep > $(ACATSDIR)/acats.sum; \
++	  $(SHELL) $(srcdir)/../contrib/dg-extract-results.sh -L \
++	    $(ACATSDIR)0/acats.log.sep $(ACATSDIR)1/acats.log.sep \
++	    $(ACATSDIR)2/acats.log.sep > $(ACATSDIR)/acats.log; \
++	  exit 0; \
++	fi; \
+ 	testdir=`cd ${srcdir}/${ACATSDIR}; ${PWD_COMMAND}`; \
+ 	export testdir; cd $(ACATSDIR); $(SHELL) $${testdir}/run_acats $(CHAPTERS)
+ 
+-.PHONY: check-acats
++check-acats-subtargets:
++	@echo $(check_acats_targets)
++
++# Parallelized check-acats
++$(check_acats_targets): check-acats%:
++	test -d $(ACATSDIR)$* || mkdir -p $(ACATSDIR)$*; \
++	testdir=`cd ${srcdir}/${ACATSDIR} && ${PWD_COMMAND}`; \
++	case "$*" in \
++	  0) chapters="`cd $$testdir/tests; echo [a-b]* c[0-4]*`";; \
++	  1) chapters="`cd $$testdir/tests; echo c[5-9ab]*`";; \
++	  2) chapters="`cd $$testdir/tests; echo c[c-z]* [d-z]*`";; \
++	esac; \
++	export testdir; cd $(ACATSDIR)$* && $(SHELL) $${testdir}/run_acats $$chapters
++
++.PHONY: check-acats $(check_acats_targets)
+ 
+ 
+
+ # Bootstrapping targets for just GNAT - use the same stage directories
+diff -Naur gcc-4.3.2.orig/gcc/ada/lang-specs.h gcc-4.3.2/gcc/ada/lang-specs.h
+--- gcc-4.3.2.orig/gcc/ada/lang-specs.h	2007-11-01 11:06:47.000000000 -0700
++++ gcc-4.3.2/gcc/ada/lang-specs.h	2008-11-15 08:15:00.000000000 -0800
+@@ -35,7 +35,8 @@
+  gnat1 %{I*} %{k8:-gnatk8} %{w:-gnatws} %{!Q:-quiet} %{nostdinc*}\
+     %{nostdlib*}\
+     -dumpbase %{.adb:%b.adb}%{.ads:%b.ads}%{!.adb:%{!.ads:%b.ada}}\
+-    %{O*} %{W*} %{w} %{p} %{pg:-p} %{a} %{f*} %{d*} %{g*&m*} "
++    %{O*} %{W*} %{w} %{p} %{pg:-p} %{a} %{f*} %{d*}\
++    %{gnatea:-gnatez} %{g*&m*} "
+ #if defined(TARGET_VXWORKS_RTP)
+    "%{fRTS=rtp:-mrtp} "
+ #endif
+diff -Naur gcc-4.3.2.orig/gcc/ada/lib.adb gcc-4.3.2/gcc/ada/lib.adb
+--- gcc-4.3.2.orig/gcc/ada/lib.adb	2007-09-12 04:58:21.000000000 -0700
++++ gcc-4.3.2/gcc/ada/lib.adb	2008-11-15 08:15:00.000000000 -0800
+@@ -49,7 +49,7 @@
+ package body Lib is
+ 
+    Switch_Storing_Enabled : Boolean := True;
+-   --  Set to False by Disable_Switch_Storing
++   --  Controlled by Enable_Switch_Storing/Disable_Switch_Storing
+ 
+    -----------------------
+    -- Local Subprograms --
+@@ -423,6 +423,19 @@
+       return Compilation_Switches.Last;
+    end Compilation_Switches_Last;
+ 
++   ---------------------------
++   -- Enable_Switch_Storing --
++   ---------------------------
++
++   procedure Enable_Switch_Storing is
++   begin
++      Switch_Storing_Enabled := True;
++   end Enable_Switch_Storing;
++
++   ----------------------------
++   -- Disable_Switch_Storing --
++   ----------------------------
++
+    procedure Disable_Switch_Storing is
+    begin
+       Switch_Storing_Enabled := False;
+diff -Naur gcc-4.3.2.orig/gcc/ada/lib.ads gcc-4.3.2/gcc/ada/lib.ads
+--- gcc-4.3.2.orig/gcc/ada/lib.ads	2007-12-13 02:40:58.000000000 -0800
++++ gcc-4.3.2/gcc/ada/lib.ads	2008-11-15 08:15:00.000000000 -0800
+@@ -556,9 +556,15 @@
+    --  which may influence the generated output file(s). Switch is the text of
+    --  the switch to store (except that -fRTS gets changed back to --RTS).
+ 
++   procedure Enable_Switch_Storing;
++   --  Enable registration of switches by Store_Compilation_Switch. Used to
++   --  avoid registering switches added automatically by the gcc driver at the
++   --  beginning of the command line.
++
+    procedure Disable_Switch_Storing;
+    --  Disable registration of switches by Store_Compilation_Switch. Used to
+-   --  avoid registering switches added automatically by the gcc driver.
++   --  avoid registering switches added automatically by the gcc driver at the
++   --  end of the command line.
+ 
+    procedure Store_Linker_Option_String (S : String_Id);
+    --  This procedure is called to register the string from a pragma
+diff -Naur gcc-4.3.2.orig/gcc/ada/make.adb gcc-4.3.2/gcc/ada/make.adb
+--- gcc-4.3.2.orig/gcc/ada/make.adb	2007-12-13 02:45:44.000000000 -0800
++++ gcc-4.3.2/gcc/ada/make.adb	2008-11-15 08:15:00.000000000 -0800
+@@ -2893,7 +2893,7 @@
+          Source_Index : Int;
+          Args         : Argument_List) return Process_Id
+       is
+-         Comp_Args : Argument_List (Args'First .. Args'Last + 9);
++         Comp_Args : Argument_List (Args'First .. Args'Last + 10);
+          Comp_Next : Integer := Args'First;
+          Comp_Last : Integer;
+          Arg_Index : Integer;
+@@ -2950,6 +2950,9 @@
+             end if;
+          end loop;
+ 
++         Comp_Args (Comp_Next) := new String'("-gnatea");
++         Comp_Next := Comp_Next + 1;
++
+          Comp_Args (Comp_Next) := Comp_Flag;
+          Comp_Next := Comp_Next + 1;
+ 
+@@ -4032,9 +4035,11 @@
+ 
+          for J in Args'Range loop
+ 
+-            --  Never display -gnatez
++            --  Never display -gnatea nor -gnatez
+ 
+-            if Args (J).all /= "-gnatez" then
++            if Args (J).all /= "-gnatea" and then
++              Args (J).all /= "-gnatez"
++            then
+ 
+                --  Do not display the mapping file argument automatically
+                --  created when using a project file.
+diff -Naur gcc-4.3.2.orig/gcc/ada/switch-c.adb gcc-4.3.2/gcc/ada/switch-c.adb
+--- gcc-4.3.2.orig/gcc/ada/switch-c.adb	2007-12-13 02:20:52.000000000 -0800
++++ gcc-4.3.2/gcc/ada/switch-c.adb	2008-11-15 08:15:00.000000000 -0800
+@@ -295,6 +295,11 @@
+ 
+                case Switch_Chars (Ptr) is
+ 
++                  when 'a' =>
++                     Store_Switch := False;
++                     Enable_Switch_Storing;
++                     Ptr := Ptr + 1;
++
+                   --  -gnatec (configuration pragmas)
+ 
+                   when 'c' =>
+diff -Naur gcc-4.3.2.orig/gcc/ada/utils.c gcc-4.3.2/gcc/ada/utils.c
+--- gcc-4.3.2.orig/gcc/ada/utils.c	2008-05-13 01:46:49.000000000 -0700
++++ gcc-4.3.2/gcc/ada/utils.c	2008-10-06 00:10:31.000000000 -0700
+@@ -3824,8 +3824,72 @@
+   return exp;
+ }
+ 
+
++/* Return true if EXPR is an expression that can be folded as an operand
++   of a VIEW_CONVERT_EXPR.  See the head comment of unchecked_convert for
++   the rationale.  */
++
++static bool
++can_fold_for_view_convert_p (tree expr)
++{
++  tree t1, t2;
++
++  /* The folder will fold NOP_EXPRs between integral types with the same
++     precision (in the middle-end's sense).  We cannot allow it if the
++     types don't have the same precision in the Ada sense as well.  */
++  if (TREE_CODE (expr) != NOP_EXPR)
++    return true;
++
++  t1 = TREE_TYPE (expr);
++  t2 = TREE_TYPE (TREE_OPERAND (expr, 0));
++
++  /* Defer to the folder for non-integral conversions.  */
++  if (!(INTEGRAL_TYPE_P (t1) && INTEGRAL_TYPE_P (t2)))
++    return true;
++
++  /* Only fold conversions that preserve both precisions.  */
++  if (TYPE_PRECISION (t1) == TYPE_PRECISION (t2)
++      && operand_equal_p (rm_size (t1), rm_size (t2), 0))
++    return true;
++
++  return false;
++}
++
+ /* Return an expression that does an unchecked conversion of EXPR to TYPE.
+-   If NOTRUNC_P is true, truncation operations should be suppressed.  */
++   If NOTRUNC_P is true, truncation operations should be suppressed.
++
++   Special care is required with (source or target) integral types whose
++   precision is not equal to their size, to make sure we fetch or assign
++   the value bits whose location might depend on the endianness, e.g.
++
++     Rmsize : constant := 8;
++     subtype Int is Integer range 0 .. 2 ** Rmsize - 1;
++
++     type Bit_Array is array (1 .. Rmsize) of Boolean;
++     pragma Pack (Bit_Array);
++
++     function To_Bit_Array is new Unchecked_Conversion (Int, Bit_Array);
++
++     Value : Int := 2#1000_0001#;
++     Vbits : Bit_Array := To_Bit_Array (Value);
++
++   we expect the 8 bits at Vbits'Address to always contain Value, while
++   their original location depends on the endianness, at Value'Address
++   on a little-endian architecture but not on a big-endian one.
++
++   ??? There is a problematic discrepancy between what is called precision
++   here (and more generally throughout gigi) for integral types and what is
++   called precision in the middle-end.  In the former case it's the RM size
++   as given by TYPE_RM_SIZE (or rm_size) whereas it's TYPE_PRECISION in the
++   latter case, the hitch being that they are not equal when they matter,
++   that is when the number of value bits is not equal to the type's size:
++   TYPE_RM_SIZE does give the number of value bits but TYPE_PRECISION is set
++   to the size.  The sole exception are BOOLEAN_TYPEs for which both are 1.
++
++   The consequence is that gigi must duplicate code bridging the gap between
++   the type's size and its precision that exists for TYPE_PRECISION in the
++   middle-end, because the latter knows nothing about TYPE_RM_SIZE, and be
++   wary of transformations applied in the middle-end based on TYPE_PRECISION
++   because this value doesn't reflect the actual precision for Ada.  */
+ 
+ tree
+ unchecked_convert (tree type, tree expr, bool notrunc_p)
+@@ -3852,14 +3916,10 @@
+ 	       && TYPE_JUSTIFIED_MODULAR_P (etype))))
+       || TREE_CODE (type) == UNCONSTRAINED_ARRAY_TYPE)
+     {
+-      tree rtype = type;
+-      bool final_unchecked = false;
+-
+       if (TREE_CODE (etype) == INTEGER_TYPE
+ 	  && TYPE_BIASED_REPRESENTATION_P (etype))
+ 	{
+ 	  tree ntype = copy_type (etype);
+-
+ 	  TYPE_BIASED_REPRESENTATION_P (ntype) = 0;
+ 	  TYPE_MAIN_VARIANT (ntype) = ntype;
+ 	  expr = build1 (NOP_EXPR, ntype, expr);
+@@ -3868,15 +3928,18 @@
+       if (TREE_CODE (type) == INTEGER_TYPE
+ 	  && TYPE_BIASED_REPRESENTATION_P (type))
+ 	{
+-	  rtype = copy_type (type);
++	  tree rtype = copy_type (type);
+ 	  TYPE_BIASED_REPRESENTATION_P (rtype) = 0;
+ 	  TYPE_MAIN_VARIANT (rtype) = rtype;
++	  expr = convert (rtype, expr);
++	  expr = build1 (NOP_EXPR, type, expr);
+ 	}
+ 
+-      /* We have another special case: if we are unchecked converting subtype
+-	 into a base type, we need to ensure that VRP doesn't propagate range
+-	 information since this conversion may be done precisely to validate
+-	 that the object is within the range it is supposed to have.  */
++      /* We have another special case: if we are unchecked converting either
++	 a subtype or a type with limited range into a base type, we need to
++	 ensure that VRP doesn't propagate range information because this
++	 conversion may be done precisely to validate that the object is
++	 within the range it is supposed to have.  */
+       else if (TREE_CODE (expr) != INTEGER_CST
+ 	       && TREE_CODE (type) == INTEGER_TYPE && !TREE_TYPE (type)
+ 	       && ((TREE_CODE (etype) == INTEGER_TYPE && TREE_TYPE (etype))
+@@ -3887,26 +3950,34 @@
+ 	     in order not to be deemed an useless type conversion, it must
+ 	     be from subtype to base type.
+ 
++	     Therefore we first do the bulk of the conversion to a subtype of
++	     the final type.  And this conversion must itself not be deemed
++	     useless if the source type is not a subtype because, otherwise,
++	     the final VIEW_CONVERT_EXPR will be deemed so as well.  That's
++	     why we toggle the unsigned flag in this conversion, which is
++	     harmless since the final conversion is only a reinterpretation
++	     of the bit pattern.
++
+ 	     ??? This may raise addressability and/or aliasing issues because
+ 	     VIEW_CONVERT_EXPR gets gimplified as an lvalue, thus causing the
+ 	     address of its operand to be taken if it is deemed addressable
+ 	     and not already in GIMPLE form.  */
+-	  rtype = gnat_type_for_mode (TYPE_MODE (type), TYPE_UNSIGNED (type));
++	  tree rtype
++	    = gnat_type_for_mode (TYPE_MODE (type), !TYPE_UNSIGNED (etype));
+ 	  rtype = copy_type (rtype);
+ 	  TYPE_MAIN_VARIANT (rtype) = rtype;
+ 	  TREE_TYPE (rtype) = type;
+-	  final_unchecked = true;
++	  expr = convert (rtype, expr);
++	  expr = build1 (VIEW_CONVERT_EXPR, type, expr);
+ 	}
+ 
+-      expr = convert (rtype, expr);
+-      if (type != rtype)
+-	expr = fold_build1 (final_unchecked ? VIEW_CONVERT_EXPR : NOP_EXPR,
+-			    type, expr);
++      else
++	expr = convert (type, expr);
+     }
+ 
+-  /* If we are converting TO an integral type whose precision is not the
+-     same as its size, first unchecked convert to a record that contains
+-     an object of the output type.  Then extract the field. */
++  /* If we are converting to an integral type whose precision is not equal
++     to its size, first unchecked convert to a record that contains an
++     object of the output type.  Then extract the field. */
+   else if (INTEGRAL_TYPE_P (type) && TYPE_RM_SIZE (type)
+ 	   && 0 != compare_tree_int (TYPE_RM_SIZE (type),
+ 				     GET_MODE_BITSIZE (TYPE_MODE (type))))
+@@ -3922,8 +3993,8 @@
+       expr = build_component_ref (expr, NULL_TREE, field, 0);
+     }
+ 
+-  /* Similarly for integral input type whose precision is not equal to its
+-     size.  */
++  /* Similarly if we are converting from an integral type whose precision
++     is not equal to its size.  */
+   else if (INTEGRAL_TYPE_P (etype) && TYPE_RM_SIZE (etype)
+       && 0 != compare_tree_int (TYPE_RM_SIZE (etype),
+ 				GET_MODE_BITSIZE (TYPE_MODE (etype))))
+@@ -3953,13 +4024,15 @@
+     {
+       expr = maybe_unconstrained_array (expr);
+       etype = TREE_TYPE (expr);
+-      expr = fold_build1 (VIEW_CONVERT_EXPR, type, expr);
++      if (can_fold_for_view_convert_p (expr))
++	expr = fold_build1 (VIEW_CONVERT_EXPR, type, expr);
++      else
++	expr = build1 (VIEW_CONVERT_EXPR, type, expr);
+     }
+ 
+-  /* If the result is an integral type whose size is not equal to
+-     the size of the underlying machine type, sign- or zero-extend
+-     the result.  We need not do this in the case where the input is
+-     an integral type of the same precision and signedness or if the output
++  /* If the result is an integral type whose precision is not equal to its
++     size, sign- or zero-extend the result.  We need not do this if the input
++     is an integral type of the same precision and signedness or if the output
+      is a biased type or if both the input and output are unsigned.  */
+   if (!notrunc_p
+       && INTEGRAL_TYPE_P (type) && TYPE_RM_SIZE (type)
+diff -Naur gcc-4.3.2.orig/gcc/c-common.c gcc-4.3.2/gcc/c-common.c
+--- gcc-4.3.2.orig/gcc/c-common.c	2008-07-15 08:52:35.000000000 -0700
++++ gcc-4.3.2/gcc/c-common.c	2008-11-12 14:08:01.000000000 -0800
+@@ -2232,53 +2232,77 @@
+   if (type1 == intQI_type_node || type1 == unsigned_intQI_type_node)
+     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
+ 
+-#define C_COMMON_FIXED_TYPES(SAT,NAME) \
+-  if (type1 == SAT ## short_ ## NAME ## _type_node \
+-      || type1 == SAT ## unsigned_short_ ## NAME ## _type_node) \
+-    return unsignedp ? SAT ## unsigned_short_ ## NAME ## _type_node \
+-		     : SAT ## short_ ## NAME ## _type_node; \
+-  if (type1 == SAT ## NAME ## _type_node \
+-      || type1 == SAT ## unsigned_ ## NAME ## _type_node) \
+-    return unsignedp ? SAT ## unsigned_ ## NAME ## _type_node \
+-		     : SAT ## NAME ## _type_node; \
+-  if (type1 == SAT ## long_ ## NAME ## _type_node \
+-      || type1 == SAT ## unsigned_long_ ## NAME ## _type_node) \
+-    return unsignedp ? SAT ## unsigned_long_ ## NAME ## _type_node \
+-		     : SAT ## long_ ## NAME ## _type_node; \
+-  if (type1 == SAT ## long_long_ ## NAME ## _type_node \
+-      || type1 == SAT ## unsigned_long_long_ ## NAME ## _type_node) \
+-    return unsignedp ? SAT ## unsigned_long_long_ ## NAME ## _type_node \
+-		     : SAT ## long_long_ ## NAME ## _type_node;
+-
+-#define C_COMMON_FIXED_MODE_TYPES(SAT,NAME) \
+-  if (type1 == SAT ## NAME ## _type_node \
+-      || type1 == SAT ## u ## NAME ## _type_node) \
+-    return unsignedp ? SAT ## u ## NAME ## _type_node \
+-		     : SAT ## NAME ## _type_node;
+-
+-  C_COMMON_FIXED_TYPES (, fract);
+-  C_COMMON_FIXED_TYPES (sat_, fract);
+-  C_COMMON_FIXED_TYPES (, accum);
+-  C_COMMON_FIXED_TYPES (sat_, accum);
+-
+-  C_COMMON_FIXED_MODE_TYPES (, qq);
+-  C_COMMON_FIXED_MODE_TYPES (, hq);
+-  C_COMMON_FIXED_MODE_TYPES (, sq);
+-  C_COMMON_FIXED_MODE_TYPES (, dq);
+-  C_COMMON_FIXED_MODE_TYPES (, tq);
+-  C_COMMON_FIXED_MODE_TYPES (sat_, qq);
+-  C_COMMON_FIXED_MODE_TYPES (sat_, hq);
+-  C_COMMON_FIXED_MODE_TYPES (sat_, sq);
+-  C_COMMON_FIXED_MODE_TYPES (sat_, dq);
+-  C_COMMON_FIXED_MODE_TYPES (sat_, tq);
+-  C_COMMON_FIXED_MODE_TYPES (, ha);
+-  C_COMMON_FIXED_MODE_TYPES (, sa);
+-  C_COMMON_FIXED_MODE_TYPES (, da);
+-  C_COMMON_FIXED_MODE_TYPES (, ta);
+-  C_COMMON_FIXED_MODE_TYPES (sat_, ha);
+-  C_COMMON_FIXED_MODE_TYPES (sat_, sa);
+-  C_COMMON_FIXED_MODE_TYPES (sat_, da);
+-  C_COMMON_FIXED_MODE_TYPES (sat_, ta);
++#define C_COMMON_FIXED_TYPES(NAME)	    \
++  if (type1 == short_ ## NAME ## _type_node \
++      || type1 == unsigned_short_ ## NAME ## _type_node) \
++    return unsignedp ? unsigned_short_ ## NAME ## _type_node \
++		     : short_ ## NAME ## _type_node; \
++  if (type1 == NAME ## _type_node \
++      || type1 == unsigned_ ## NAME ## _type_node) \
++    return unsignedp ? unsigned_ ## NAME ## _type_node \
++		     : NAME ## _type_node; \
++  if (type1 == long_ ## NAME ## _type_node \
++      || type1 == unsigned_long_ ## NAME ## _type_node) \
++    return unsignedp ? unsigned_long_ ## NAME ## _type_node \
++		     : long_ ## NAME ## _type_node; \
++  if (type1 == long_long_ ## NAME ## _type_node \
++      || type1 == unsigned_long_long_ ## NAME ## _type_node) \
++    return unsignedp ? unsigned_long_long_ ## NAME ## _type_node \
++		     : long_long_ ## NAME ## _type_node;
++
++#define C_COMMON_FIXED_MODE_TYPES(NAME) \
++  if (type1 == NAME ## _type_node \
++      || type1 == u ## NAME ## _type_node) \
++    return unsignedp ? u ## NAME ## _type_node \
++		     : NAME ## _type_node;
++
++#define C_COMMON_FIXED_TYPES_SAT(NAME) \
++  if (type1 == sat_ ## short_ ## NAME ## _type_node \
++      || type1 == sat_ ## unsigned_short_ ## NAME ## _type_node) \
++    return unsignedp ? sat_ ## unsigned_short_ ## NAME ## _type_node \
++		     : sat_ ## short_ ## NAME ## _type_node; \
++  if (type1 == sat_ ## NAME ## _type_node \
++      || type1 == sat_ ## unsigned_ ## NAME ## _type_node) \
++    return unsignedp ? sat_ ## unsigned_ ## NAME ## _type_node \
++		     : sat_ ## NAME ## _type_node; \
++  if (type1 == sat_ ## long_ ## NAME ## _type_node \
++      || type1 == sat_ ## unsigned_long_ ## NAME ## _type_node) \
++    return unsignedp ? sat_ ## unsigned_long_ ## NAME ## _type_node \
++		     : sat_ ## long_ ## NAME ## _type_node; \
++  if (type1 == sat_ ## long_long_ ## NAME ## _type_node \
++      || type1 == sat_ ## unsigned_long_long_ ## NAME ## _type_node) \
++    return unsignedp ? sat_ ## unsigned_long_long_ ## NAME ## _type_node \
++		     : sat_ ## long_long_ ## NAME ## _type_node;
++
++#define C_COMMON_FIXED_MODE_TYPES_SAT(NAME)	\
++  if (type1 == sat_ ## NAME ## _type_node \
++      || type1 == sat_ ## u ## NAME ## _type_node) \
++    return unsignedp ? sat_ ## u ## NAME ## _type_node \
++		     : sat_ ## NAME ## _type_node;
++
++  C_COMMON_FIXED_TYPES (fract);
++  C_COMMON_FIXED_TYPES_SAT (fract);
++  C_COMMON_FIXED_TYPES (accum);
++  C_COMMON_FIXED_TYPES_SAT (accum);
++
++  C_COMMON_FIXED_MODE_TYPES (qq);
++  C_COMMON_FIXED_MODE_TYPES (hq);
++  C_COMMON_FIXED_MODE_TYPES (sq);
++  C_COMMON_FIXED_MODE_TYPES (dq);
++  C_COMMON_FIXED_MODE_TYPES (tq);
++  C_COMMON_FIXED_MODE_TYPES_SAT (qq);
++  C_COMMON_FIXED_MODE_TYPES_SAT (hq);
++  C_COMMON_FIXED_MODE_TYPES_SAT (sq);
++  C_COMMON_FIXED_MODE_TYPES_SAT (dq);
++  C_COMMON_FIXED_MODE_TYPES_SAT (tq);
++  C_COMMON_FIXED_MODE_TYPES (ha);
++  C_COMMON_FIXED_MODE_TYPES (sa);
++  C_COMMON_FIXED_MODE_TYPES (da);
++  C_COMMON_FIXED_MODE_TYPES (ta);
++  C_COMMON_FIXED_MODE_TYPES_SAT (ha);
++  C_COMMON_FIXED_MODE_TYPES_SAT (sa);
++  C_COMMON_FIXED_MODE_TYPES_SAT (da);
++  C_COMMON_FIXED_MODE_TYPES_SAT (ta);
+ 
+   /* For ENUMERAL_TYPEs in C++, must check the mode of the types, not
+      the precision; they have precision set to match their range, but
+@@ -2295,7 +2319,7 @@
+ 
+ #define TYPE_OK(node)							    \
+   (TYPE_MODE (type) == TYPE_MODE (node)					    \
+-   && (c_dialect_cxx () || TYPE_PRECISION (type) == TYPE_PRECISION (node)))
++   && TYPE_PRECISION (type) == TYPE_PRECISION (node))
+   if (TYPE_OK (signed_char_type_node))
+     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
+   if (TYPE_OK (integer_type_node))
+@@ -2325,10 +2349,7 @@
+     return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
+ #undef TYPE_OK
+ 
+-  if (c_dialect_cxx ())
+-    return type;
+-  else
+-    return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
++  return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
+ }
+ 
+ /* Build a bit-field integer type for the given WIDTH and UNSIGNEDP.  */
+@@ -5577,7 +5598,9 @@
+   /* We must ignore the attribute when it is associated with
+      local-scoped decls, since attribute alias is ignored and many
+      such symbols do not even have a DECL_WEAK field.  */
+-  if (decl_function_context (*node) || current_function_decl)
++  if (decl_function_context (*node)
++      || current_function_decl
++      || (TREE_CODE (*node) != VAR_DECL && TREE_CODE (*node) != FUNCTION_DECL))
+     {
+       warning (OPT_Wattributes, "%qE attribute ignored", name);
+       *no_add_attrs = true;
+diff -Naur gcc-4.3.2.orig/gcc/cgraph.c gcc-4.3.2/gcc/cgraph.c
+--- gcc-4.3.2.orig/gcc/cgraph.c	2008-01-29 15:21:24.000000000 -0800
++++ gcc-4.3.2/gcc/cgraph.c	2008-11-14 05:26:59.000000000 -0800
+@@ -540,7 +540,11 @@
+     }
+   DECL_SAVED_TREE (node->decl) = NULL;
+   DECL_STRUCT_FUNCTION (node->decl) = NULL;
+-  DECL_INITIAL (node->decl) = error_mark_node;
++  /* If the node is abstract and needed, then do not clear DECL_INITIAL
++     of its associated function function declaration because it's
++     needed to emit debug info later.  */
++  if (!node->abstract_and_needed)
++    DECL_INITIAL (node->decl) = error_mark_node;
+ }
+ 
+ /* Remove the node from cgraph.  */
+diff -Naur gcc-4.3.2.orig/gcc/cgraph.h gcc-4.3.2/gcc/cgraph.h
+--- gcc-4.3.2.orig/gcc/cgraph.h	2008-01-29 15:21:24.000000000 -0800
++++ gcc-4.3.2/gcc/cgraph.h	2008-11-14 05:26:59.000000000 -0800
+@@ -163,6 +163,9 @@
+   /* Set when function must be output - it is externally visible
+      or its address is taken.  */
+   unsigned needed : 1;
++  /* Set when decl is an abstract function pointed to by the
++     ABSTRACT_DECL_ORIGIN of a reachable function.  */
++  unsigned abstract_and_needed : 1;
+   /* Set when function is reachable by call from other function
+      that is either reachable or needed.  */
+   unsigned reachable : 1;
+diff -Naur gcc-4.3.2.orig/gcc/cgraphunit.c gcc-4.3.2/gcc/cgraphunit.c
+--- gcc-4.3.2.orig/gcc/cgraphunit.c	2008-01-29 15:21:24.000000000 -0800
++++ gcc-4.3.2/gcc/cgraphunit.c	2008-11-14 05:26:59.000000000 -0800
+@@ -1008,6 +1008,15 @@
+ 	if (!edge->callee->reachable)
+ 	  cgraph_mark_reachable_node (edge->callee);
+ 
++      /* If decl is a clone of an abstract function, mark that abstract
++	 function so that we don't release its body. The DECL_INITIAL() of that
++         abstract function declaration will be later needed to output debug info.  */
++      if (DECL_ABSTRACT_ORIGIN (decl))
++	{
++	  struct cgraph_node *origin_node = cgraph_node (DECL_ABSTRACT_ORIGIN (decl));
++	  origin_node->abstract_and_needed = true;
++	}
++
+       /* We finalize local static variables during constructing callgraph
+          edges.  Process their attributes too.  */
+       process_function_and_variable_attributes (first_processed,
+diff -Naur gcc-4.3.2.orig/gcc/collect2.c gcc-4.3.2/gcc/collect2.c
+--- gcc-4.3.2.orig/gcc/collect2.c	2007-12-31 07:02:59.000000000 -0800
++++ gcc-4.3.2/gcc/collect2.c	2008-12-14 14:30:32.000000000 -0800
+@@ -2043,14 +2043,12 @@
+ static void
+ write_c_file (FILE *stream, const char *name)
+ {
+-  fprintf (stream, "#ifdef __cplusplus\nextern \"C\" {\n#endif\n");
+ #ifndef LD_INIT_SWITCH
+   if (! shared_obj)
+     write_c_file_glob (stream, name);
+   else
+ #endif
+     write_c_file_stat (stream, name);
+-  fprintf (stream, "#ifdef __cplusplus\n}\n#endif\n");
+ }
+ 
+ #ifdef COLLECT_EXPORT_LIST
+diff -Naur gcc-4.3.2.orig/gcc/combine.c gcc-4.3.2/gcc/combine.c
+--- gcc-4.3.2.orig/gcc/combine.c	2008-05-19 16:29:29.000000000 -0700
++++ gcc-4.3.2/gcc/combine.c	2008-11-10 02:43:35.000000000 -0800
+@@ -7024,7 +7024,8 @@
+       if (GET_CODE (rhs) == CONST_INT
+ 	  && GET_CODE (lhs) == ASHIFT
+ 	  && GET_CODE (XEXP (lhs, 1)) == CONST_INT
+-	  && INTVAL (rhs) >= INTVAL (XEXP (lhs, 1)))
++	  && INTVAL (rhs) >= INTVAL (XEXP (lhs, 1))
++	  && INTVAL (rhs) < mode_width)
+ 	{
+ 	  new = make_compound_operation (XEXP (lhs, 0), next_code);
+ 	  new = make_extraction (mode, new,
+@@ -7044,6 +7045,7 @@
+ 		&& (OBJECT_P (SUBREG_REG (lhs))))
+ 	  && GET_CODE (rhs) == CONST_INT
+ 	  && INTVAL (rhs) < HOST_BITS_PER_WIDE_INT
++	  && INTVAL (rhs) < mode_width
+ 	  && (new = extract_left_shift (lhs, INTVAL (rhs))) != 0)
+ 	new = make_extraction (mode, make_compound_operation (new, next_code),
+ 			       0, NULL_RTX, mode_width - INTVAL (rhs),
+@@ -7343,6 +7345,10 @@
+       && (GET_MODE_MASK (GET_MODE (x)) & ~mask) == 0)
+     return gen_lowpart (mode, x);
+ 
++  /* The arithmetic simplifications here do the wrong thing on vector modes.  */
++  if (VECTOR_MODE_P (mode) || VECTOR_MODE_P (GET_MODE (x)))
++      return gen_lowpart (mode, x);
++
+   switch (code)
+     {
+     case CLOBBER:
+@@ -9023,11 +9029,6 @@
+       if (GET_CODE (varop) == CLOBBER)
+ 	return NULL_RTX;
+ 
+-      /* If we discovered we had to complement VAROP, leave.  Making a NOT
+-	 here would cause an infinite loop.  */
+-      if (complement_p)
+-	break;
+-
+       /* Convert ROTATERT to ROTATE.  */
+       if (code == ROTATERT)
+ 	{
+@@ -9073,6 +9074,11 @@
+ 	    }
+ 	}
+ 
++      /* If we discovered we had to complement VAROP, leave.  Making a NOT
++	 here would cause an infinite loop.  */
++      if (complement_p)
++	break;
++
+       /* An arithmetic right shift of a quantity known to be -1 or 0
+ 	 is a no-op.  */
+       if (code == ASHIFTRT
+diff -Naur gcc-4.3.2.orig/gcc/config/alpha/alpha.c gcc-4.3.2/gcc/config/alpha/alpha.c
+--- gcc-4.3.2.orig/gcc/config/alpha/alpha.c	2008-02-07 09:45:24.000000000 -0800
++++ gcc-4.3.2/gcc/config/alpha/alpha.c	2008-09-08 16:16:55.000000000 -0700
+@@ -4599,8 +4599,6 @@
+   enum machine_mode mode = GET_MODE (mem);
+   rtx label, x, cond = gen_lowpart (DImode, scratch);
+ 
+-  emit_insn (gen_memory_barrier ());
+-
+   label = gen_rtx_LABEL_REF (DImode, gen_label_rtx ());
+   emit_label (XEXP (label, 0));
+ 
+@@ -4610,6 +4608,8 @@
+ 
+   x = gen_rtx_EQ (DImode, cond, const0_rtx);
+   emit_unlikely_jump (x, label);
++
++  emit_insn (gen_memory_barrier ());
+ }
+ 
+ void
+@@ -4648,7 +4648,6 @@
+   mem = gen_rtx_MEM (DImode, align);
+   MEM_VOLATILE_P (mem) = 1;
+ 
+-  emit_insn (gen_memory_barrier ());
+   label = gen_rtx_LABEL_REF (DImode, gen_label_rtx ());
+   emit_label (XEXP (label, 0));
+ 
+@@ -4672,6 +4671,8 @@
+ 
+   x = gen_rtx_EQ (DImode, scratch, const0_rtx);
+   emit_unlikely_jump (x, label);
++
++  emit_insn (gen_memory_barrier ());
+ }
+ 
+
+ /* Adjust the cost of a scheduling dependency.  Return the new cost of
+diff -Naur gcc-4.3.2.orig/gcc/config/avr/avr.md gcc-4.3.2/gcc/config/avr/avr.md
+--- gcc-4.3.2.orig/gcc/config/avr/avr.md	2008-06-07 08:48:25.000000000 -0700
++++ gcc-4.3.2/gcc/config/avr/avr.md	2008-09-12 10:29:38.000000000 -0700
+@@ -306,10 +306,11 @@
+ 
+ 
+ 
+-(define_peephole2
++(define_peephole2 ; movsi_lreg_const
+   [(match_scratch:QI 2 "d")
+    (set (match_operand:SI 0 "l_register_operand" "")
+-        (match_operand:SI 1 "immediate_operand" ""))]
++        (match_operand:SI 1 "immediate_operand" ""))
++   (match_dup 2)]
+   "(operands[1] != const0_rtx
+     && operands[1] != constm1_rtx)"
+   [(parallel [(set (match_dup 0) (match_dup 1))
+diff -Naur gcc-4.3.2.orig/gcc/config/cris/cris.c gcc-4.3.2/gcc/config/cris/cris.c
+--- gcc-4.3.2.orig/gcc/config/cris/cris.c	2008-05-11 16:52:49.000000000 -0700
++++ gcc-4.3.2/gcc/config/cris/cris.c	2008-11-05 10:10:36.000000000 -0800
+@@ -1795,6 +1795,21 @@
+       return true;
+ 
+     case MULT:
++      /* If we have one arm of an ADDI, make sure it gets the cost of
++	 one insn, i.e. zero cost for this operand, and just the cost
++	 of the PLUS, as the insn is created by combine from a PLUS
++	 and an ASHIFT, and the MULT cost below would make the
++	 combined value be larger than the separate insns.  The insn
++	 validity is checked elsewhere by combine.
++
++	 FIXME: this case is a stop-gap for 4.3 and 4.4, this whole
++	 function should be rewritten.  */
++      if (outer_code == PLUS && BIAP_INDEX_P (x))
++	{
++	  *total = 0;
++	  return true;
++	}
++
+       /* Identify values that are no powers of two.  Powers of 2 are
+          taken care of already and those values should not be changed.  */
+       if (!CONST_INT_P (XEXP (x, 1))
+@@ -3548,14 +3563,15 @@
+ }
+ 
+ /* Make sure operands are in the right order for an addsi3 insn as
+-   generated by a define_split.  A MEM as the first operand isn't
+-   recognized by addsi3 after reload.  OPERANDS contains the operands,
+-   with the first at OPERANDS[N] and the second at OPERANDS[N+1].  */
++   generated by a define_split.  Nothing but REG_P as the first
++   operand is recognized by addsi3 after reload.  OPERANDS contains
++   the operands, with the first at OPERANDS[N] and the second at
++   OPERANDS[N+1].  */
+ 
+ void
+ cris_order_for_addsi3 (rtx *operands, int n)
+ {
+-  if (MEM_P (operands[n]))
++  if (!REG_P (operands[n]))
+     {
+       rtx tem = operands[n];
+       operands[n] = operands[n + 1];
+diff -Naur gcc-4.3.2.orig/gcc/config/freebsd.h gcc-4.3.2/gcc/config/freebsd.h
+--- gcc-4.3.2.orig/gcc/config/freebsd.h	2007-08-02 03:49:31.000000000 -0700
++++ gcc-4.3.2/gcc/config/freebsd.h	2008-10-04 11:39:49.000000000 -0700
+@@ -55,6 +55,8 @@
+ #undef  LIB_SPEC
+ #define LIB_SPEC FBSD_LIB_SPEC
+ 
++/* Define this so we can compile MS code for use with WINE.  */
++#define HANDLE_PRAGMA_PACK_PUSH_POP 1
+ 
+ /************************[  Target stuff  ]***********************************/
+ 
+diff -Naur gcc-4.3.2.orig/gcc/config/i386/i386.c gcc-4.3.2/gcc/config/i386/i386.c
+--- gcc-4.3.2.orig/gcc/config/i386/i386.c	2008-05-21 01:54:15.000000000 -0700
++++ gcc-4.3.2/gcc/config/i386/i386.c	2008-08-28 06:31:33.000000000 -0700
+@@ -11332,6 +11332,10 @@
+       if (req_mode == CCZmode)
+ 	return 0;
+       /* FALLTHRU */
++    case CCAmode:
++    case CCCmode:
++    case CCOmode:
++    case CCSmode:
+     case CCZmode:
+       break;
+ 
+diff -Naur gcc-4.3.2.orig/gcc/config/i386/i386.md gcc-4.3.2/gcc/config/i386/i386.md
+--- gcc-4.3.2.orig/gcc/config/i386/i386.md	2008-06-24 02:36:12.000000000 -0700
++++ gcc-4.3.2/gcc/config/i386/i386.md	2008-08-28 06:31:33.000000000 -0700
+@@ -15210,7 +15210,7 @@
+ 
+ (define_insn "clzsi2_abm"
+   [(set (match_operand:SI 0 "register_operand" "=r")
+-        (clz:SI (match_operand:SI 1 "nonimmediate_operand" "")))
++        (clz:SI (match_operand:SI 1 "nonimmediate_operand" "rm")))
+    (clobber (reg:CC FLAGS_REG))]
+   "TARGET_ABM"
+   "lzcnt{l}\t{%1, %0|%0, %1}"
+@@ -15230,7 +15230,7 @@
+ 
+ (define_insn "popcountsi2"
+   [(set (match_operand:SI 0 "register_operand" "=r")
+-	(popcount:SI (match_operand:SI 1 "nonimmediate_operand" "")))
++	(popcount:SI (match_operand:SI 1 "nonimmediate_operand" "rm")))
+    (clobber (reg:CC FLAGS_REG))]
+   "TARGET_POPCNT"
+   "popcnt{l}\t{%1, %0|%0, %1}"
+@@ -15337,7 +15337,7 @@
+ 
+ (define_insn "clzdi2_abm"
+   [(set (match_operand:DI 0 "register_operand" "=r")
+-	(clz:DI (match_operand:DI 1 "nonimmediate_operand" "")))
++	(clz:DI (match_operand:DI 1 "nonimmediate_operand" "rm")))
+    (clobber (reg:CC FLAGS_REG))]
+   "TARGET_64BIT && TARGET_ABM"
+   "lzcnt{q}\t{%1, %0|%0, %1}"
+@@ -15357,7 +15357,7 @@
+ 
+ (define_insn "popcountdi2"
+   [(set (match_operand:DI 0 "register_operand" "=r")
+-	(popcount:DI (match_operand:DI 1 "nonimmediate_operand" "")))
++	(popcount:DI (match_operand:DI 1 "nonimmediate_operand" "rm")))
+    (clobber (reg:CC FLAGS_REG))]
+   "TARGET_64BIT && TARGET_POPCNT"
+   "popcnt{q}\t{%1, %0|%0, %1}"
+@@ -15398,7 +15398,7 @@
+ 
+ (define_insn "clzhi2_abm"
+   [(set (match_operand:HI 0 "register_operand" "=r")
+-	(clz:HI (match_operand:HI 1 "nonimmediate_operand" "")))
++	(clz:HI (match_operand:HI 1 "nonimmediate_operand" "rm")))
+    (clobber (reg:CC FLAGS_REG))]
+   "TARGET_ABM"
+   "lzcnt{w}\t{%1, %0|%0, %1}"
+@@ -15418,7 +15418,7 @@
+ 
+ (define_insn "popcounthi2"
+   [(set (match_operand:HI 0 "register_operand" "=r")
+-	(popcount:HI (match_operand:HI 1 "nonimmediate_operand" "")))
++	(popcount:HI (match_operand:HI 1 "nonimmediate_operand" "rm")))
+    (clobber (reg:CC FLAGS_REG))]
+   "TARGET_POPCNT"
+   "popcnt{w}\t{%1, %0|%0, %1}"
+diff -Naur gcc-4.3.2.orig/gcc/config/i386/mmx.md gcc-4.3.2/gcc/config/i386/mmx.md
+--- gcc-4.3.2.orig/gcc/config/i386/mmx.md	2007-10-24 22:41:37.000000000 -0700
++++ gcc-4.3.2/gcc/config/i386/mmx.md	2008-08-28 06:31:33.000000000 -0700
+@@ -485,10 +485,12 @@
+   DONE;
+ })
+ 
++;; Avoid combining registers from different units in a single alternative,
++;; see comment above inline_secondary_memory_needed function in i386.c
+ (define_insn_and_split "*vec_extractv2sf_0"
+-  [(set (match_operand:SF 0 "nonimmediate_operand"     "=x,y,m,m,frxy")
++  [(set (match_operand:SF 0 "nonimmediate_operand"     "=x, m,y ,m,f,r")
+ 	(vec_select:SF
+-	  (match_operand:V2SF 1 "nonimmediate_operand" " x,y,x,y,m")
++	  (match_operand:V2SF 1 "nonimmediate_operand" " xm,x,ym,y,m,m")
+ 	  (parallel [(const_int 0)])))]
+   "TARGET_MMX && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
+   "#"
+@@ -504,18 +506,23 @@
+   DONE;
+ })
+ 
++;; Avoid combining registers from different units in a single alternative,
++;; see comment above inline_secondary_memory_needed function in i386.c
+ (define_insn "*vec_extractv2sf_1"
+-  [(set (match_operand:SF 0 "nonimmediate_operand"     "=y,x,frxy")
++  [(set (match_operand:SF 0 "nonimmediate_operand"     "=y,x,y,x,f,r")
+ 	(vec_select:SF
+-	  (match_operand:V2SF 1 "nonimmediate_operand" " 0,0,o")
++	  (match_operand:V2SF 1 "nonimmediate_operand" " 0,0,o,o,o,o")
+ 	  (parallel [(const_int 1)])))]
+   "TARGET_MMX && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
+   "@
+    punpckhdq\t%0, %0
+    unpckhps\t%0, %0
++   #
++   #
++   #
+    #"
+-  [(set_attr "type" "mmxcvt,sselog1,*")
+-   (set_attr "mode" "DI,V4SF,SI")])
++  [(set_attr "type" "mmxcvt,sselog1,mmxmov,ssemov,fmov,imov")
++   (set_attr "mode" "DI,V4SF,SF,SF,SF,SF")])
+ 
+ (define_split
+   [(set (match_operand:SF 0 "register_operand" "")
+@@ -1151,10 +1158,12 @@
+   DONE;
+ })
+ 
++;; Avoid combining registers from different units in a single alternative,
++;; see comment above inline_secondary_memory_needed function in i386.c
+ (define_insn_and_split "*vec_extractv2si_0"
+-  [(set (match_operand:SI 0 "nonimmediate_operand"     "=x,y,m,m,frxy")
++  [(set (match_operand:SI 0 "nonimmediate_operand"     "=x,m,y, m,r")
+ 	(vec_select:SI
+-	  (match_operand:V2SI 1 "nonimmediate_operand" " x,y,x,y,m")
++	  (match_operand:V2SI 1 "nonimmediate_operand" "xm,x,ym,y,m")
+ 	  (parallel [(const_int 0)])))]
+   "TARGET_MMX && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
+   "#"
+@@ -1170,10 +1179,12 @@
+   DONE;
+ })
+ 
++;; Avoid combining registers from different units in a single alternative,
++;; see comment above inline_secondary_memory_needed function in i386.c
+ (define_insn "*vec_extractv2si_1"
+-  [(set (match_operand:SI 0 "nonimmediate_operand"     "=y,Y2,Y2,x,frxy")
++  [(set (match_operand:SI 0 "nonimmediate_operand"     "=y,Y2,Y2,x,y,x,r")
+ 	(vec_select:SI
+-	  (match_operand:V2SI 1 "nonimmediate_operand" " 0,0 ,Y2,0,o")
++	  (match_operand:V2SI 1 "nonimmediate_operand" " 0,0 ,Y2,0,o,o,o")
+ 	  (parallel [(const_int 1)])))]
+   "TARGET_MMX && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
+   "@
+@@ -1181,9 +1192,11 @@
+    punpckhdq\t%0, %0
+    pshufd\t{$85, %1, %0|%0, %1, 85}
+    unpckhps\t%0, %0
++   #
++   #
+    #"
+-  [(set_attr "type" "mmxcvt,sselog1,sselog1,sselog1,*")
+-   (set_attr "mode" "DI,TI,TI,V4SF,SI")])
++  [(set_attr "type" "mmxcvt,sselog1,sselog1,sselog1,mmxmov,ssemov,imov")
++   (set_attr "mode" "DI,TI,TI,V4SF,SI,SI,SI")])
+ 
+ (define_split
+   [(set (match_operand:SI 0 "register_operand" "")
+diff -Naur gcc-4.3.2.orig/gcc/config/i386/sse.md gcc-4.3.2/gcc/config/i386/sse.md
+--- gcc-4.3.2.orig/gcc/config/i386/sse.md	2008-08-17 07:57:00.000000000 -0700
++++ gcc-4.3.2/gcc/config/i386/sse.md	2008-12-01 04:28:05.000000000 -0800
+@@ -1521,10 +1521,12 @@
+   DONE;
+ })
+ 
++;; Avoid combining registers from different units in a single alternative,
++;; see comment above inline_secondary_memory_needed function in i386.c
+ (define_insn_and_split "*vec_extractv4sf_0"
+-  [(set (match_operand:SF 0 "nonimmediate_operand" "=x,m,fr")
++  [(set (match_operand:SF 0 "nonimmediate_operand" "=x,m,f,r")
+ 	(vec_select:SF
+-	  (match_operand:V4SF 1 "nonimmediate_operand" "xm,x,m")
++	  (match_operand:V4SF 1 "nonimmediate_operand" "xm,x,m,m")
+ 	  (parallel [(const_int 0)])))]
+   "TARGET_SSE && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
+   "#"
+@@ -3140,18 +3142,22 @@
+   [(set_attr "type" "sselog")
+    (set_attr "mode" "V2DF")])
+ 
++;; Avoid combining registers from different units in a single alternative,
++;; see comment above inline_secondary_memory_needed function in i386.c
+ (define_insn "sse2_storehpd"
+-  [(set (match_operand:DF 0 "nonimmediate_operand"     "=m,x,x*fr")
++  [(set (match_operand:DF 0 "nonimmediate_operand"     "=m,x,x,*f,r")
+ 	(vec_select:DF
+-	  (match_operand:V2DF 1 "nonimmediate_operand" " x,0,o")
++	  (match_operand:V2DF 1 "nonimmediate_operand" " x,0,o,o,o")
+ 	  (parallel [(const_int 1)])))]
+   "TARGET_SSE2 && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
+   "@
+    movhpd\t{%1, %0|%0, %1}
+    unpckhpd\t%0, %0
++   #
++   #
+    #"
+-  [(set_attr "type" "ssemov,sselog1,ssemov")
+-   (set_attr "mode" "V1DF,V2DF,DF")])
++  [(set_attr "type" "ssemov,sselog1,ssemov,fmov,imov")
++   (set_attr "mode" "V1DF,V2DF,DF,DF,DF")])
+ 
+ (define_split
+   [(set (match_operand:DF 0 "register_operand" "")
+@@ -3164,18 +3170,22 @@
+   operands[1] = adjust_address (operands[1], DFmode, 8);
+ })
+ 
++;; Avoid combining registers from different units in a single alternative,
++;; see comment above inline_secondary_memory_needed function in i386.c
+ (define_insn "sse2_storelpd"
+-  [(set (match_operand:DF 0 "nonimmediate_operand"     "=m,x,x*fr")
++  [(set (match_operand:DF 0 "nonimmediate_operand"     "=m,x,x,*f,r")
+ 	(vec_select:DF
+-	  (match_operand:V2DF 1 "nonimmediate_operand" " x,x,m")
++	  (match_operand:V2DF 1 "nonimmediate_operand" " x,x,m,m,m")
+ 	  (parallel [(const_int 0)])))]
+   "TARGET_SSE2 && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
+   "@
+    movlpd\t{%1, %0|%0, %1}
+    #
++   #
++   #
+    #"
+-  [(set_attr "type" "ssemov")
+-   (set_attr "mode" "V1DF,DF,DF")])
++  [(set_attr "type" "ssemov,ssemov,ssemov,fmov,imov")
++   (set_attr "mode" "V1DF,DF,DF,DF,DF")])
+ 
+ (define_split
+   [(set (match_operand:DF 0 "register_operand" "")
+@@ -3194,21 +3204,25 @@
+   DONE;
+ })
+ 
++;; Avoid combining registers from different units in a single alternative,
++;; see comment above inline_secondary_memory_needed function in i386.c
+ (define_insn "sse2_loadhpd"
+-  [(set (match_operand:V2DF 0 "nonimmediate_operand"     "=x,x,x,o")
++  [(set (match_operand:V2DF 0 "nonimmediate_operand"     "=x,x,x,o,o,o")
+ 	(vec_concat:V2DF
+ 	  (vec_select:DF
+-	    (match_operand:V2DF 1 "nonimmediate_operand" " 0,0,x,0")
++	    (match_operand:V2DF 1 "nonimmediate_operand" " 0,0,x,0,0,0")
+ 	    (parallel [(const_int 0)]))
+-	  (match_operand:DF 2 "nonimmediate_operand"     " m,x,0,x*fr")))]
++	  (match_operand:DF 2 "nonimmediate_operand"     " m,x,0,x,*f,r")))]
+   "TARGET_SSE2 && !(MEM_P (operands[1]) && MEM_P (operands[2]))"
+   "@
+    movhpd\t{%2, %0|%0, %2}
+    unpcklpd\t{%2, %0|%0, %2}
+    shufpd\t{$1, %1, %0|%0, %1, 1}
++   #
++   #
+    #"
+-  [(set_attr "type" "ssemov,sselog,sselog,other")
+-   (set_attr "mode" "V1DF,V2DF,V2DF,DF")])
++  [(set_attr "type" "ssemov,sselog,sselog,ssemov,fmov,imov")
++   (set_attr "mode" "V1DF,V2DF,V2DF,DF,DF,DF")])
+ 
+ (define_split
+   [(set (match_operand:V2DF 0 "memory_operand" "")
+@@ -3221,12 +3235,14 @@
+   operands[0] = adjust_address (operands[0], DFmode, 8);
+ })
+ 
++;; Avoid combining registers from different units in a single alternative,
++;; see comment above inline_secondary_memory_needed function in i386.c
+ (define_insn "sse2_loadlpd"
+-  [(set (match_operand:V2DF 0 "nonimmediate_operand"    "=x,x,x,x,x,m")
++  [(set (match_operand:V2DF 0 "nonimmediate_operand"    "=x,x,x,x,x,m,m,m")
+ 	(vec_concat:V2DF
+-	  (match_operand:DF 2 "nonimmediate_operand"    " m,m,x,0,0,x*fr")
++	  (match_operand:DF 2 "nonimmediate_operand"    " m,m,x,0,0,x,*f,r")
+ 	  (vec_select:DF
+-	    (match_operand:V2DF 1 "vector_move_operand" " C,0,0,x,o,0")
++	    (match_operand:V2DF 1 "vector_move_operand" " C,0,0,x,o,0,0,0")
+ 	    (parallel [(const_int 1)]))))]
+   "TARGET_SSE2 && !(MEM_P (operands[1]) && MEM_P (operands[2]))"
+   "@
+@@ -3235,9 +3251,11 @@
+    movsd\t{%2, %0|%0, %2}
+    shufpd\t{$2, %2, %0|%0, %2, 2}
+    movhpd\t{%H1, %0|%0, %H1}
++   #
++   #
+    #"
+-  [(set_attr "type" "ssemov,ssemov,ssemov,sselog,ssemov,other")
+-   (set_attr "mode" "DF,V1DF,V1DF,V2DF,V1DF,DF")])
++  [(set_attr "type" "ssemov,ssemov,ssemov,sselog,ssemov,ssemov,fmov,imov")
++   (set_attr "mode" "DF,V1DF,V1DF,V2DF,V1DF,DF,DF,DF")])
+ 
+ (define_split
+   [(set (match_operand:V2DF 0 "memory_operand" "")
+@@ -5923,7 +5941,7 @@
+ (define_insn "*sse2_mfence"
+   [(set (match_operand:BLK 0 "" "")
+ 	(unspec:BLK [(match_dup 0)] UNSPEC_MFENCE))]
+-  "TARGET_SSE2"
++  "TARGET_64BIT || TARGET_SSE2"
+   "mfence"
+   [(set_attr "type" "sse")
+    (set_attr "memory" "unknown")])
+diff -Naur gcc-4.3.2.orig/gcc/config/i386/sync.md gcc-4.3.2/gcc/config/i386/sync.md
+--- gcc-4.3.2.orig/gcc/config/i386/sync.md	2007-09-19 14:41:08.000000000 -0700
++++ gcc-4.3.2/gcc/config/i386/sync.md	2008-12-01 04:28:05.000000000 -0800
+@@ -31,6 +31,29 @@
+ (define_mode_attr doublemodesuffix [(DI "8") (TI "16")])
+ (define_mode_attr DCASHMODE [(DI "SI") (TI "DI")])
+ 
++(define_expand "memory_barrier"
++  [(set (match_dup 0)
++	(unspec:BLK [(match_dup 0)] UNSPEC_MFENCE))]
++  ""
++{
++  operands[0] = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (Pmode));
++  MEM_VOLATILE_P (operands[0]) = 1;
++
++  if (!(TARGET_64BIT || TARGET_SSE2))
++    {
++      emit_insn (gen_memory_barrier_nosse (operands[0]));
++      DONE;
++    }
++})
++
++(define_insn "memory_barrier_nosse"
++  [(set (match_operand:BLK 0 "" "")
++	(unspec:BLK [(match_dup 0)] UNSPEC_MFENCE))
++   (clobber (reg:CC FLAGS_REG))]
++  "!(TARGET_64BIT || TARGET_SSE2)"
++  "lock{%;| }or{l}\t{$0, (%%esp)|DWORD PTR [esp], 0}"
++  [(set_attr "memory" "unknown")])
++
+ ;; ??? It would be possible to use cmpxchg8b on pentium for DImode
+ ;; changes.  It's complicated because the insn uses ecx:ebx as the
+ ;; new value; note that the registers are reversed from the order
+@@ -81,7 +104,7 @@
+ 	  UNSPECV_CMPXCHG_1))
+    (clobber (reg:CC FLAGS_REG))]
+   "TARGET_CMPXCHG"
+-  "lock{%;| } cmpxchg{<modesuffix>}\t{%3, %1|%1, %3}")
++  "lock{%;| }cmpxchg{<modesuffix>}\t{%3, %1|%1, %3}")
+ 
+ (define_insn "sync_double_compare_and_swap<mode>"
+   [(set (match_operand:DCASMODE 0 "register_operand" "=A")
+diff -Naur gcc-4.3.2.orig/gcc/config/i386/t-sol2 gcc-4.3.2/gcc/config/i386/t-sol2
+--- gcc-4.3.2.orig/gcc/config/i386/t-sol2	2004-11-17 17:07:18.000000000 -0800
++++ gcc-4.3.2/gcc/config/i386/t-sol2	1969-12-31 16:00:00.000000000 -0800
+@@ -1,34 +0,0 @@
+-# gmon build rule:
+-$(T)gmon.o:	$(srcdir)/config/i386/gmon-sol2.c $(GCC_PASSES) $(CONFIG_H)
+-	$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) \
+-		-c $(srcdir)/config/i386/gmon-sol2.c -o $(T)gmon.o
+-
+-# Assemble startup files.
+-# Apparently Sun believes that assembler files don't need comments, because no
+-# single ASCII character is valid (tried them all).  So we manually strip out
+-# the comments with sed.  This bug may only be in the Early Access releases.
+-$(T)gcrt1.o: $(srcdir)/config/i386/sol2-gc1.asm $(GCC_PASSES)
+-	sed -e '/^!/d' <$(srcdir)/config/i386/sol2-gc1.asm >gcrt1.s
+-	$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)gcrt1.o gcrt1.s
+-$(T)crt1.o: $(srcdir)/config/i386/sol2-c1.asm $(GCC_PASSES)
+-	sed -e '/^!/d' <$(srcdir)/config/i386/sol2-c1.asm >crt1.s
+-	$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)crt1.o crt1.s
+-$(T)crti.o: $(srcdir)/config/i386/sol2-ci.asm $(GCC_PASSES)
+-	sed -e '/^!/d' <$(srcdir)/config/i386/sol2-ci.asm >crti.s
+-	$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)crti.o crti.s
+-$(T)crtn.o: $(srcdir)/config/i386/sol2-cn.asm $(GCC_PASSES)
+-	sed -e '/^!/d' <$(srcdir)/config/i386/sol2-cn.asm >crtn.s
+-	$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)crtn.o crtn.s
+-
+-# We need to use -fPIC when we are using gcc to compile the routines in
+-# crtstuff.c.  This is only really needed when we are going to use gcc/g++
+-# to produce a shared library, but since we don't know ahead of time when
+-# we will be doing that, we just always use -fPIC when compiling the
+-# routines in crtstuff.c.
+-#
+-# We must also enable optimization to avoid having any code appear after
+-# the call & alignment statement, but before we switch back to the
+-# .text section.
+-
+-CRTSTUFF_T_CFLAGS = -fPIC -O2
+-TARGET_LIBGCC2_CFLAGS = -fPIC
+diff -Naur gcc-4.3.2.orig/gcc/config/i386/winnt.c gcc-4.3.2/gcc/config/i386/winnt.c
+--- gcc-4.3.2.orig/gcc/config/i386/winnt.c	2008-05-11 14:03:27.000000000 -0700
++++ gcc-4.3.2/gcc/config/i386/winnt.c	2008-12-03 23:13:05.000000000 -0800
+@@ -32,6 +32,7 @@
+ #include "tm_p.h"
+ #include "toplev.h"
+ #include "hashtab.h"
++#include "langhooks.h"
+ #include "ggc.h"
+ #include "target.h"
+ 
+@@ -258,27 +259,19 @@
+   switch (TREE_CODE (decl))
+     {
+     case FUNCTION_DECL:
+-      if (first)
++      /* FIXME:  Imported stdcall names are not modified by the Ada frontend.
++	 Check and decorate the RTL name now.  */
++      if  (strcmp (lang_hooks.name, "GNU Ada") == 0)
+ 	{
+-	  /* FIXME: In Ada, and perhaps other language frontends,
+-	     imported stdcall names may not yet have been modified.
+-	     Check and do it know.  */
+-         tree new_id;
+-         tree old_id = DECL_ASSEMBLER_NAME (decl);
+-     	  const char* asm_str = IDENTIFIER_POINTER (old_id);
+-          /* Do not change the identifier if a verbatim asmspec
++	  tree new_id;
++	  tree old_id = DECL_ASSEMBLER_NAME (decl);
++	  const char* asm_str = IDENTIFIER_POINTER (old_id);
++	  /* Do not change the identifier if a verbatim asmspec
+ 	     or if stdcall suffix already added. */
+-      	  if (*asm_str == '*' || strchr (asm_str, '@'))
+-            break;
+-	  if ((new_id = i386_pe_maybe_mangle_decl_assembler_name (decl, old_id)))
+-	    {
+-	      /* These attributes must be present on first declaration,
+-		 change_decl_assembler_name will warn if they are added
+-		 later and the decl has been referenced, but duplicate_decls
+-		 should catch the mismatch first.  */
+-	      change_decl_assembler_name (decl, new_id);
+-	      XSTR (symbol, 0) = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
+-	    }
++	  if (!(*asm_str == '*' || strchr (asm_str, '@'))
++	      && (new_id = i386_pe_maybe_mangle_decl_assembler_name (decl,
++								     old_id)))
++	    XSTR (symbol, 0) = IDENTIFIER_POINTER (new_id);
+ 	}
+       break;
+ 
+diff -Naur gcc-4.3.2.orig/gcc/config/mips/mips.opt gcc-4.3.2/gcc/config/mips/mips.opt
+--- gcc-4.3.2.orig/gcc/config/mips/mips.opt	2007-09-23 12:18:27.000000000 -0700
++++ gcc-4.3.2/gcc/config/mips/mips.opt	2008-10-22 15:31:03.000000000 -0700
+@@ -241,7 +241,7 @@
+ Restrict the use of hardware floating-point instructions to 32-bit operations
+ 
+ msmartmips
+-Target Report RejectNegative Mask(SMARTMIPS)
++Target Report Mask(SMARTMIPS)
+ Use SmartMIPS instructions
+ 
+ msoft-float
+diff -Naur gcc-4.3.2.orig/gcc/config/pa/pa.c gcc-4.3.2/gcc/config/pa/pa.c
+--- gcc-4.3.2.orig/gcc/config/pa/pa.c	2008-02-09 12:34:47.000000000 -0800
++++ gcc-4.3.2/gcc/config/pa/pa.c	2008-10-04 11:06:46.000000000 -0700
+@@ -715,8 +715,8 @@
+ 
+       if (function_label_operand (orig, mode))
+ 	{
+-	  /* Force function label into memory.  */
+-	  orig = XEXP (force_const_mem (mode, orig), 0);
++	  /* Force function label into memory in word mode.  */
++	  orig = XEXP (force_const_mem (word_mode, orig), 0);
+ 	  /* Load plabel address from DLT.  */
+ 	  emit_move_insn (tmp_reg,
+ 			  gen_rtx_PLUS (word_mode, pic_offset_table_rtx,
+diff -Naur gcc-4.3.2.orig/gcc/config/pa/pa64-hpux.h gcc-4.3.2/gcc/config/pa/pa64-hpux.h
+--- gcc-4.3.2.orig/gcc/config/pa/pa64-hpux.h	2008-01-16 19:55:34.000000000 -0800
++++ gcc-4.3.2/gcc/config/pa/pa64-hpux.h	2008-12-12 16:18:00.000000000 -0800
+@@ -84,7 +84,7 @@
+ #undef LINK_GCC_C_SEQUENCE_SPEC
+ #define LINK_GCC_C_SEQUENCE_SPEC "\
+   %G %L %G %{!nostdlib:%{!nodefaultlibs:%{!shared:-lgcc_stub}\
+-  /usr/lib/pa20_64/milli.a}}"
++  milli.a%s}}"
+ 
+ /* Under hpux11, the normal location of the `ld' and `as' programs is the
+    /usr/ccs/bin directory.  */
+diff -Naur gcc-4.3.2.orig/gcc/config/rs6000/altivec.md gcc-4.3.2/gcc/config/rs6000/altivec.md
+--- gcc-4.3.2.orig/gcc/config/rs6000/altivec.md	2007-08-22 13:32:18.000000000 -0700
++++ gcc-4.3.2/gcc/config/rs6000/altivec.md	2008-08-31 05:26:20.000000000 -0700
+@@ -1,5 +1,5 @@
+ ;; AltiVec patterns.
+-;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
++;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008
+ ;; Free Software Foundation, Inc.
+ ;; Contributed by Aldy Hernandez (aldy@quesejoda.com)
+ 
+@@ -256,15 +256,15 @@
+ })
+ 
+ (define_split
+-  [(set (match_operand:VI 0 "altivec_register_operand" "")
+-	(match_operand:VI 1 "easy_vector_constant_add_self" ""))]
++  [(set (match_operand:V 0 "altivec_register_operand" "")
++	(match_operand:V 1 "easy_vector_constant_add_self" ""))]
+   "TARGET_ALTIVEC && reload_completed"
+   [(set (match_dup 0) (match_dup 3))
+-   (set (match_dup 0) (plus:VI (match_dup 0)
+-			       (match_dup 0)))]
++   (set (match_dup 0) (match_dup 4))]
+ {
+   rtx dup = gen_easy_altivec_constant (operands[1]);
+   rtx const_vec;
++  enum machine_mode op_mode = <MODE>mode;
+ 
+   /* Divide the operand of the resulting VEC_DUPLICATE, and use
+      simplify_rtx to make a CONST_VECTOR.  */
+@@ -272,10 +272,16 @@
+ 						   XEXP (dup, 0), const1_rtx);
+   const_vec = simplify_rtx (dup);
+ 
+-  if (GET_MODE (const_vec) == <MODE>mode)
++  if (op_mode == V4SFmode)
++    {
++      op_mode = V4SImode;
++      operands[0] = gen_lowpart (op_mode, operands[0]);
++    }
++  if (GET_MODE (const_vec) == op_mode)
+     operands[3] = const_vec;
+   else
+-    operands[3] = gen_lowpart (<MODE>mode, const_vec);
++    operands[3] = gen_lowpart (op_mode, const_vec);
++  operands[4] = gen_rtx_PLUS (op_mode, operands[0], operands[0]);
+ })
+ 
+ (define_insn "get_vrsave_internal"
+diff -Naur gcc-4.3.2.orig/gcc/config/rs6000/predicates.md gcc-4.3.2/gcc/config/rs6000/predicates.md
+--- gcc-4.3.2.orig/gcc/config/rs6000/predicates.md	2008-06-28 12:41:29.000000000 -0700
++++ gcc-4.3.2/gcc/config/rs6000/predicates.md	2008-08-31 05:26:20.000000000 -0700
+@@ -1,5 +1,5 @@
+ ;; Predicate definitions for POWER and PowerPC.
+-;; Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
++;; Copyright (C) 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+ ;;
+ ;; This file is part of GCC.
+ ;;
+@@ -325,8 +325,8 @@
+        (and (match_test "TARGET_ALTIVEC")
+ 	    (match_test "easy_altivec_constant (op, mode)")))
+ {
+-  rtx last = CONST_VECTOR_ELT (op, GET_MODE_NUNITS (mode) - 1);
+-  HOST_WIDE_INT val = ((INTVAL (last) & 0xff) ^ 0x80) - 0x80;
++  HOST_WIDE_INT val = const_vector_elt_as_int (op, GET_MODE_NUNITS (mode) - 1);
++  val = ((val & 0xff) ^ 0x80) - 0x80;
+   return EASY_VECTOR_15_ADD_SELF (val);
+ })
+ 
+diff -Naur gcc-4.3.2.orig/gcc/config/rs6000/rs6000-protos.h gcc-4.3.2/gcc/config/rs6000/rs6000-protos.h
+--- gcc-4.3.2.orig/gcc/config/rs6000/rs6000-protos.h	2008-01-26 09:18:35.000000000 -0800
++++ gcc-4.3.2/gcc/config/rs6000/rs6000-protos.h	2008-08-31 05:26:20.000000000 -0700
+@@ -1,5 +1,5 @@
+ /* Definitions of target machine for GNU compiler, for IBM RS/6000.
+-   Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
++   Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+    Free Software Foundation, Inc.
+    Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
+ 
+@@ -31,6 +31,7 @@
+ #endif /* TREE_CODE */
+ 
+ extern bool easy_altivec_constant (rtx, enum machine_mode);
++extern HOST_WIDE_INT const_vector_elt_as_int (rtx, unsigned int);
+ extern bool macho_lo_sum_memory_operand (rtx, enum machine_mode);
+ extern int num_insns_constant (rtx, enum machine_mode);
+ extern int num_insns_constant_wide (HOST_WIDE_INT);
+diff -Naur gcc-4.3.2.orig/gcc/config/rs6000/rs6000.c gcc-4.3.2/gcc/config/rs6000/rs6000.c
+--- gcc-4.3.2.orig/gcc/config/rs6000/rs6000.c	2008-06-10 10:13:57.000000000 -0700
++++ gcc-4.3.2/gcc/config/rs6000/rs6000.c	2008-11-18 14:07:58.000000000 -0800
+@@ -2545,7 +2545,7 @@
+    corresponding element of the vector, but for V4SFmode and V2SFmode,
+    the corresponding "float" is interpreted as an SImode integer.  */
+ 
+-static HOST_WIDE_INT
++HOST_WIDE_INT
+ const_vector_elt_as_int (rtx op, unsigned int elt)
+ {
+   rtx tmp = CONST_VECTOR_ELT (op, elt);
+@@ -6786,7 +6786,8 @@
+       else if (reg == fpr && TYPE_MODE (type) == TDmode)
+ 	{
+ 	  regalign = 1;
+-	  t = build2 (BIT_IOR_EXPR, TREE_TYPE (reg), reg, size_int (1));
++	  t = build2 (BIT_IOR_EXPR, TREE_TYPE (reg), reg,
++		      build_int_cst (TREE_TYPE (reg), 1));
+ 	  u = build2 (MODIFY_EXPR, void_type_node, reg, t);
+ 	}
+ 
+@@ -6826,7 +6827,8 @@
+ 	{
+ 	  /* Ensure that we don't find any more args in regs.
+ 	     Alignment has taken care of for special cases.  */
+-	  t = build2 (GIMPLE_MODIFY_STMT, TREE_TYPE (reg), reg, size_int (8));
++	  t = build_gimple_modify_stmt (reg,
++					build_int_cst (TREE_TYPE (reg), 8));
+ 	  gimplify_and_add (t, pre_p);
+ 	}
+     }
+@@ -11188,6 +11190,10 @@
+     case FIELD_DECL:
+     case RESULT_DECL:
+     case REAL_CST:
++    case INDIRECT_REF:
++    case ALIGN_INDIRECT_REF:
++    case MISALIGNED_INDIRECT_REF:
++    case VIEW_CONVERT_EXPR:
+       if (TYPE_MODE (TREE_TYPE (*tp)) == SDmode)
+ 	return *tp;
+       break;
+@@ -13829,7 +13835,8 @@
+   HOST_WIDE_INT imask = GET_MODE_MASK (mode);
+ 
+   /* Shift amount for subword relative to aligned word.  */
+-  addrSI = force_reg (SImode, gen_lowpart_common (SImode, XEXP (mem, 0)));
++  addrSI = force_reg (GET_MODE (XEXP (mem, 0)), XEXP (mem, 0));
++  addrSI = force_reg (SImode, gen_lowpart_common (SImode, addrSI));
+   shift = gen_reg_rtx (SImode);
+   emit_insn (gen_rlwinm (shift, addrSI, GEN_INT (3),
+ 			 GEN_INT (shift_mask)));
+@@ -19831,8 +19838,10 @@
+     default: break;
+     }
+ 
+-  if (result && result != type && TYPE_READONLY (type))
+-    result = build_qualified_type (result, TYPE_QUAL_CONST);
++  /* Propagate qualifiers attached to the element type
++     onto the vector type.  */
++  if (result && result != type && TYPE_QUALS (type))
++    result = build_qualified_type (result, TYPE_QUALS (type));
+ 
+   *no_add_attrs = true;  /* No need to hang on to the attribute.  */
+ 
+diff -Naur gcc-4.3.2.orig/gcc/config/s390/s390.h gcc-4.3.2/gcc/config/s390/s390.h
+--- gcc-4.3.2.orig/gcc/config/s390/s390.h	2008-02-07 11:01:45.000000000 -0800
++++ gcc-4.3.2/gcc/config/s390/s390.h	2008-11-12 10:06:29.000000000 -0800
+@@ -533,9 +533,7 @@
+ /* Defining this macro makes __builtin_frame_address(0) and 
+    __builtin_return_address(0) work with -fomit-frame-pointer.  */
+ #define INITIAL_FRAME_ADDRESS_RTX                                             \
+-  (TARGET_PACKED_STACK ?                                                      \
+-   plus_constant (arg_pointer_rtx, -UNITS_PER_WORD) :                         \
+-   plus_constant (arg_pointer_rtx, -STACK_POINTER_OFFSET))
++  (plus_constant (arg_pointer_rtx, -STACK_POINTER_OFFSET))
+ 
+ /* The return address of the current frame is retrieved
+    from the initial value of register RETURN_REGNUM.
+@@ -545,6 +543,16 @@
+   (TARGET_PACKED_STACK ?                                                      \
+    plus_constant ((FRAME), STACK_POINTER_OFFSET - UNITS_PER_WORD) : (FRAME))
+ 
++/* For -mpacked-stack this adds 160 - 8 (96 - 4) to the output of
++   builtin_frame_address.  Otherwise arg pointer -
++   STACK_POINTER_OFFSET would be returned for
++   __builtin_frame_address(0) what might result in an address pointing
++   somewhere into the middle of the local variables since the packed
++   stack layout generally does not need all the bytes in the register
++   save area.  */
++#define FRAME_ADDR_RTX(FRAME)			\
++  DYNAMIC_CHAIN_ADDRESS ((FRAME))
++
+ #define RETURN_ADDR_RTX(COUNT, FRAME)					      \
+   s390_return_addr_rtx ((COUNT), DYNAMIC_CHAIN_ADDRESS ((FRAME)))
+ 
+diff -Naur gcc-4.3.2.orig/gcc/config/sh/sh.c gcc-4.3.2/gcc/config/sh/sh.c
+--- gcc-4.3.2.orig/gcc/config/sh/sh.c	2008-07-15 15:44:54.000000000 -0700
++++ gcc-4.3.2/gcc/config/sh/sh.c	2008-10-30 20:43:20.000000000 -0700
+@@ -3785,6 +3785,10 @@
+ 
+   if (optimize)
+     {
++      /* If NEW_MOVA has no address yet, it will be handled later.  */
++      if (INSN_ADDRESSES_SIZE() <= (unsigned) INSN_UID (new_mova))
++	return -1;
++
+       n_addr = INSN_ADDRESSES (INSN_UID (new_mova));
+       n_target = INSN_ADDRESSES (INSN_UID (XEXP (MOVA_LABELREF (new_mova), 0)));
+       if (n_addr > n_target || n_addr + 1022 < n_target)
+diff -Naur gcc-4.3.2.orig/gcc/config/sh/t-sh gcc-4.3.2/gcc/config/sh/t-sh
+--- gcc-4.3.2.orig/gcc/config/sh/t-sh	2006-11-29 06:35:38.000000000 -0800
++++ gcc-4.3.2/gcc/config/sh/t-sh	2008-10-25 17:10:27.000000000 -0700
+@@ -101,7 +101,7 @@
+ $(T)udivsi3_i4i-Os-4-200.o: $(srcdir)/config/sh/lib1funcs-Os-4-200.asm $(GCC_PASSES)
+ 	$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $@ -DL_udivsi3_i4i -x assembler-with-cpp $<
+ $(T)unwind-dw2-Os-4-200.o: $(srcdir)/unwind-dw2.c $(srcdir)/unwind-generic.h unwind-pe.h unwind.inc unwind-dw2-fde.h unwind-dw2.h $(CONFIG_H) coretypes.h $(TM_H) $(MACHMODE_H) longlong.h config.status stmp-int-hdrs tsystem.h $(GCC_PASSES)
+-	$(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) $(vis_hide) -fexceptions -Os -c -o $@ $<
++	$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) $(LIBGCC2_CFLAGS) $(INCLUDES) $(vis_hide) -fexceptions -Os -c -o $@ $<
+ OBJS_Os_4_200=$(T)sdivsi3_i4i-Os-4-200.o $(T)udivsi3_i4i-Os-4-200.o $(T)unwind-dw2-Os-4-200.o
+ $(T)libgcc-Os-4-200.a: $(OBJS_Os_4_200) $(GCC_PASSES)
+ 	$(AR_CREATE_FOR_TARGET) $@ $(OBJS_Os_4_200)
+diff -Naur gcc-4.3.2.orig/gcc/config/soft-fp/fixdfti.c gcc-4.3.2/gcc/config/soft-fp/fixdfti.c
+--- gcc-4.3.2.orig/gcc/config/soft-fp/fixdfti.c	2007-05-16 10:07:07.000000000 -0700
++++ gcc-4.3.2/gcc/config/soft-fp/fixdfti.c	2008-11-26 06:08:24.000000000 -0800
+@@ -31,7 +31,7 @@
+ #include "soft-fp.h"
+ #include "double.h"
+ 
+-TItype __fixdfti(TFtype a)
++TItype __fixdfti(DFtype a)
+ {
+   FP_DECL_EX;
+   FP_DECL_D(A);
+diff -Naur gcc-4.3.2.orig/gcc/config/soft-fp/floatuntisf.c gcc-4.3.2/gcc/config/soft-fp/floatuntisf.c
+--- gcc-4.3.2.orig/gcc/config/soft-fp/floatuntisf.c	2007-05-16 10:07:07.000000000 -0700
++++ gcc-4.3.2/gcc/config/soft-fp/floatuntisf.c	2008-11-26 06:08:24.000000000 -0800
+@@ -31,7 +31,7 @@
+ #include "soft-fp.h"
+ #include "single.h"
+ 
+-SFtype __floatundisf(UTItype i)
++SFtype __floatuntisf(UTItype i)
+ {
+   FP_DECL_EX;
+   FP_DECL_S(A);
+diff -Naur gcc-4.3.2.orig/gcc/config/sparc/predicates.md gcc-4.3.2/gcc/config/sparc/predicates.md
+--- gcc-4.3.2.orig/gcc/config/sparc/predicates.md	2007-08-02 03:49:31.000000000 -0700
++++ gcc-4.3.2/gcc/config/sparc/predicates.md	2008-11-06 06:57:15.000000000 -0800
+@@ -475,3 +475,7 @@
+   (and (match_code "mem")
+        (and (match_operand 0 "memory_operand")
+ 	    (match_test "REG_P (XEXP (op, 0))"))))
++
++;; Return true if OP is a const_double or const_vector.
++(define_predicate "const_double_or_vector_operand"
++  (match_code "const_double,const_vector"))
+diff -Naur gcc-4.3.2.orig/gcc/config/sparc/sparc.c gcc-4.3.2/gcc/config/sparc/sparc.c
+--- gcc-4.3.2.orig/gcc/config/sparc/sparc.c	2007-12-06 05:25:37.000000000 -0800
++++ gcc-4.3.2/gcc/config/sparc/sparc.c	2008-11-22 04:44:43.000000000 -0800
+@@ -575,7 +575,7 @@
+ #undef TARGET_HANDLE_OPTION
+ #define TARGET_HANDLE_OPTION sparc_handle_option
+ 
+-#if TARGET_GNU_TLS
++#if TARGET_GNU_TLS && defined(HAVE_AS_SPARC_UA_PCREL)
+ #undef TARGET_ASM_OUTPUT_DWARF_DTPREL
+ #define TARGET_ASM_OUTPUT_DWARF_DTPREL sparc_output_dwarf_dtprel
+ #endif
+@@ -5118,15 +5118,13 @@
+    Return an expression valid as a return value for the two macros
+    FUNCTION_ARG and FUNCTION_VALUE.
+ 
+-   SIZE is the size in bytes of the vector.
+-   BASE_MODE is the argument's base machine mode.
++   SIZE is the size in bytes of the vector (at least 8 bytes).
+    REGNO is the FP hard register the vector will be passed in.  */
+ 
+ static rtx
+-function_arg_vector_value (int size, enum machine_mode base_mode, int regno)
++function_arg_vector_value (int size, int regno)
+ {
+-  unsigned short base_mode_size = GET_MODE_SIZE (base_mode);
+-  int nregs = size / base_mode_size, i;
++  int i, nregs = size / 8;
+   rtx regs;
+ 
+   regs = gen_rtx_PARALLEL (BLKmode, rtvec_alloc (nregs));
+@@ -5135,9 +5133,8 @@
+     {
+       XVECEXP (regs, 0, i)
+ 	= gen_rtx_EXPR_LIST (VOIDmode,
+-			     gen_rtx_REG (base_mode, regno),
+-			     GEN_INT (base_mode_size * i));
+-      regno += base_mode_size / 4;
++			     gen_rtx_REG (DImode, regno + 2*i),
++			     GEN_INT (i*8));
+     }
+ 
+   return regs;
+@@ -5183,7 +5180,6 @@
+ 
+       if (mode == BLKmode)
+ 	return function_arg_vector_value (size,
+-					  TYPE_MODE (TREE_TYPE (type)),
+ 					  SPARC_FP_ARG_FIRST + 2*slotno);
+       else
+ 	mclass = MODE_FLOAT;
+@@ -5599,7 +5595,6 @@
+ 
+       if (mode == BLKmode)
+ 	return function_arg_vector_value (size,
+-					  TYPE_MODE (TREE_TYPE (type)),
+ 					  SPARC_FP_ARG_FIRST);
+       else
+ 	mclass = MODE_FLOAT;
+@@ -8334,6 +8329,10 @@
+ 
+   switch (c)
+     {
++    case 'D':
++      return (GET_MODE_CLASS (GET_MODE (op)) == MODE_VECTOR_INT
++	      && GET_CODE (op) == CONST_VECTOR);
++
+     case 'Q':
+       return fp_sethi_p (op);
+ 
+diff -Naur gcc-4.3.2.orig/gcc/config/sparc/sparc.h gcc-4.3.2/gcc/config/sparc/sparc.h
+--- gcc-4.3.2.orig/gcc/config/sparc/sparc.h	2007-12-06 05:25:37.000000000 -0800
++++ gcc-4.3.2/gcc/config/sparc/sparc.h	2008-11-06 06:57:15.000000000 -0800
+@@ -1870,6 +1870,8 @@
+ 
+ /* Optional extra constraints for this machine.
+ 
++   'D' handles vector constants.
++
+    'Q' handles floating point constants which can be moved into
+        an integer register with a single sethi instruction.
+ 
+diff -Naur gcc-4.3.2.orig/gcc/config/sparc/sparc.md gcc-4.3.2/gcc/config/sparc/sparc.md
+--- gcc-4.3.2.orig/gcc/config/sparc/sparc.md	2007-10-18 21:29:38.000000000 -0700
++++ gcc-4.3.2/gcc/config/sparc/sparc.md	2008-11-30 11:21:10.000000000 -0800
+@@ -2531,7 +2531,7 @@
+ ;; We have available v9 double floats but not 64-bit integer registers.
+ (define_insn "*movdf_insn_sp32_v9"
+   [(set (match_operand:V64 0 "nonimmediate_operand" "=b,e,e,T,W,U,T,f,*r,o")
+-        (match_operand:V64 1 "input_operand" "GY,e,W#F,GY,e,T,U,o#F,*roGYF,*rGYf"))]
++        (match_operand:V64 1 "input_operand" "GY,e,W#F,GY,e,T,U,o#F,*roGYDF,*rGYf"))]
+   "TARGET_FPU
+    && TARGET_V9
+    && ! TARGET_ARCH64
+@@ -2572,7 +2572,7 @@
+ ;; We have available both v9 double floats and 64-bit integer registers.
+ (define_insn "*movdf_insn_sp64"
+   [(set (match_operand:V64 0 "nonimmediate_operand" "=b,e,e,W,*r,*r,m,*r")
+-        (match_operand:V64 1 "input_operand"    "GY,e,W#F,e,*rGY,m,*rGY,F"))]
++        (match_operand:V64 1 "input_operand"    "GY,e,W#F,e,*rGY,m,*rGY,DF"))]
+   "TARGET_FPU
+    && TARGET_ARCH64
+    && (register_operand (operands[0], <V64:MODE>mode)
+@@ -2603,22 +2603,17 @@
+   stx\t%r1, %0"
+   [(set_attr "type" "*,load,store")])
+ 
+-;; This pattern build DFmode constants in integer registers.
++;; This pattern builds V64mode constants in integer registers.
+ (define_split
+-  [(set (match_operand:DF 0 "register_operand" "")
+-        (match_operand:DF 1 "const_double_operand" ""))]
++  [(set (match_operand:V64 0 "register_operand" "")
++        (match_operand:V64 1 "const_double_or_vector_operand" ""))]
+   "TARGET_FPU
+    && (GET_CODE (operands[0]) == REG
+        && REGNO (operands[0]) < 32)
+-   && ! const_zero_operand(operands[1], DFmode)
++   && ! const_zero_operand (operands[1], GET_MODE (operands[0]))
+    && reload_completed"
+   [(clobber (const_int 0))]
+ {
+-  REAL_VALUE_TYPE r;
+-  long l[2];
+-
+-  REAL_VALUE_FROM_CONST_DOUBLE (r, operands[1]);
+-  REAL_VALUE_TO_TARGET_DOUBLE (r, l);
+   operands[0] = gen_rtx_raw_REG (DImode, REGNO (operands[0]));
+ 
+   if (TARGET_ARCH64)
+@@ -2626,31 +2621,34 @@
+ #if HOST_BITS_PER_WIDE_INT == 32
+       gcc_unreachable ();
+ #else
+-      HOST_WIDE_INT val;
+-
+-      val = ((HOST_WIDE_INT)(unsigned long)l[1] |
+-             ((HOST_WIDE_INT)(unsigned long)l[0] << 32));
+-      emit_insn (gen_movdi (operands[0], gen_int_mode (val, DImode)));
++      enum machine_mode mode = GET_MODE (operands[1]);
++      rtx tem = simplify_subreg (DImode, operands[1], mode, 0);
++      emit_insn (gen_movdi (operands[0], tem));
+ #endif
+     }
+   else
+     {
+-      emit_insn (gen_movsi (gen_highpart (SImode, operands[0]),
+-			    gen_int_mode (l[0], SImode)));
++      enum machine_mode mode = GET_MODE (operands[1]);
++      rtx hi = simplify_subreg (SImode, operands[1], mode, 0);
++      rtx lo = simplify_subreg (SImode, operands[1], mode, 4);
++
++      gcc_assert (GET_CODE (hi) == CONST_INT);
++      gcc_assert (GET_CODE (lo) == CONST_INT);
++
++      emit_insn (gen_movsi (gen_highpart (SImode, operands[0]), hi));
+ 
+       /* Slick... but this trick loses if this subreg constant part
+          can be done in one insn.  */
+-      if (l[1] == l[0]
+-	  && ! SPARC_SETHI32_P (l[0])
+-	  && ! SPARC_SIMM13_P (l[0]))
++      if (lo == hi
++	  && ! SPARC_SETHI32_P (INTVAL (hi))
++	  && ! SPARC_SIMM13_P (INTVAL (hi)))
+         {
+           emit_insn (gen_movsi (gen_lowpart (SImode, operands[0]),
+ 			        gen_highpart (SImode, operands[0])));
+         }
+       else
+         {
+-          emit_insn (gen_movsi (gen_lowpart (SImode, operands[0]),
+-			        gen_int_mode (l[1], SImode)));
++          emit_insn (gen_movsi (gen_lowpart (SImode, operands[0]), lo));
+         }
+     }
+   DONE;
+@@ -5088,14 +5086,11 @@
+   [(set_attr "type" "multi")
+    (set_attr "length" "2")])
+ 
+-;; The V8 architecture specifies that there must be 3 instructions between
+-;; a Y register write and a use of it for correct results.
+-
+ (define_expand "divsi3"
+-  [(parallel [(set (match_operand:SI 0 "register_operand" "=r,r")
+-		   (div:SI (match_operand:SI 1 "register_operand" "r,r")
+-			   (match_operand:SI 2 "input_operand" "rI,m")))
+-	      (clobber (match_scratch:SI 3 "=&r,&r"))])]
++  [(parallel [(set (match_operand:SI 0 "register_operand" "")
++		   (div:SI (match_operand:SI 1 "register_operand" "")
++			   (match_operand:SI 2 "input_operand" "")))
++	      (clobber (match_scratch:SI 3 ""))])]
+   "TARGET_V8 || TARGET_DEPRECATED_V8_INSNS"
+ {
+   if (TARGET_ARCH64)
+@@ -5108,24 +5103,40 @@
+     }
+ })
+ 
++;; The V8 architecture specifies that there must be at least 3 instructions
++;; between a write to the Y register and a use of it for correct results.
++;; We try to fill one of them with a simple constant or a memory load.
++
+ (define_insn "divsi3_sp32"
+-  [(set (match_operand:SI 0 "register_operand" "=r,r")
+-	(div:SI (match_operand:SI 1 "register_operand" "r,r")
+-		(match_operand:SI 2 "input_operand" "rI,m")))
+-   (clobber (match_scratch:SI 3 "=&r,&r"))]
+-  "(TARGET_V8 || TARGET_DEPRECATED_V8_INSNS)
+-   && TARGET_ARCH32"
+-{
+-  if (which_alternative == 0)
+-    if (TARGET_V9)
+-      return "sra\t%1, 31, %3\n\twr\t%3, 0, %%y\n\tsdiv\t%1, %2, %0";
+-    else
+-      return "sra\t%1, 31, %3\n\twr\t%3, 0, %%y\n\tnop\n\tnop\n\tnop\n\tsdiv\t%1, %2, %0";
+-  else
+-    if (TARGET_V9)
+-      return "sra\t%1, 31, %3\n\twr\t%3, 0, %%y\n\tld\t%2, %3\n\tsdiv\t%1, %3, %0";
+-    else
+-      return "sra\t%1, 31, %3\n\twr\t%3, 0, %%y\n\tld\t%2, %3\n\tnop\n\tnop\n\tsdiv\t%1, %3, %0";
++  [(set (match_operand:SI 0 "register_operand" "=r,r,r")
++	(div:SI (match_operand:SI 1 "register_operand" "r,r,r")
++		(match_operand:SI 2 "input_operand" "rI,K,m")))
++   (clobber (match_scratch:SI 3 "=&r,&r,&r"))]
++  "(TARGET_V8 || TARGET_DEPRECATED_V8_INSNS) && TARGET_ARCH32"
++{
++  output_asm_insn ("sra\t%1, 31, %3", operands);
++  output_asm_insn ("wr\t%3, 0, %%y", operands);
++
++  switch (which_alternative)
++    {
++    case 0:
++      if (TARGET_V9)
++	return "sdiv\t%1, %2, %0";
++      else
++	return "nop\n\tnop\n\tnop\n\tsdiv\t%1, %2, %0";
++    case 1:
++      if (TARGET_V9)
++	return "sethi\t%%hi(%a2), %3\n\tsdiv\t%1, %3, %0";
++      else
++	return "sethi\t%%hi(%a2), %3\n\tnop\n\tnop\n\tsdiv\t%1, %3, %0";
++    case 2:
++      if (TARGET_V9)
++	return "ld\t%2, %3\n\tsdiv\t%1, %3, %0";
++      else
++	return "ld\t%2, %3\n\tnop\n\tnop\n\tsdiv\t%1, %3, %0";
++    default:
++      gcc_unreachable ();
++    }
+ }
+   [(set_attr "type" "multi")
+    (set (attr "length")
+@@ -5160,10 +5171,13 @@
+    (clobber (match_scratch:SI 3 "=&r"))]
+   "TARGET_V8 || TARGET_DEPRECATED_V8_INSNS"
+ {
++  output_asm_insn ("sra\t%1, 31, %3", operands);
++  output_asm_insn ("wr\t%3, 0, %%y", operands);
++
+   if (TARGET_V9)
+-    return "sra\t%1, 31, %3\n\twr\t%3, 0, %%y\n\tsdivcc\t%1, %2, %0";
++    return "sdivcc\t%1, %2, %0";
+   else
+-    return "sra\t%1, 31, %3\n\twr\t%3, 0, %%y\n\tnop\n\tnop\n\tnop\n\tsdivcc\t%1, %2, %0";
++    return "nop\n\tnop\n\tnop\n\tsdivcc\t%1, %2, %0";
+ }
+   [(set_attr "type" "multi")
+    (set (attr "length")
+@@ -5178,29 +5192,48 @@
+   "TARGET_V8 || TARGET_DEPRECATED_V8_INSNS"
+   "")
+ 
+-;; The V8 architecture specifies that there must be 3 instructions between
+-;; a Y register write and a use of it for correct results.
++;; The V8 architecture specifies that there must be at least 3 instructions
++;; between a write to the Y register and a use of it for correct results.
++;; We try to fill one of them with a simple constant or a memory load.
+ 
+ (define_insn "udivsi3_sp32"
+-  [(set (match_operand:SI 0 "register_operand" "=r,&r,&r")
+-	(udiv:SI (match_operand:SI 1 "nonimmediate_operand" "r,r,m")
+-		 (match_operand:SI 2 "input_operand" "rI,m,r")))]
+-  "(TARGET_V8 || TARGET_DEPRECATED_V8_INSNS)
+-   && TARGET_ARCH32"
++  [(set (match_operand:SI 0 "register_operand" "=r,&r,&r,&r")
++	(udiv:SI (match_operand:SI 1 "nonimmediate_operand" "r,r,r,m")
++		 (match_operand:SI 2 "input_operand" "rI,K,m,r")))]
++  "(TARGET_V8 || TARGET_DEPRECATED_V8_INSNS) && TARGET_ARCH32"
+ {
+-  output_asm_insn ("wr\t%%g0, %%g0, %%y", operands);
++  output_asm_insn ("wr\t%%g0, 0, %%y", operands);
++
+   switch (which_alternative)
+     {
+-    default:
+-      return "nop\n\tnop\n\tnop\n\tudiv\t%1, %2, %0";
++    case 0:
++      if (TARGET_V9)
++	return "udiv\t%1, %2, %0";
++      else
++	return "nop\n\tnop\n\tnop\n\tudiv\t%1, %2, %0";
+     case 1:
+-      return "ld\t%2, %0\n\tnop\n\tnop\n\tudiv\t%1, %0, %0";
++      if (TARGET_V9)
++	return "sethi\t%%hi(%a2), %0\n\tudiv\t%1, %0, %0";
++      else
++	return "sethi\t%%hi(%a2), %0\n\tnop\n\tnop\n\tudiv\t%1, %0, %0";
+     case 2:
+-      return "ld\t%1, %0\n\tnop\n\tnop\n\tudiv\t%0, %2, %0";
++      if (TARGET_V9)
++	return "ld\t%2, %0\n\tudiv\t%1, %0, %0";
++      else
++	return "ld\t%2, %0\n\tnop\n\tnop\n\tudiv\t%1, %0, %0";
++    case 3:
++      if (TARGET_V9)
++	return "ld\t%1, %0\n\tudiv\t%0, %2, %0";
++      else
++	return "ld\t%1, %0\n\tnop\n\tnop\n\tudiv\t%0, %2, %0";
++    default:
++      gcc_unreachable ();
+     }
+ }
+   [(set_attr "type" "multi")
+-   (set_attr "length" "5")])
++   (set (attr "length")
++	(if_then_else (eq_attr "isa" "v9")
++		      (const_int 3) (const_int 5)))])
+ 
+ (define_insn "udivsi3_sp64"
+   [(set (match_operand:SI 0 "register_operand" "=r")
+@@ -5226,13 +5259,14 @@
+ 		    (const_int 0)))
+    (set (match_operand:SI 0 "register_operand" "=r")
+ 	(udiv:SI (match_dup 1) (match_dup 2)))]
+-  "TARGET_V8
+-   || TARGET_DEPRECATED_V8_INSNS"
++  "TARGET_V8 || TARGET_DEPRECATED_V8_INSNS"
+ {
++  output_asm_insn ("wr\t%%g0, 0, %%y", operands);
++
+   if (TARGET_V9)
+-    return "wr\t%%g0, %%g0, %%y\n\tudivcc\t%1, %2, %0";
++    return "udivcc\t%1, %2, %0";
+   else
+-    return "wr\t%%g0, %%g0, %%y\n\tnop\n\tnop\n\tnop\n\tudivcc\t%1, %2, %0";
++    return "nop\n\tnop\n\tnop\n\tudivcc\t%1, %2, %0";
+ }
+   [(set_attr "type" "multi")
+    (set (attr "length")
+diff -Naur gcc-4.3.2.orig/gcc/config/spu/spu-elf.h gcc-4.3.2/gcc/config/spu/spu-elf.h
+--- gcc-4.3.2.orig/gcc/config/spu/spu-elf.h	2007-08-02 03:49:31.000000000 -0700
++++ gcc-4.3.2/gcc/config/spu/spu-elf.h	2008-11-14 14:28:54.000000000 -0800
+@@ -24,6 +24,23 @@
+             asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN)
+ 
+ 
++/* The following macros define "native" directory locations; on the SPU,
++   these are used only when building the compiler with --with-sysroot.
++   This can be used to build a pair of PPU and SPU cross-compilers with
++   a common sysroot; the SPU compiler will search for its files in
++   ${sysroot}/include and ${sysroot}/lib.  */
++
++/* STANDARD_STARTFILE_PREFIX_1 is "/lib", which we keep.
++   STANDARD_STARTFILE_PREFIX_2 is "/usr/lib" -- we remove this.  */
++#undef STANDARD_STARTFILE_PREFIX_2
++#define STANDARD_STARTFILE_PREFIX_2 ""
++
++/* Use "/include" instead of "/usr/include".  */
++#undef STANDARD_INCLUDE_DIR
++#define STANDARD_INCLUDE_DIR "/include"
++
++/* We do not provide any "/usr/local/include" directory on SPU.  */
++#undef LOCAL_INCLUDE_DIR
+ 
+ /* Provide a STARTFILE_SPEC appropriate for GNU/Linux.  Here we add
+    the GNU/Linux magical crtbegin.o file (see crtstuff.c) which
+diff -Naur gcc-4.3.2.orig/gcc/config/spu/spu.c gcc-4.3.2/gcc/config/spu/spu.c
+--- gcc-4.3.2.orig/gcc/config/spu/spu.c	2008-08-18 07:46:49.000000000 -0700
++++ gcc-4.3.2/gcc/config/spu/spu.c	2008-09-12 06:29:31.000000000 -0700
+@@ -54,6 +54,9 @@
+ #include "tm-constrs.h"
+ #include "spu-builtins.h"
+ #include "ddg.h"
++#include "sbitmap.h"
++#include "timevar.h"
++#include "df.h"
+ 
+ /* Builtin types, data and prototypes. */
+ struct spu_builtin_range
+@@ -94,19 +97,19 @@
+ static void emit_nop_for_insn (rtx insn);
+ static bool insn_clobbers_hbr (rtx insn);
+ static void spu_emit_branch_hint (rtx before, rtx branch, rtx target,
+-				  int distance);
++				  int distance, sbitmap blocks);
+ static rtx spu_emit_vector_compare (enum rtx_code rcode, rtx op0, rtx op1,
+ 	                            enum machine_mode dmode);
+ static rtx get_branch_target (rtx branch);
+-static void insert_branch_hints (void);
+-static void insert_nops (void);
+ static void spu_machine_dependent_reorg (void);
+ static int spu_sched_issue_rate (void);
+ static int spu_sched_variable_issue (FILE * dump, int verbose, rtx insn,
+ 				     int can_issue_more);
+ static int get_pipe (rtx insn);
+-static int spu_sched_adjust_priority (rtx insn, int pri);
+ static int spu_sched_adjust_cost (rtx insn, rtx link, rtx dep_insn, int cost);
++static void spu_sched_init_global (FILE *, int, int);
++static void spu_sched_init (FILE *, int, int);
++static int spu_sched_reorder (FILE *, int, rtx *, int *, int);
+ static tree spu_handle_fndecl_attribute (tree * node, tree name, tree args,
+ 					 int flags,
+ 					 unsigned char *no_add_attrs);
+@@ -138,6 +141,7 @@
+ static int spu_builtin_vectorization_cost (bool);
+ static bool spu_vector_alignment_reachable (const_tree, bool);
+ static int spu_sms_res_mii (struct ddg *g);
++static void asm_file_start (void);
+ 
+ extern const char *reg_names[];
+ rtx spu_compare_op0, spu_compare_op1;
+@@ -147,6 +151,18 @@
+ /* Which cpu are we tuning for.  */
+ int spu_tune;
+ 
++/* The hardware requires 8 insns between a hint and the branch it
++   effects.  This variable describes how many rtl instructions the
++   compiler needs to see before inserting a hint, and then the compiler
++   will insert enough nops to make it at least 8 insns.  The default is
++   for the compiler to allow up to 2 nops be emitted.  The nops are
++   inserted in pairs, so we round down. */
++int spu_hint_dist = (8*4) - (2*4);
++
++/* Determines whether we run variable tracking in machine dependent
++   reorganization.  */
++static int spu_flag_var_tracking;
++
+ enum spu_immediate {
+   SPU_NONE,
+   SPU_IL,
+@@ -212,11 +228,20 @@
+ #undef TARGET_SCHED_ISSUE_RATE
+ #define TARGET_SCHED_ISSUE_RATE spu_sched_issue_rate
+ 
++#undef TARGET_SCHED_INIT_GLOBAL
++#define TARGET_SCHED_INIT_GLOBAL spu_sched_init_global
++
++#undef TARGET_SCHED_INIT
++#define TARGET_SCHED_INIT spu_sched_init
++
+ #undef TARGET_SCHED_VARIABLE_ISSUE
+ #define TARGET_SCHED_VARIABLE_ISSUE spu_sched_variable_issue
+ 
+-#undef TARGET_SCHED_ADJUST_PRIORITY
+-#define TARGET_SCHED_ADJUST_PRIORITY spu_sched_adjust_priority
++#undef TARGET_SCHED_REORDER
++#define TARGET_SCHED_REORDER spu_sched_reorder
++
++#undef TARGET_SCHED_REORDER2
++#define TARGET_SCHED_REORDER2 spu_sched_reorder
+ 
+ #undef TARGET_SCHED_ADJUST_COST
+ #define TARGET_SCHED_ADJUST_COST spu_sched_adjust_cost
+@@ -297,6 +322,9 @@
+ #undef TARGET_SCHED_SMS_RES_MII
+ #define TARGET_SCHED_SMS_RES_MII spu_sms_res_mii
+ 
++#undef TARGET_ASM_FILE_START
++#define TARGET_ASM_FILE_START asm_file_start
++
+ struct gcc_target targetm = TARGET_INITIALIZER;
+ 
+ void
+@@ -325,9 +353,14 @@
+ 
+   flag_omit_frame_pointer = 1;
+ 
++  /* Functions must be 8 byte aligned so we correctly handle dual issue */
+   if (align_functions < 8)
+     align_functions = 8;
+ 
++  spu_hint_dist = 8*4 - spu_max_nops*4;
++  if (spu_hint_dist < 0) 
++    spu_hint_dist = 0;
++
+   if (spu_fixed_range_string)
+     fix_range (spu_fixed_range_string);
+ 
+@@ -353,6 +386,16 @@
+         error ("Unknown architecture '%s'", &spu_tune_string[0]);
+     }
+ 
++  /* Change defaults according to the processor architecture.  */
++  if (spu_arch == PROCESSOR_CELLEDP)
++    {
++      /* If no command line option has been otherwise specified, change
++	 the default to -mno-safe-hints on celledp -- only the original
++	 Cell/B.E. processors require this workaround.  */
++      if (!(target_flags_explicit & MASK_SAFE_HINTS))
++	target_flags &= ~MASK_SAFE_HINTS;
++    }
++
+   REAL_MODE_FORMAT (SFmode) = &spu_single_format;
+ }
+ 
+
+@@ -1980,16 +2023,6 @@
+ 
+   return gen_rtx_CONST_VECTOR (mode, v);
+ }
+-
+
+-/* branch hint stuff */
+-
+-/* The hardware requires 8 insns between a hint and the branch it
+-   effects.  This variable describes how many rtl instructions the
+-   compiler needs to see before inserting a hint.  (FIXME: We should
+-   accept less and insert nops to enforce it because hinting is always
+-   profitable for performance, but we do need to be careful of code
+-   size.) */
+-int spu_hint_dist = (8 * 4);
+ 
+ /* Create a MODE vector constant from 4 ints. */
+ rtx
+@@ -2014,75 +2047,200 @@
+   arr[15] = (d >> 0) & 0xff;
+   return array_to_constant(mode, arr);
+ }
++
+
++/* branch hint stuff */
+ 
+ /* An array of these is used to propagate hints to predecessor blocks. */
+ struct spu_bb_info
+ {
+-  rtx prop_jump;		/* propagated from another block */
+-  basic_block bb;		/* the original block. */
++  rtx prop_jump; /* propagated from another block */
++  int bb_index;  /* the original block. */
+ };
++static struct spu_bb_info *spu_bb_info;
+ 
+-/* The special $hbr register is used to prevent the insn scheduler from
+-   moving hbr insns across instructions which invalidate them.  It
+-   should only be used in a clobber, and this function searches for
+-   insns which clobber it.  */
+-static bool
+-insn_clobbers_hbr (rtx insn)
++#define STOP_HINT_P(INSN) \
++		(GET_CODE(INSN) == CALL_INSN \
++		 || INSN_CODE(INSN) == CODE_FOR_divmodsi4 \
++		 || INSN_CODE(INSN) == CODE_FOR_udivmodsi4)
++
++/* 1 when RTX is a hinted branch or its target.  We keep track of
++   what has been hinted so the safe-hint code can test it easily.  */
++#define HINTED_P(RTX)						\
++  (RTL_FLAG_CHECK3("HINTED_P", (RTX), CODE_LABEL, JUMP_INSN, CALL_INSN)->unchanging)
++
++/* 1 when RTX is an insn that must be scheduled on an even boundary. */
++#define SCHED_ON_EVEN_P(RTX)						\
++  (RTL_FLAG_CHECK2("SCHED_ON_EVEN_P", (RTX), JUMP_INSN, CALL_INSN)->in_struct)
++
++/* Emit a nop for INSN such that the two will dual issue.  This assumes
++   INSN is 8-byte aligned.  When INSN is inline asm we emit an lnop.
++   We check for TImode to handle a MULTI1 insn which has dual issued its
++   first instruction.  get_pipe returns -1 for MULTI0, inline asm, or
++   ADDR_VEC insns. */
++static void
++emit_nop_for_insn (rtx insn)
+ {
+-  if (INSN_P (insn) && GET_CODE (PATTERN (insn)) == PARALLEL)
++  int p;
++  rtx new_insn;
++  p = get_pipe (insn);
++  if ((CALL_P (insn) || JUMP_P (insn)) && SCHED_ON_EVEN_P (insn))
++    new_insn = emit_insn_after (gen_lnop (), insn);
++  else if (p == 1 && GET_MODE (insn) == TImode)
+     {
+-      rtx parallel = PATTERN (insn);
+-      rtx clobber;
+-      int j;
+-      for (j = XVECLEN (parallel, 0) - 1; j >= 0; j--)
++      new_insn = emit_insn_before (gen_nopn (GEN_INT (127)), insn);
++      PUT_MODE (new_insn, TImode);
++      PUT_MODE (insn, VOIDmode);
++    }
++  else
++    new_insn = emit_insn_after (gen_lnop (), insn);
++  recog_memoized (new_insn);
++}
++
++/* Insert nops in basic blocks to meet dual issue alignment
++   requirements.  Also make sure hbrp and hint instructions are at least
++   one cycle apart, possibly inserting a nop.  */
++static void
++pad_bb(void)
++{
++  rtx insn, next_insn, prev_insn, hbr_insn = 0;
++  int length;
++  int addr;
++
++  /* This sets up INSN_ADDRESSES. */
++  shorten_branches (get_insns ());
++
++  /* Keep track of length added by nops. */
++  length = 0;
++
++  prev_insn = 0;
++  insn = get_insns ();
++  if (!active_insn_p (insn))
++    insn = next_active_insn (insn);
++  for (; insn; insn = next_insn)
++    {
++      next_insn = next_active_insn (insn);
++      if (INSN_CODE (insn) == CODE_FOR_iprefetch
++	  || INSN_CODE (insn) == CODE_FOR_hbr)
+ 	{
+-	  clobber = XVECEXP (parallel, 0, j);
+-	  if (GET_CODE (clobber) == CLOBBER
+-	      && GET_CODE (XEXP (clobber, 0)) == REG
+-	      && REGNO (XEXP (clobber, 0)) == HBR_REGNUM)
+-	    return 1;
++	  if (hbr_insn)
++	    {
++	      int a0 = INSN_ADDRESSES (INSN_UID (hbr_insn));
++	      int a1 = INSN_ADDRESSES (INSN_UID (insn));
++	      if ((a1 - a0 == 8 && GET_MODE (insn) != TImode)
++		  || (a1 - a0 == 4))
++		{
++		  prev_insn = emit_insn_before (gen_lnop (), insn);
++		  PUT_MODE (prev_insn, GET_MODE (insn));
++		  PUT_MODE (insn, TImode);
++		  length += 4;
++		}
++	    }
++	  hbr_insn = insn;
+ 	}
++      if (INSN_CODE (insn) == CODE_FOR_blockage)
++	{
++	  if (GET_MODE (insn) == TImode)
++	    PUT_MODE (next_insn, TImode);
++	  insn = next_insn;
++	  next_insn = next_active_insn (insn);
++	}
++      addr = INSN_ADDRESSES (INSN_UID (insn));
++      if ((CALL_P (insn) || JUMP_P (insn)) && SCHED_ON_EVEN_P (insn))
++	{
++	  if (((addr + length) & 7) != 0)
++	    {
++	      emit_nop_for_insn (prev_insn);
++	      length += 4;
++	    }
++	}
++      else if (GET_MODE (insn) == TImode
++	       && ((next_insn && GET_MODE (next_insn) != TImode)
++		   || get_attr_type (insn) == TYPE_MULTI0)
++	       && ((addr + length) & 7) != 0)
++	{
++	  /* prev_insn will always be set because the first insn is
++	     always 8-byte aligned. */
++	  emit_nop_for_insn (prev_insn);
++	  length += 4;
++	}
++      prev_insn = insn;
+     }
+-  return 0;
+ }
+ 
++
+
++/* Routines for branch hints. */
++
+ static void
+-spu_emit_branch_hint (rtx before, rtx branch, rtx target, int distance)
++spu_emit_branch_hint (rtx before, rtx branch, rtx target,
++		      int distance, sbitmap blocks)
+ {
+-  rtx branch_label;
+-  rtx hint, insn, prev, next;
++  rtx branch_label = 0;
++  rtx hint;
++  rtx insn;
++  rtx table;
+ 
+   if (before == 0 || branch == 0 || target == 0)
+     return;
+ 
++  /* While scheduling we require hints to be no further than 600, so
++     we need to enforce that here too */
+   if (distance > 600)
+     return;
+ 
++  /* If we have a Basic block note, emit it after the basic block note.  */
++  if (NOTE_KIND (before) == NOTE_INSN_BASIC_BLOCK)
++    before = NEXT_INSN (before);
+ 
+   branch_label = gen_label_rtx ();
+   LABEL_NUSES (branch_label)++;
+   LABEL_PRESERVE_P (branch_label) = 1;
+   insn = emit_label_before (branch_label, branch);
+   branch_label = gen_rtx_LABEL_REF (VOIDmode, branch_label);
++  SET_BIT (blocks, BLOCK_FOR_INSN (branch)->index);
+ 
+-  /* If the previous insn is pipe0, make the hbr dual issue with it.  If
+-     the current insn is pipe0, dual issue with it. */
+-  prev = prev_active_insn (before);
+-  if (prev && get_pipe (prev) == 0)
+-    hint = emit_insn_before (gen_hbr (branch_label, target), before);
+-  else if (get_pipe (before) == 0 && distance > spu_hint_dist)
+-    {
+-      next = next_active_insn (before);
+-      hint = emit_insn_after (gen_hbr (branch_label, target), before);
+-      if (next)
+-	PUT_MODE (next, TImode);
++  hint = emit_insn_before (gen_hbr (branch_label, target), before);
++  recog_memoized (hint);
++  HINTED_P (branch) = 1;
++
++  if (GET_CODE (target) == LABEL_REF)
++    HINTED_P (XEXP (target, 0)) = 1;
++  else if (tablejump_p (branch, 0, &table))
++    {
++      rtvec vec;
++      int j;
++      if (GET_CODE (PATTERN (table)) == ADDR_VEC)
++	vec = XVEC (PATTERN (table), 0);
++      else
++	vec = XVEC (PATTERN (table), 1);
++      for (j = GET_NUM_ELEM (vec) - 1; j >= 0; --j)
++	HINTED_P (XEXP (RTVEC_ELT (vec, j), 0)) = 1;
+     }
+-  else
++
++  if (distance >= 588)
+     {
+-      hint = emit_insn_before (gen_hbr (branch_label, target), before);
+-      PUT_MODE (hint, TImode);
++      /* Make sure the hint isn't scheduled any earlier than this point,
++         which could make it too far for the branch offest to fit */
++      recog_memoized (emit_insn_before (gen_blockage (), hint));
++    }
++  else if (distance <= 8 * 4)
++    {
++      /* To guarantee at least 8 insns between the hint and branch we
++         insert nops. */
++      int d;
++      for (d = distance; d < 8 * 4; d += 4)
++	{
++	  insn =
++	    emit_insn_after (gen_nopn_nv (gen_rtx_REG (SImode, 127)), hint);
++	  recog_memoized (insn);
++	}
++
++      /* Make sure any nops inserted aren't scheduled before the hint. */
++      recog_memoized (emit_insn_after (gen_blockage (), hint));
++
++      /* Make sure any nops inserted aren't scheduled after the call. */
++      if (CALL_P (branch) && distance < 8 * 4)
++	recog_memoized (emit_insn_before (gen_blockage (), branch));
+     }
+-  recog_memoized (hint);
+ }
+ 
+ /* Returns 0 if we don't want a hint for this branch.  Otherwise return
+@@ -2152,245 +2310,403 @@
+   return 0;
+ }
+ 
+-static void
+-insert_branch_hints (void)
++/* The special $hbr register is used to prevent the insn scheduler from
++   moving hbr insns across instructions which invalidate them.  It
++   should only be used in a clobber, and this function searches for
++   insns which clobber it.  */
++static bool
++insn_clobbers_hbr (rtx insn)
+ {
+-  struct spu_bb_info *spu_bb_info;
+-  rtx branch, insn, next;
+-  rtx branch_target = 0;
+-  int branch_addr = 0, insn_addr, head_addr;
+-  basic_block bb;
+-  unsigned int j;
+-
+-  spu_bb_info =
+-    (struct spu_bb_info *) xcalloc (last_basic_block + 1,
+-				    sizeof (struct spu_bb_info));
+-
+-  /* We need exact insn addresses and lengths.  */
+-  shorten_branches (get_insns ());
++  if (INSN_P (insn)
++      && GET_CODE (PATTERN (insn)) == PARALLEL)
++    {
++      rtx parallel = PATTERN (insn);
++      rtx clobber;
++      int j;
++      for (j = XVECLEN (parallel, 0) - 1; j >= 0; j--)
++	{
++	  clobber = XVECEXP (parallel, 0, j);
++	  if (GET_CODE (clobber) == CLOBBER
++	      && GET_CODE (XEXP (clobber, 0)) == REG
++	      && REGNO (XEXP (clobber, 0)) == HBR_REGNUM)
++	    return 1;
++	}
++    }
++  return 0;
++}
+ 
+-  FOR_EACH_BB_REVERSE (bb)
+-  {
+-    head_addr = INSN_ADDRESSES (INSN_UID (BB_HEAD (bb)));
+-    branch = 0;
+-    if (spu_bb_info[bb->index].prop_jump)
+-      {
+-	branch = spu_bb_info[bb->index].prop_jump;
+-	branch_target = get_branch_target (branch);
+-	branch_addr = INSN_ADDRESSES (INSN_UID (branch));
+-      }
+-    /* Search from end of a block to beginning.   In this loop, find
+-       jumps which need a branch and emit them only when:
+-       - it's an indirect branch and we're at the insn which sets
+-       the register  
+-       - we're at an insn that will invalidate the hint. e.g., a
+-       call, another hint insn, inline asm that clobbers $hbr, and
+-       some inlined operations (divmodsi4).  Don't consider jumps
+-       because they are only at the end of a block and are
+-       considered when we are deciding whether to propagate
+-       - we're getting too far away from the branch.  The hbr insns
+-       only have a signed 10-bit offset
+-       We go back as far as possible so the branch will be considered
+-       for propagation when we get to the beginning of the block.  */
+-    next = 0;
+-    for (insn = BB_END (bb); insn; insn = PREV_INSN (insn))
++/* Search up to 32 insns starting at FIRST:
++   - at any kind of hinted branch, just return
++   - at any unconditional branch in the first 15 insns, just return
++   - at a call or indirect branch, after the first 15 insns, force it to
++     an even address and return
++   - at any unconditional branch, after the first 15 insns, force it to
++     an even address. 
++   At then end of the search, insert an hbrp within 4 insns of FIRST,
++   and an hbrp within 16 instructions of FIRST.
++ */
++static void
++insert_hbrp_for_ilb_runout (rtx first)
++{
++  rtx insn, before_4 = 0, before_16 = 0;
++  int addr = 0, length, first_addr = -1;
++  int hbrp_addr0 = 128 * 4, hbrp_addr1 = 128 * 4;
++  int insert_lnop_after = 0;
++  for (insn = first; insn; insn = NEXT_INSN (insn))
++    if (INSN_P (insn))
+       {
+-	if (INSN_P (insn))
++	if (first_addr == -1)
++	  first_addr = INSN_ADDRESSES (INSN_UID (insn));
++	addr = INSN_ADDRESSES (INSN_UID (insn)) - first_addr;
++	length = get_attr_length (insn);
++
++	if (before_4 == 0 && addr + length >= 4 * 4)
++	  before_4 = insn;
++	/* We test for 14 instructions because the first hbrp will add
++	   up to 2 instructions. */
++	if (before_16 == 0 && addr + length >= 14 * 4)
++	  before_16 = insn;
++
++	if (INSN_CODE (insn) == CODE_FOR_hbr)
+ 	  {
+-	    insn_addr = INSN_ADDRESSES (INSN_UID (insn));
+-	    if (branch && next
+-		&& ((GET_CODE (branch_target) == REG
+-		     && set_of (branch_target, insn) != NULL_RTX)
+-		    || insn_clobbers_hbr (insn)
+-		    || branch_addr - insn_addr > 600))
++	    /* Make sure an hbrp is at least 2 cycles away from a hint. 
++	       Insert an lnop after the hbrp when necessary. */
++	    if (before_4 == 0 && addr > 0)
+ 	      {
+-		int next_addr = INSN_ADDRESSES (INSN_UID (next));
+-		if (insn != BB_END (bb)
+-		    && branch_addr - next_addr >= spu_hint_dist)
+-		  {
+-		    if (dump_file)
+-		      fprintf (dump_file,
+-			       "hint for %i in block %i before %i\n",
+-			       INSN_UID (branch), bb->index, INSN_UID (next));
+-		    spu_emit_branch_hint (next, branch, branch_target,
+-					  branch_addr - next_addr);
+-		  }
+-		branch = 0;
++		before_4 = insn;
++		insert_lnop_after |= 1;
+ 	      }
+-
+-	    /* JUMP_P will only be true at the end of a block.  When
+-	       branch is already set it means we've previously decided
+-	       to propagate a hint for that branch into this block. */
+-	    if (CALL_P (insn) || (JUMP_P (insn) && !branch))
++	    else if (before_4 && addr <= 4 * 4)
++	      insert_lnop_after |= 1;
++	    if (before_16 == 0 && addr > 10 * 4)
+ 	      {
+-		branch = 0;
+-		if ((branch_target = get_branch_target (insn)))
+-		  {
+-		    branch = insn;
+-		    branch_addr = insn_addr;
+-		  }
++		before_16 = insn;
++		insert_lnop_after |= 2;
+ 	      }
+-
+-	    /* When a branch hint is emitted it will be inserted
+-	       before "next".  Make sure next is the beginning of a
+-	       cycle to minimize impact on the scheduled insns. */
+-	    if (GET_MODE (insn) == TImode)
+-	      next = insn;
++	    else if (before_16 && addr <= 14 * 4)
++	      insert_lnop_after |= 2;
+ 	  }
+-	if (insn == BB_HEAD (bb))
+-	  break;
+-      }
+ 
+-    if (branch)
+-      {
+-	/* If we haven't emitted a hint for this branch yet, it might
+-	   be profitable to emit it in one of the predecessor blocks,
+-	   especially for loops.  */
+-	rtx bbend;
+-	basic_block prev = 0, prop = 0, prev2 = 0;
+-	int loop_exit = 0, simple_loop = 0;
+-	int next_addr = 0;
+-	if (next)
+-	  next_addr = INSN_ADDRESSES (INSN_UID (next));
+-
+-	for (j = 0; j < EDGE_COUNT (bb->preds); j++)
+-	  if (EDGE_PRED (bb, j)->flags & EDGE_FALLTHRU)
+-	    prev = EDGE_PRED (bb, j)->src;
+-	  else
+-	    prev2 = EDGE_PRED (bb, j)->src;
++	if (INSN_CODE (insn) == CODE_FOR_iprefetch)
++	  {
++	    if (addr < hbrp_addr0)
++	      hbrp_addr0 = addr;
++	    else if (addr < hbrp_addr1)
++	      hbrp_addr1 = addr;
++	  }
+ 
+-	for (j = 0; j < EDGE_COUNT (bb->succs); j++)
+-	  if (EDGE_SUCC (bb, j)->flags & EDGE_LOOP_EXIT)
+-	    loop_exit = 1;
+-	  else if (EDGE_SUCC (bb, j)->dest == bb)
+-	    simple_loop = 1;
+-
+-	/* If this branch is a loop exit then propagate to previous
+-	   fallthru block. This catches the cases when it is a simple
+-	   loop or when there is an initial branch into the loop. */
+-	if (prev && loop_exit && prev->loop_depth <= bb->loop_depth)
+-	  prop = prev;
+-
+-	/* If there is only one adjacent predecessor.  Don't propagate
+-	   outside this loop.  This loop_depth test isn't perfect, but
+-	   I'm not sure the loop_father member is valid at this point.  */
+-	else if (prev && single_pred_p (bb)
+-		 && prev->loop_depth == bb->loop_depth)
+-	  prop = prev;
+-
+-	/* If this is the JOIN block of a simple IF-THEN then
+-	   propagate the hint to the HEADER block. */
+-	else if (prev && prev2
+-		 && EDGE_COUNT (bb->preds) == 2
+-		 && EDGE_COUNT (prev->preds) == 1
+-		 && EDGE_PRED (prev, 0)->src == prev2
+-		 && prev2->loop_depth == bb->loop_depth
+-		 && GET_CODE (branch_target) != REG)
+-	  prop = prev;
+-
+-	/* Don't propagate when:
+-	   - this is a simple loop and the hint would be too far
+-	   - this is not a simple loop and there are 16 insns in
+-	   this block already
+-	   - the predecessor block ends in a branch that will be
+-	   hinted
+-	   - the predecessor block ends in an insn that invalidates
+-	   the hint */
+-	if (prop
+-	    && prop->index >= 0
+-	    && (bbend = BB_END (prop))
+-	    && branch_addr - INSN_ADDRESSES (INSN_UID (bbend)) <
+-	    (simple_loop ? 600 : 16 * 4) && get_branch_target (bbend) == 0
+-	    && (JUMP_P (bbend) || !insn_clobbers_hbr (bbend)))
++	if (CALL_P (insn) || JUMP_P (insn))
+ 	  {
+-	    if (dump_file)
+-	      fprintf (dump_file, "propagate from %i to %i (loop depth %i) "
+-		       "for %i (loop_exit %i simple_loop %i dist %i)\n",
+-		       bb->index, prop->index, bb->loop_depth,
+-		       INSN_UID (branch), loop_exit, simple_loop,
+-		       branch_addr - INSN_ADDRESSES (INSN_UID (bbend)));
++	    if (HINTED_P (insn))
++	      return;
+ 
+-	    spu_bb_info[prop->index].prop_jump = branch;
+-	    spu_bb_info[prop->index].bb = bb;
++	    /* Any branch after the first 15 insns should be on an even
++	       address to avoid a special case branch.  There might be
++	       some nops and/or hbrps inserted, so we test after 10
++	       insns. */
++	    if (addr > 10 * 4)
++	      SCHED_ON_EVEN_P (insn) = 1;
+ 	  }
+-	else if (next && branch_addr - next_addr >= spu_hint_dist)
++
++	if (CALL_P (insn) || tablejump_p (insn, 0, 0))
++	  return;
++
++
++	if (addr + length >= 32 * 4)
+ 	  {
+-	    if (dump_file)
+-	      fprintf (dump_file, "hint for %i in block %i before %i\n",
+-		       INSN_UID (branch), bb->index, INSN_UID (next));
+-	    spu_emit_branch_hint (next, branch, branch_target,
+-				  branch_addr - next_addr);
++	    gcc_assert (before_4 && before_16);
++	    if (hbrp_addr0 > 4 * 4)
++	      {
++		insn =
++		  emit_insn_before (gen_iprefetch (GEN_INT (1)), before_4);
++		recog_memoized (insn);
++		INSN_ADDRESSES_NEW (insn,
++				    INSN_ADDRESSES (INSN_UID (before_4)));
++		PUT_MODE (insn, GET_MODE (before_4));
++		PUT_MODE (before_4, TImode);
++		if (insert_lnop_after & 1)
++		  {
++		    insn = emit_insn_before (gen_lnop (), before_4);
++		    recog_memoized (insn);
++		    INSN_ADDRESSES_NEW (insn,
++					INSN_ADDRESSES (INSN_UID (before_4)));
++		    PUT_MODE (insn, TImode);
++		  }
++	      }
++	    if ((hbrp_addr0 <= 4 * 4 || hbrp_addr0 > 16 * 4)
++		&& hbrp_addr1 > 16 * 4)
++	      {
++		insn =
++		  emit_insn_before (gen_iprefetch (GEN_INT (2)), before_16);
++		recog_memoized (insn);
++		INSN_ADDRESSES_NEW (insn,
++				    INSN_ADDRESSES (INSN_UID (before_16)));
++		PUT_MODE (insn, GET_MODE (before_16));
++		PUT_MODE (before_16, TImode);
++		if (insert_lnop_after & 2)
++		  {
++		    insn = emit_insn_before (gen_lnop (), before_16);
++		    recog_memoized (insn);
++		    INSN_ADDRESSES_NEW (insn,
++					INSN_ADDRESSES (INSN_UID
++							(before_16)));
++		    PUT_MODE (insn, TImode);
++		  }
++	      }
++	    return;
+ 	  }
+-	branch = 0;
+       }
+-  }
+-  free (spu_bb_info);
++    else if (BARRIER_P (insn))
++      return;
++
+ }
+-
+
+-/* Emit a nop for INSN such that the two will dual issue.  This assumes
+-   INSN is 8-byte aligned.  When INSN is inline asm we emit an lnop.
+-   We check for TImode to handle a MULTI1 insn which has dual issued its
+-   first instruction.  get_pipe returns -1 for MULTI0, inline asm, or
+-   ADDR_VEC insns. */
++
++/* The SPU might hang when it executes 48 inline instructions after a
++   hinted branch jumps to its hinted target.  The beginning of a
++   function and the return from a call might have been hinted, and must
++   be handled as well.  To prevent a hang we insert 2 hbrps.  The first
++   should be within 6 insns of the branch target.  The second should be
++   within 22 insns of the branch target.  When determining if hbrps are
++   necessary, we look for only 32 inline instructions, because up to to
++   12 nops and 4 hbrps could be inserted.  Similarily, when inserting
++   new hbrps, we insert them within 4 and 16 insns of the target.  */
+ static void
+-emit_nop_for_insn (rtx insn)
++insert_hbrp (void)
+ {
+-  int p;
+-  rtx new_insn;
+-  p = get_pipe (insn);
+-  if (p == 1 && GET_MODE (insn) == TImode)
++  rtx insn;
++  if (TARGET_SAFE_HINTS)
+     {
+-      new_insn = emit_insn_before (gen_nopn (GEN_INT (127)), insn);
+-      PUT_MODE (new_insn, TImode);
+-      PUT_MODE (insn, VOIDmode);
++      shorten_branches (get_insns ());
++      /* Insert hbrp at beginning of function */
++      insn = next_active_insn (get_insns ());
++      if (insn)
++	insert_hbrp_for_ilb_runout (insn);
++      /* Insert hbrp after hinted targets. */
++      for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
++	if ((LABEL_P (insn) && HINTED_P (insn)) || CALL_P (insn))
++	  insert_hbrp_for_ilb_runout (next_active_insn (insn));
+     }
+-  else
+-    new_insn = emit_insn_after (gen_lnop (), insn);
+ }
+ 
+-/* Insert nops in basic blocks to meet dual issue alignment
+-   requirements. */
++static int in_spu_reorg;
++
++/* Insert branch hints.  There are no branch optimizations after this
++   pass, so it's safe to set our branch hints now. */
+ static void
+-insert_nops (void)
++spu_machine_dependent_reorg (void)
+ {
+-  rtx insn, next_insn, prev_insn;
+-  int length;
+-  int addr;
++  sbitmap blocks;
++  basic_block bb;
++  rtx branch, insn;
++  rtx branch_target = 0;
++  int branch_addr = 0, insn_addr, required_dist = 0;
++  int i;
++  unsigned int j;
+ 
+-  /* This sets up INSN_ADDRESSES. */
+-  shorten_branches (get_insns ());
++  if (!TARGET_BRANCH_HINTS || optimize == 0)
++    {
++      /* We still do it for unoptimized code because an external
++         function might have hinted a call or return. */
++      insert_hbrp ();
++      pad_bb ();
++      return;
++    }
+ 
+-  /* Keep track of length added by nops. */
+-  length = 0;
++  blocks = sbitmap_alloc (last_basic_block);
++  sbitmap_zero (blocks);
+ 
+-  prev_insn = 0;
+-  for (insn = get_insns (); insn; insn = next_insn)
++  in_spu_reorg = 1;
++  compute_bb_for_insn ();
++
++  compact_blocks ();
++
++  spu_bb_info =
++    (struct spu_bb_info *) xcalloc (n_basic_blocks,
++				    sizeof (struct spu_bb_info));
++
++  /* We need exact insn addresses and lengths.  */
++  shorten_branches (get_insns ());
++
++  for (i = n_basic_blocks - 1; i >= 0; i--)
+     {
+-      next_insn = next_active_insn (insn);
+-      addr = INSN_ADDRESSES (INSN_UID (insn));
+-      if (GET_MODE (insn) == TImode
+-	  && next_insn
+-	  && GET_MODE (next_insn) != TImode
+-	  && ((addr + length) & 7) != 0)
++      bb = BASIC_BLOCK (i);
++      branch = 0;
++      if (spu_bb_info[i].prop_jump)
++	{
++	  branch = spu_bb_info[i].prop_jump;
++	  branch_target = get_branch_target (branch);
++	  branch_addr = INSN_ADDRESSES (INSN_UID (branch));
++	  required_dist = spu_hint_dist;
++	}
++      /* Search from end of a block to beginning.   In this loop, find
++         jumps which need a branch and emit them only when:
++         - it's an indirect branch and we're at the insn which sets
++         the register  
++         - we're at an insn that will invalidate the hint. e.g., a
++         call, another hint insn, inline asm that clobbers $hbr, and
++         some inlined operations (divmodsi4).  Don't consider jumps
++         because they are only at the end of a block and are
++         considered when we are deciding whether to propagate
++         - we're getting too far away from the branch.  The hbr insns
++         only have a signed 10 bit offset
++         We go back as far as possible so the branch will be considered
++         for propagation when we get to the beginning of the block.  */
++      for (insn = BB_END (bb); insn; insn = PREV_INSN (insn))
+ 	{
+-	  /* prev_insn will always be set because the first insn is
+-	     always 8-byte aligned. */
+-	  emit_nop_for_insn (prev_insn);
+-	  length += 4;
++	  if (INSN_P (insn))
++	    {
++	      insn_addr = INSN_ADDRESSES (INSN_UID (insn));
++	      if (branch
++		  && ((GET_CODE (branch_target) == REG
++		       && set_of (branch_target, insn) != NULL_RTX)
++		      || insn_clobbers_hbr (insn)
++		      || branch_addr - insn_addr > 600))
++		{
++		  rtx next = NEXT_INSN (insn);
++		  int next_addr = INSN_ADDRESSES (INSN_UID (next));
++		  if (insn != BB_END (bb)
++		      && branch_addr - next_addr >= required_dist)
++		    {
++		      if (dump_file)
++			fprintf (dump_file,
++				 "hint for %i in block %i before %i\n",
++				 INSN_UID (branch), bb->index,
++				 INSN_UID (next));
++		      spu_emit_branch_hint (next, branch, branch_target,
++					    branch_addr - next_addr, blocks);
++		    }
++		  branch = 0;
++		}
++
++	      /* JUMP_P will only be true at the end of a block.  When
++	         branch is already set it means we've previously decided
++	         to propagate a hint for that branch into this block. */
++	      if (CALL_P (insn) || (JUMP_P (insn) && !branch))
++		{
++		  branch = 0;
++		  if ((branch_target = get_branch_target (insn)))
++		    {
++		      branch = insn;
++		      branch_addr = insn_addr;
++		      required_dist = spu_hint_dist;
++		    }
++		}
++	    }
++	  if (insn == BB_HEAD (bb))
++	    break;
++	}
++
++      if (branch)
++	{
++	  /* If we haven't emitted a hint for this branch yet, it might
++	     be profitable to emit it in one of the predecessor blocks,
++	     especially for loops.  */
++	  rtx bbend;
++	  basic_block prev = 0, prop = 0, prev2 = 0;
++	  int loop_exit = 0, simple_loop = 0;
++	  int next_addr = INSN_ADDRESSES (INSN_UID (NEXT_INSN (insn)));
++
++	  for (j = 0; j < EDGE_COUNT (bb->preds); j++)
++	    if (EDGE_PRED (bb, j)->flags & EDGE_FALLTHRU)
++	      prev = EDGE_PRED (bb, j)->src;
++	    else
++	      prev2 = EDGE_PRED (bb, j)->src;
++
++	  for (j = 0; j < EDGE_COUNT (bb->succs); j++)
++	    if (EDGE_SUCC (bb, j)->flags & EDGE_LOOP_EXIT)
++	      loop_exit = 1;
++	    else if (EDGE_SUCC (bb, j)->dest == bb)
++	      simple_loop = 1;
++
++	  /* If this branch is a loop exit then propagate to previous
++	     fallthru block. This catches the cases when it is a simple
++	     loop or when there is an initial branch into the loop. */
++	  if (prev && (loop_exit || simple_loop)
++	      && prev->loop_depth <= bb->loop_depth)
++	    prop = prev;
++
++	  /* If there is only one adjacent predecessor.  Don't propagate
++	     outside this loop.  This loop_depth test isn't perfect, but
++	     I'm not sure the loop_father member is valid at this point.  */
++	  else if (prev && single_pred_p (bb)
++		   && prev->loop_depth == bb->loop_depth)
++	    prop = prev;
++
++	  /* If this is the JOIN block of a simple IF-THEN then
++	     propogate the hint to the HEADER block. */
++	  else if (prev && prev2
++		   && EDGE_COUNT (bb->preds) == 2
++		   && EDGE_COUNT (prev->preds) == 1
++		   && EDGE_PRED (prev, 0)->src == prev2
++		   && prev2->loop_depth == bb->loop_depth
++		   && GET_CODE (branch_target) != REG)
++	    prop = prev;
++
++	  /* Don't propagate when:
++	     - this is a simple loop and the hint would be too far
++	     - this is not a simple loop and there are 16 insns in
++	     this block already
++	     - the predecessor block ends in a branch that will be
++	     hinted
++	     - the predecessor block ends in an insn that invalidates
++	     the hint */
++	  if (prop
++	      && prop->index >= 0
++	      && (bbend = BB_END (prop))
++	      && branch_addr - INSN_ADDRESSES (INSN_UID (bbend)) <
++	      (simple_loop ? 600 : 16 * 4) && get_branch_target (bbend) == 0
++	      && (JUMP_P (bbend) || !insn_clobbers_hbr (bbend)))
++	    {
++	      if (dump_file)
++		fprintf (dump_file, "propagate from %i to %i (loop depth %i) "
++			 "for %i (loop_exit %i simple_loop %i dist %i)\n",
++			 bb->index, prop->index, bb->loop_depth,
++			 INSN_UID (branch), loop_exit, simple_loop,
++			 branch_addr - INSN_ADDRESSES (INSN_UID (bbend)));
++
++	      spu_bb_info[prop->index].prop_jump = branch;
++	      spu_bb_info[prop->index].bb_index = i;
++	    }
++	  else if (branch_addr - next_addr >= required_dist)
++	    {
++	      if (dump_file)
++		fprintf (dump_file, "hint for %i in block %i before %i\n",
++			 INSN_UID (branch), bb->index,
++			 INSN_UID (NEXT_INSN (insn)));
++	      spu_emit_branch_hint (NEXT_INSN (insn), branch, branch_target,
++				    branch_addr - next_addr, blocks);
++	    }
++	  branch = 0;
+ 	}
+-      prev_insn = insn;
+     }
+-}
++  free (spu_bb_info);
+ 
+-static void
+-spu_machine_dependent_reorg (void)
+-{
+-  if (optimize > 0)
++  if (!sbitmap_empty_p (blocks))
++    find_many_sub_basic_blocks (blocks);
++
++  /* We have to schedule to make sure alignment is ok. */
++  FOR_EACH_BB (bb) bb->flags &= ~BB_DISABLE_SCHEDULE;
++
++  /* The hints need to be scheduled, so call it again. */
++  schedule_insns ();
++
++  insert_hbrp ();
++
++  pad_bb ();
++
++
++  if (spu_flag_var_tracking)
+     {
+-      if (TARGET_BRANCH_HINTS)
+-	insert_branch_hints ();
+-      insert_nops ();
++      df_analyze ();
++      timevar_push (TV_VAR_TRACKING);
++      variable_tracking_main ();
++      timevar_pop (TV_VAR_TRACKING);
++      df_finish_pass (false);
+     }
++
++  free_bb_for_insn ();
++
++  in_spu_reorg = 0;
+ }
+ 
+
+ 
+@@ -2402,15 +2718,14 @@
+ }
+ 
+ static int
+-spu_sched_variable_issue (FILE * dump ATTRIBUTE_UNUSED,
+-			  int verbose ATTRIBUTE_UNUSED, rtx insn,
+-			  int can_issue_more)
+-{
+-  if (GET_CODE (PATTERN (insn)) != USE
+-      && GET_CODE (PATTERN (insn)) != CLOBBER
+-      && get_pipe (insn) != -2)
+-    can_issue_more--;
+-  return can_issue_more;
++uses_ls_unit(rtx insn)
++{
++  rtx set = single_set (insn);
++  if (set != 0
++      && (GET_CODE (SET_DEST (set)) == MEM
++	  || GET_CODE (SET_SRC (set)) == MEM))
++    return 1;
++  return 0;
+ }
+ 
+ static int
+@@ -2436,7 +2751,6 @@
+     case TYPE_FPD:
+     case TYPE_FP6:
+     case TYPE_FP7:
+-    case TYPE_IPREFETCH:
+       return 0;
+ 
+     case TYPE_LNOP:
+@@ -2446,41 +2760,332 @@
+     case TYPE_BR:
+     case TYPE_MULTI1:
+     case TYPE_HBR:
++    case TYPE_IPREFETCH:
+       return 1;
+     default:
+       abort ();
+     }
+ }
+ 
++
++/* haifa-sched.c has a static variable that keeps track of the current
++   cycle.  It is passed to spu_sched_reorder, and we record it here for
++   use by spu_sched_variable_issue.  It won't be accurate if the
++   scheduler updates it's clock_var between the two calls. */
++static int clock_var;
++
++/* This is used to keep track of insn alignment.  Set to 0 at the
++   beginning of each block and increased by the "length" attr of each
++   insn scheduled. */
++static int spu_sched_length;
++
++/* Record when we've issued pipe0 and pipe1 insns so we can reorder the
++   ready list appropriately in spu_sched_reorder(). */
++static int pipe0_clock;
++static int pipe1_clock;
++
++static int prev_clock_var;
++
++static int prev_priority;
++
++/* The SPU needs to load the next ilb sometime during the execution of
++   the previous ilb.  There is a potential conflict if every cycle has a
++   load or store.  To avoid the conflict we make sure the load/store
++   unit is free for at least one cycle during the execution of insns in
++   the previous ilb. */
++static int spu_ls_first;
++static int prev_ls_clock;
++
++static void
++spu_sched_init_global (FILE *file ATTRIBUTE_UNUSED, int verbose ATTRIBUTE_UNUSED,
++		       int max_ready ATTRIBUTE_UNUSED)
++{
++  spu_sched_length = 0;
++}
++
++static void
++spu_sched_init (FILE *file ATTRIBUTE_UNUSED, int verbose ATTRIBUTE_UNUSED,
++		int max_ready ATTRIBUTE_UNUSED)
++{
++  if (align_labels > 4 || align_loops > 4 || align_jumps > 4)
++    {
++      /* When any block might be at least 8-byte aligned, assume they
++         will all be at least 8-byte aligned to make sure dual issue
++         works out correctly. */
++      spu_sched_length = 0;
++    }
++  spu_ls_first = INT_MAX;
++  clock_var = -1;
++  prev_ls_clock = -1;
++  pipe0_clock = -1;
++  pipe1_clock = -1;
++  prev_clock_var = -1;
++  prev_priority = -1;
++}
++
+ static int
+-spu_sched_adjust_priority (rtx insn, int pri)
++spu_sched_variable_issue (FILE *file ATTRIBUTE_UNUSED,
++			  int verbose ATTRIBUTE_UNUSED, rtx insn, int more)
+ {
+-  int p = get_pipe (insn);
+-  /* Schedule UNSPEC_CONVERT's early so they have less effect on
+-   * scheduling.  */
++  int len;
++  int p;
+   if (GET_CODE (PATTERN (insn)) == USE
+       || GET_CODE (PATTERN (insn)) == CLOBBER
+-      || p == -2)
+-    return pri + 100; 
+-  /* Schedule pipe0 insns early for greedier dual issue. */
+-  if (p != 1)
+-    return pri + 50;
+-  return pri;
++      || (len = get_attr_length (insn)) == 0)
++    return more;
++
++  spu_sched_length += len;
++
++  /* Reset on inline asm */
++  if (INSN_CODE (insn) == -1)
++    {
++      spu_ls_first = INT_MAX;
++      pipe0_clock = -1;
++      pipe1_clock = -1;
++      return 0;
++    }
++  p = get_pipe (insn);
++  if (p == 0)
++    pipe0_clock = clock_var;
++  else
++    pipe1_clock = clock_var;
++
++  if (in_spu_reorg)
++    {
++      if (clock_var - prev_ls_clock > 1
++	  || INSN_CODE (insn) == CODE_FOR_iprefetch)
++	spu_ls_first = INT_MAX;
++      if (uses_ls_unit (insn))
++	{
++	  if (spu_ls_first == INT_MAX)
++	    spu_ls_first = spu_sched_length;
++	  prev_ls_clock = clock_var;
++	}
++
++      /* The scheduler hasn't inserted the nop, but we will later on.
++         Include those nops in spu_sched_length. */
++      if (prev_clock_var == clock_var && (spu_sched_length & 7))
++	spu_sched_length += 4;
++      prev_clock_var = clock_var;
++
++      /* more is -1 when called from spu_sched_reorder for new insns
++         that don't have INSN_PRIORITY */
++      if (more >= 0)
++	prev_priority = INSN_PRIORITY (insn);
++    }
++
++  /* Always try issueing more insns.  spu_sched_reorder will decide 
++     when the cycle should be advanced. */
++  return 1;
++}
++
++/* This function is called for both TARGET_SCHED_REORDER and
++   TARGET_SCHED_REORDER2.  */
++static int
++spu_sched_reorder (FILE *file ATTRIBUTE_UNUSED, int verbose ATTRIBUTE_UNUSED,
++		   rtx *ready, int *nreadyp, int clock)
++{
++  int i, nready = *nreadyp;
++  int pipe_0, pipe_1, pipe_hbrp, pipe_ls, schedule_i;
++  rtx insn;
++
++  clock_var = clock;
++
++  if (nready <= 0 || pipe1_clock >= clock)
++    return 0;
++
++  /* Find any rtl insns that don't generate assembly insns and schedule
++     them first. */
++  for (i = nready - 1; i >= 0; i--)
++    {
++      insn = ready[i];
++      if (INSN_CODE (insn) == -1
++	  || INSN_CODE (insn) == CODE_FOR_blockage
++	  || INSN_CODE (insn) == CODE_FOR__spu_convert)
++	{
++	  ready[i] = ready[nready - 1];
++	  ready[nready - 1] = insn;
++	  return 1;
++	}
++    }
++
++  pipe_0 = pipe_1 = pipe_hbrp = pipe_ls = schedule_i = -1;
++  for (i = 0; i < nready; i++)
++    if (INSN_CODE (ready[i]) != -1)
++      {
++	insn = ready[i];
++	switch (get_attr_type (insn))
++	  {
++	  default:
++	  case TYPE_MULTI0:
++	  case TYPE_CONVERT:
++	  case TYPE_FX2:
++	  case TYPE_FX3:
++	  case TYPE_SPR:
++	  case TYPE_NOP:
++	  case TYPE_FXB:
++	  case TYPE_FPD:
++	  case TYPE_FP6:
++	  case TYPE_FP7:
++	    pipe_0 = i;
++	    break;
++	  case TYPE_LOAD:
++	  case TYPE_STORE:
++	    pipe_ls = i;
++	  case TYPE_LNOP:
++	  case TYPE_SHUF:
++	  case TYPE_BR:
++	  case TYPE_MULTI1:
++	  case TYPE_HBR:
++	    pipe_1 = i;
++	    break;
++	  case TYPE_IPREFETCH:
++	    pipe_hbrp = i;
++	    break;
++	  }
++      }
++
++  /* In the first scheduling phase, schedule loads and stores together
++     to increase the chance they will get merged during postreload CSE. */
++  if (!reload_completed && pipe_ls >= 0)
++    {
++      insn = ready[pipe_ls];
++      ready[pipe_ls] = ready[nready - 1];
++      ready[nready - 1] = insn;
++      return 1;
++    }
++
++  /* If there is an hbrp ready, prefer it over other pipe 1 insns. */
++  if (pipe_hbrp >= 0)
++    pipe_1 = pipe_hbrp;
++
++  /* When we have loads/stores in every cycle of the last 15 insns and
++     we are about to schedule another load/store, emit an hbrp insn
++     instead. */
++  if (in_spu_reorg
++      && spu_sched_length - spu_ls_first >= 4 * 15
++      && !(pipe0_clock < clock && pipe_0 >= 0) && pipe_1 == pipe_ls)
++    {
++      insn = sched_emit_insn (gen_iprefetch (GEN_INT (3)));
++      recog_memoized (insn);
++      if (pipe0_clock < clock)
++	PUT_MODE (insn, TImode);
++      spu_sched_variable_issue (file, verbose, insn, -1);
++      return 0;
++    }
++
++  /* In general, we want to emit nops to increase dual issue, but dual
++     issue isn't faster when one of the insns could be scheduled later
++     without effecting the critical path.  We look at INSN_PRIORITY to
++     make a good guess, but it isn't perfect so -mdual-nops=n can be
++     used to effect it. */
++  if (in_spu_reorg && spu_dual_nops < 10)
++    {
++      /* When we are at an even address and we are not issueing nops to
++         improve scheduling then we need to advance the cycle.  */
++      if ((spu_sched_length & 7) == 0 && prev_clock_var == clock
++	  && (spu_dual_nops == 0
++	      || (pipe_1 != -1
++		  && prev_priority >
++		  INSN_PRIORITY (ready[pipe_1]) + spu_dual_nops)))
++	return 0;
++
++      /* When at an odd address, schedule the highest priority insn
++         without considering pipeline. */
++      if ((spu_sched_length & 7) == 4 && prev_clock_var != clock
++	  && (spu_dual_nops == 0
++	      || (prev_priority >
++		  INSN_PRIORITY (ready[nready - 1]) + spu_dual_nops)))
++	return 1;
++    }
++
++
++  /* We haven't issued a pipe0 insn yet this cycle, if there is a
++     pipe0 insn in the ready list, schedule it. */
++  if (pipe0_clock < clock && pipe_0 >= 0)
++    schedule_i = pipe_0;
++
++  /* Either we've scheduled a pipe0 insn already or there is no pipe0
++     insn to schedule.  Put a pipe1 insn at the front of the ready list. */
++  else
++    schedule_i = pipe_1;
++
++  if (schedule_i > -1)
++    {
++      insn = ready[schedule_i];
++      ready[schedule_i] = ready[nready - 1];
++      ready[nready - 1] = insn;
++      return 1;
++    }
++  return 0;
+ }
+ 
+ /* INSN is dependent on DEP_INSN. */
+ static int
+-spu_sched_adjust_cost (rtx insn, rtx link ATTRIBUTE_UNUSED,
+-		       rtx dep_insn ATTRIBUTE_UNUSED, int cost)
++spu_sched_adjust_cost (rtx insn, rtx link, rtx dep_insn, int cost)
+ {
+-  if (GET_CODE (insn) == CALL_INSN)
++  rtx set;
++
++  /* The blockage pattern is used to prevent instructions from being
++     moved across it and has no cost. */
++  if (INSN_CODE (insn) == CODE_FOR_blockage
++      || INSN_CODE (dep_insn) == CODE_FOR_blockage)
++    return 0;
++
++  if (INSN_CODE (insn) == CODE_FOR__spu_convert
++      || INSN_CODE (dep_insn) == CODE_FOR__spu_convert)
++    return 0;
++
++  /* Make sure hbrps are spread out. */
++  if (INSN_CODE (insn) == CODE_FOR_iprefetch
++      && INSN_CODE (dep_insn) == CODE_FOR_iprefetch)
++    return 8;
++
++  /* Make sure hints and hbrps are 2 cycles apart. */
++  if ((INSN_CODE (insn) == CODE_FOR_iprefetch
++       || INSN_CODE (insn) == CODE_FOR_hbr)
++       && (INSN_CODE (dep_insn) == CODE_FOR_iprefetch
++	   || INSN_CODE (dep_insn) == CODE_FOR_hbr))
++    return 2;
++
++  /* An hbrp has no real dependency on other insns. */
++  if (INSN_CODE (insn) == CODE_FOR_iprefetch
++      || INSN_CODE (dep_insn) == CODE_FOR_iprefetch)
++    return 0;
++
++  /* Assuming that it is unlikely an argument register will be used in
++     the first cycle of the called function, we reduce the cost for
++     slightly better scheduling of dep_insn.  When not hinted, the
++     mispredicted branch would hide the cost as well.  */
++  if (CALL_P (insn))
++  {
++    rtx target = get_branch_target (insn);
++    if (GET_CODE (target) != REG || !set_of (target, insn))
++      return cost - 2;
++    return cost;
++  }
++
++  /* And when returning from a function, let's assume the return values
++     are completed sooner too. */
++  if (CALL_P (dep_insn))
+     return cost - 2;
++
++  /* Make sure an instruction that loads from the back chain is schedule
++     away from the return instruction so a hint is more likely to get
++     issued. */
++  if (INSN_CODE (insn) == CODE_FOR__return
++      && (set = single_set (dep_insn))
++      && GET_CODE (SET_DEST (set)) == REG
++      && REGNO (SET_DEST (set)) == LINK_REGISTER_REGNUM)
++    return 20;
++
+   /* The dfa scheduler sets cost to 0 for all anti-dependencies and the
+      scheduler makes every insn in a block anti-dependent on the final
+      jump_insn.  We adjust here so higher cost insns will get scheduled
+      earlier. */
+-  if (GET_CODE (insn) == JUMP_INSN && REG_NOTE_KIND (link) == REG_DEP_ANTI)
++  if (JUMP_P (insn) && REG_NOTE_KIND (link) == REG_DEP_ANTI)
+     return insn_cost (dep_insn) - 3;
++
+   return cost;
+ }
+ 
+
+@@ -5601,3 +6206,17 @@
+    for shift counts.  */
+   return SImode;
+ }
++
++/* An early place to adjust some flags after GCC has finished processing
++ * them. */
++static void
++asm_file_start (void)
++{
++  /* Variable tracking should be run after all optimizations which
++     change order of insns.  It also needs a valid CFG. */
++  spu_flag_var_tracking = flag_var_tracking;
++  flag_var_tracking = 0;
++
++  default_file_start ();
++}
++
+diff -Naur gcc-4.3.2.orig/gcc/config/spu/spu.h gcc-4.3.2/gcc/config/spu/spu.h
+--- gcc-4.3.2.orig/gcc/config/spu/spu.h	2008-08-12 06:07:53.000000000 -0700
++++ gcc-4.3.2/gcc/config/spu/spu.h	2008-09-09 14:17:19.000000000 -0700
+@@ -50,7 +50,8 @@
+ 
+ /* Default target_flags if no switches specified.  */
+ #ifndef TARGET_DEFAULT
+-#define TARGET_DEFAULT (MASK_ERROR_RELOC | MASK_SAFE_DMA | MASK_BRANCH_HINTS)
++#define TARGET_DEFAULT (MASK_ERROR_RELOC | MASK_SAFE_DMA | MASK_BRANCH_HINTS \
++			| MASK_SAFE_HINTS)
+ #endif
+ 
+ 
+
+diff -Naur gcc-4.3.2.orig/gcc/config/spu/spu.md gcc-4.3.2/gcc/config/spu/spu.md
+--- gcc-4.3.2.orig/gcc/config/spu/spu.md	2008-08-19 09:37:13.000000000 -0700
++++ gcc-4.3.2/gcc/config/spu/spu.md	2008-09-09 14:17:19.000000000 -0700
+@@ -4249,12 +4249,23 @@
+   "lnop"
+   [(set_attr "type" "lnop")])
+ 
++;; The operand is so we know why we generated this hbrp.
++;; We clobber mem to make sure it isn't moved over any
++;; loads, stores or calls while scheduling.
+ (define_insn "iprefetch"
+-  [(unspec [(const_int 0)] UNSPEC_IPREFETCH)]
++  [(unspec [(match_operand:SI 0 "const_int_operand" "n")] UNSPEC_IPREFETCH)
++   (clobber (mem:BLK (scratch)))]
+   ""
+-  "hbrp"
++  "hbrp\t# %0"
+   [(set_attr "type" "iprefetch")])
+ 
++;; A non-volatile version so it gets scheduled
++(define_insn "nopn_nv"
++  [(unspec [(match_operand:SI 0 "register_operand" "r")] UNSPEC_NOP)]
++  ""
++  "nop\t%0"
++  [(set_attr "type" "nop")])
++
+ (define_insn "hbr"
+   [(set (reg:SI 130)
+ 	(unspec:SI [(match_operand:SI 0 "immediate_operand" "i,i,i")
+diff -Naur gcc-4.3.2.orig/gcc/config/spu/spu.opt gcc-4.3.2/gcc/config/spu/spu.opt
+--- gcc-4.3.2.orig/gcc/config/spu/spu.opt	2007-08-02 03:49:31.000000000 -0700
++++ gcc-4.3.2/gcc/config/spu/spu.opt	2008-09-09 14:17:19.000000000 -0700
+@@ -35,6 +35,14 @@
+ Target Report RejectNegative InverseMask(SAFE_DMA)
+ volatile must be specified on any memory that is effected by DMA
+ 
++mdual-nops
++Target Report Var(spu_dual_nops,10) Init(10)
++Insert nops when it might improve performance by allowing dual issue (default)
++
++mdual-nops=
++Target RejectNegative Joined UInteger Var(spu_dual_nops)
++Insert nops when it might improve performance by allowing dual issue (default)
++
+ mstdmain
+ Target Report Mask(STD_MAIN)
+ Use standard main function as entry for startup
+@@ -43,6 +51,14 @@
+ Target Report Mask(BRANCH_HINTS)
+ Generate branch hints for branches
+ 
++mhint-max-nops=
++Target RejectNegative Joined UInteger Var(spu_max_nops) Init(2)
++Maximum number of nops to insert for a hint (Default 2)
++
++mhint-max-distance=
++Target RejectNegative Joined Var(spu_max_distance_str)
++Approximate maximum number of instructions to allow between a hint and its branch [125]
++
+ msmall-mem
+ Target Report RejectNegative InverseMask(LARGE_MEM)
+ Generate code for 18 bit addressing
+@@ -55,6 +71,10 @@
+ Target RejectNegative Joined Var(spu_fixed_range_string)
+ Specify range of registers to make fixed
+ 
++msafe-hints
++Target Report Mask(SAFE_HINTS)
++Insert hbrp instructions after hinted branch targets to avoid the SPU hang issue
++
+ march=
+ Target RejectNegative Joined Var(spu_arch_string)
+ Generate code for given CPU
+diff -Naur gcc-4.3.2.orig/gcc/config/spu/spu_mfcio.h gcc-4.3.2/gcc/config/spu/spu_mfcio.h
+--- gcc-4.3.2.orig/gcc/config/spu/spu_mfcio.h	2008-08-05 07:06:09.000000000 -0700
++++ gcc-4.3.2/gcc/config/spu/spu_mfcio.h	2008-08-28 12:45:39.000000000 -0700
+@@ -289,6 +289,34 @@
+ #define spu_write_srr0(srr0)          spu_writech(SPU_WrSRR0,srr0)
+ #define spu_read_srr0()               spu_readch(SPU_RdSRR0)
+ 
++/* Interrupt-Safe Critical Sections */
++
++static __inline__ unsigned int mfc_begin_critical_section (void)
++  __attribute__ ((__always_inline__));
++
++static __inline__ unsigned int
++mfc_begin_critical_section (void)
++{
++#ifdef SPU_MFCIO_INTERRUPT_SAFE
++  unsigned int __status = spu_read_machine_status ();
++  spu_idisable ();
++  return __status;
++#else
++  return 0;
++#endif
++}
++
++static __inline__ void mfc_end_critical_section (unsigned int)
++  __attribute__ ((__always_inline__));
++
++static __inline__ void
++mfc_end_critical_section (unsigned int __status __attribute__ ((__unused__)))
++{
++#ifdef SPU_MFCIO_INTERRUPT_SAFE
++  if (__status & 1)
++    spu_ienable ();
++#endif
++}
+ 
+ /* MFC Tag Manager */
+ 
+diff -Naur gcc-4.3.2.orig/gcc/config/spu/t-spu-elf gcc-4.3.2/gcc/config/spu/t-spu-elf
+--- gcc-4.3.2.orig/gcc/config/spu/t-spu-elf	2008-08-19 09:37:13.000000000 -0700
++++ gcc-4.3.2/gcc/config/spu/t-spu-elf	2008-11-14 14:28:54.000000000 -0800
+@@ -14,6 +14,9 @@
+ #  along with GCC; see the file COPYING3.  If not see
+ #  <http://www.gnu.org/licenses/>.
+ 
++# Define system directory to match STANDARD_INCLUDE_DIR in spu-elf.h,
++# allowing combined SPU/PPU sysroot builds.
++NATIVE_SYSTEM_HEADER_DIR = /include
+ 
+ # Suppress building libgcc1.a
+ LIBGCC1 =
+diff -Naur gcc-4.3.2.orig/gcc/config/xtensa/xtensa.md gcc-4.3.2/gcc/config/xtensa/xtensa.md
+--- gcc-4.3.2.orig/gcc/config/xtensa/xtensa.md	2007-12-20 14:35:59.000000000 -0800
++++ gcc-4.3.2/gcc/config/xtensa/xtensa.md	2008-09-02 10:26:57.000000000 -0700
+@@ -217,10 +217,11 @@
+ 		 (any_extend:DI (match_operand:SI 2 "register_operand"))))]
+   "TARGET_MUL32_HIGH"
+ {
+-  emit_insn (gen_mulsi3 (gen_lowpart (SImode, operands[0]),
+-			 operands[1], operands[2]));
++  rtx temp = gen_reg_rtx (SImode);
++  emit_insn (gen_mulsi3 (temp, operands[1], operands[2]));
+   emit_insn (gen_<u>mulsi3_highpart (gen_highpart (SImode, operands[0]),
+ 				     operands[1], operands[2]));
++  emit_insn (gen_movsi (gen_lowpart (SImode, operands[0]), temp));
+   DONE;
+ })
+ 
+diff -Naur gcc-4.3.2.orig/gcc/config.gcc gcc-4.3.2/gcc/config.gcc
+--- gcc-4.3.2.orig/gcc/config.gcc	2008-06-09 09:32:15.000000000 -0700
++++ gcc-4.3.2/gcc/config.gcc	2008-11-20 09:09:53.000000000 -0800
+@@ -1266,7 +1266,7 @@
+ 		;;
+ 	esac
+ 	tm_file="${tm_file} i386/sol2.h"
+-	tmake_file="t-sol2 i386/t-sol2 t-svr4"
++	tmake_file="t-sol2 t-svr4"
+ 	c_target_objs="sol2-c.o"
+ 	cxx_target_objs="sol2-c.o"
+ 	extra_objs="sol2.o"
+@@ -1289,7 +1289,10 @@
+ 	*-*-solaris2.1[0-9]*)
+ 		tm_file="${tm_file} i386/x86-64.h i386/sol2-10.h"
+ 		tm_defines="${tm_defines} TARGET_BI_ARCH=1"
+-		tmake_file="$tmake_file i386/t-crtstuff i386/t-sol2-10"
++		tmake_file="$tmake_file i386/t-sol2-10"
++		# i386/t-crtstuff only affects libgcc.  Its inclusion
++		# depends on a runtime test and is thus performed in
++		# libgcc/configure.ac instead.
+ 		need_64bit_hwint=yes
+ 		# FIXME: -m64 for i[34567]86-*-* should be allowed just
+ 		# like -m32 for x86_64-*-*.
+@@ -1305,12 +1308,6 @@
+ 			exit 1
+ 			;;
+ 		esac
+-		# Solaris 2.10 provides crt1.o, crti.o, crtn.o, and gcrt1.o as
+-		# part of the base system.
+-		extra_parts="gmon.o crtbegin.o crtend.o"
+-		;;
+-	*)
+-		extra_parts="crt1.o crti.o crtn.o gcrt1.o gmon.o crtbegin.o crtend.o"
+ 		;;
+ 	esac
+ 	case ${enable_threads}:${have_pthread_h}:${have_thread_h} in
+diff -Naur gcc-4.3.2.orig/gcc/cp/ChangeLog gcc-4.3.2/gcc/cp/ChangeLog
+--- gcc-4.3.2.orig/gcc/cp/ChangeLog	2008-08-27 11:02:45.000000000 -0700
++++ gcc-4.3.2/gcc/cp/ChangeLog	2008-12-04 15:00:19.000000000 -0800
+@@ -1,3 +1,68 @@
++2008-12-04  Janis Johnson  <janis187@us.ibm.com>
++
++	Backport from mainline:
++	2008-10-18  Jakub Jelinek  <jakub@redhat.com>
++	            Janis Johnson  <janis187@us.ibm.com>
++
++	* Make-lang.in (check-c++-subtargets): New alias for
++	check-g++-subtargets.
++	(lang_checks_parallelized): Add check-g++.
++	(check_g++_parallelize): New variable.
++
++2008-11-19  Dodji Seketeli  <dodji@redhat.com>
++
++	PR c++/37142
++	* pt.c (coerce_template_template_parm): Use the more robust
++	uses_template_parms instead of dependent_type_p.
++
++2008-11-19  Dodji Seketeli  <dodji@redhat.com>
++
++	PR c++/35405
++	* pt.c (lookup_template_class): Check pointers before dereferencing
++	  Them.
++	* error.c (dump_template_decl): Likewise.
++
++2008-11-19  Jason Merrill  <jason@redhat.com>
++
++	PR c++/37563
++	* parser.c (cp_parser_pseudo_destructor_name): A pseudo-destructor
++	name is not a declaration.
++
++2008-11-14  Jason Merrill  <jason@redhat.com>
++
++	PR c++/38030
++	* semantics.c (finish_call_expr): Don't repeat arg-dep lookup
++	for a non-dependent call.
++
++2008-11-13  Jason Merrill  <jason@redhat.com>
++
++	PR c++/37932
++	* typeck2.c (process_init_constructor_record): Update bitfield
++	handling.
++	
++2008-11-12  Jason Merrill  <jason@redhat.com>
++
++	PR c++/38007
++	* typeck.c (cp_build_modify_expr): Update bitfield handling.
++
++2008-09-30  Simon Martin  <simartin@users.sourceforge.net>
++
++	PR c++/37555
++	* decl.c (grokdeclarator): Set the type for typedefs to a
++	nested-name-specifier to error_mark_node.
++
++2008-09-09  Jakub Jelinek  <jakub@redhat.com>
++
++	PR c++/37389
++	* decl.c (build_enumerator): Handle previous value's DECL_INITIAL
++	being error_operand_p.
++
++2008-09-03  Jakub Jelinek  <jakub@redhat.com>
++
++	PR c++/37348
++	* decl.c (cp_finish_decl): Only set
++	DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P if decl is VAR_DECL.
++
+ 2008-08-27  Release Manager
+ 
+ 	* GCC 4.3.2 released.
+diff -Naur gcc-4.3.2.orig/gcc/cp/Make-lang.in gcc-4.3.2/gcc/cp/Make-lang.in
+--- gcc-4.3.2.orig/gcc/cp/Make-lang.in	2008-02-27 01:26:24.000000000 -0800
++++ gcc-4.3.2/gcc/cp/Make-lang.in	2008-12-04 15:00:19.000000000 -0800
+@@ -136,8 +136,12 @@
+ # check targets.  However, our DejaGNU framework requires 'check-g++' as its
+ # entry point.  We feed the former to the latter here.
+ check-c++ : check-g++
++check-c++-subtargets : check-g++-subtargets
+ # List of targets that can use the generic check- rule and its // variant.
+ lang_checks += check-g++
++lang_checks_parallelized += check-g++
++# For description see comment above check_gcc_parallelize in gcc/Makefile.in.
++check_g++_parallelize = old-deja.exp dg.exp
+ 
+ #
+
+ # Install hooks:
+diff -Naur gcc-4.3.2.orig/gcc/cp/decl.c gcc-4.3.2/gcc/cp/decl.c
+--- gcc-4.3.2.orig/gcc/cp/decl.c	2008-07-07 13:42:03.000000000 -0700
++++ gcc-4.3.2/gcc/cp/decl.c	2008-09-30 12:56:13.000000000 -0700
+@@ -5415,7 +5415,7 @@
+ 	  DECL_INITIAL (decl) = NULL_TREE;
+ 	}
+ 
+-      if (init && init_const_expr_p)
++      if (init && init_const_expr_p && TREE_CODE (decl) == VAR_DECL)
+ 	{
+ 	  DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
+ 	  if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
+@@ -8544,8 +8544,10 @@
+ 	decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
+       else
+ 	decl = build_decl (TYPE_DECL, unqualified_id, type);
+-      if (id_declarator && declarator->u.id.qualifying_scope)
++      if (id_declarator && declarator->u.id.qualifying_scope) {
+ 	error ("%Jtypedef name may not be a nested-name-specifier", decl);
++	TREE_TYPE (decl) = error_mark_node;
++      }
+ 
+       if (decl_context != FIELD)
+ 	{
+@@ -10923,21 +10925,26 @@
+ 	      tree prev_value;
+ 	      bool overflowed;
+ 
+-	      /* The next value is the previous value plus one.  We can
+-		 safely assume that the previous value is an INTEGER_CST.
++	      /* The next value is the previous value plus one.
+ 		 add_double doesn't know the type of the target expression,
+ 		 so we must check with int_fits_type_p as well.  */
+ 	      prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
+-	      overflowed = add_double (TREE_INT_CST_LOW (prev_value),
+-				       TREE_INT_CST_HIGH (prev_value),
+-				       1, 0, &lo, &hi);
+-	      value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
+-	      overflowed |= !int_fits_type_p (value, TREE_TYPE (prev_value));
+-
+-	      if (overflowed)
++	      if (error_operand_p (prev_value))
++		value = error_mark_node;
++	      else
+ 		{
+-		  error ("overflow in enumeration values at %qD", name);
+-		  value = error_mark_node;
++		  overflowed = add_double (TREE_INT_CST_LOW (prev_value),
++					   TREE_INT_CST_HIGH (prev_value),
++					   1, 0, &lo, &hi);
++		  value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
++		  overflowed
++		    |= !int_fits_type_p (value, TREE_TYPE (prev_value));
++
++		  if (overflowed)
++		    {
++		      error ("overflow in enumeration values at %qD", name);
++		      value = error_mark_node;
++		    }
+ 		}
+ 	    }
+ 	  else
+diff -Naur gcc-4.3.2.orig/gcc/cp/error.c gcc-4.3.2/gcc/cp/error.c
+--- gcc-4.3.2.orig/gcc/cp/error.c	2008-08-19 04:50:11.000000000 -0700
++++ gcc-4.3.2/gcc/cp/error.c	2008-11-19 14:36:31.000000000 -0800
+@@ -1036,11 +1036,13 @@
+ 	}
+     }
+ 
+-  if (TREE_CODE (DECL_TEMPLATE_RESULT (t)) == TYPE_DECL)
++  if (DECL_TEMPLATE_RESULT (t)
++      && TREE_CODE (DECL_TEMPLATE_RESULT (t)) == TYPE_DECL)
+     dump_type (TREE_TYPE (t),
+ 	       ((flags & ~TFF_CLASS_KEY_OR_ENUM) | TFF_TEMPLATE_NAME
+ 		| (flags & TFF_DECL_SPECIFIERS ? TFF_CLASS_KEY_OR_ENUM : 0)));
+-  else if (TREE_CODE (DECL_TEMPLATE_RESULT (t)) == VAR_DECL)
++  else if (DECL_TEMPLATE_RESULT (t)
++           && TREE_CODE (DECL_TEMPLATE_RESULT (t)) == VAR_DECL)
+     dump_decl (DECL_TEMPLATE_RESULT (t), flags | TFF_TEMPLATE_NAME);
+   else
+     {
+diff -Naur gcc-4.3.2.orig/gcc/cp/parser.c gcc-4.3.2/gcc/cp/parser.c
+--- gcc-4.3.2.orig/gcc/cp/parser.c	2008-08-07 05:27:48.000000000 -0700
++++ gcc-4.3.2/gcc/cp/parser.c	2008-11-19 13:00:23.000000000 -0800
+@@ -5143,7 +5143,7 @@
+ 					    /*typename_keyword_p=*/false,
+ 					    /*check_dependency_p=*/true,
+ 					    /*type_p=*/false,
+-					    /*is_declaration=*/true)
++					    /*is_declaration=*/false)
+        != NULL_TREE);
+   /* Now, if we saw a nested-name-specifier, we might be doing the
+      second production.  */
+diff -Naur gcc-4.3.2.orig/gcc/cp/pt.c gcc-4.3.2/gcc/cp/pt.c
+--- gcc-4.3.2.orig/gcc/cp/pt.c	2008-04-30 08:04:56.000000000 -0700
++++ gcc-4.3.2/gcc/cp/pt.c	2008-11-19 16:05:04.000000000 -0800
+@@ -4709,7 +4709,7 @@
+ 	       D<int, C> d;
+ 
+ 	     i.e. the parameter list of TT depends on earlier parameters.  */
+-	  if (!dependent_type_p (TREE_TYPE (arg))
++	  if (!uses_template_parms (TREE_TYPE (arg))
+ 	      && !same_type_p
+ 		    (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
+ 			     TREE_TYPE (arg)))
+@@ -5504,6 +5504,7 @@
+       d1 = DECL_NAME (template);
+     }
+   else if (TREE_CODE (d1) == TEMPLATE_DECL
++           && DECL_TEMPLATE_RESULT (d1)
+ 	   && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
+     {
+       template = d1;
+diff -Naur gcc-4.3.2.orig/gcc/cp/semantics.c gcc-4.3.2/gcc/cp/semantics.c
+--- gcc-4.3.2.orig/gcc/cp/semantics.c	2008-06-10 23:47:36.000000000 -0700
++++ gcc-4.3.2/gcc/cp/semantics.c	2008-11-14 14:01:12.000000000 -0800
+@@ -1972,7 +1972,9 @@
+   if (processing_template_decl)
+     {
+       result = build_call_list (TREE_TYPE (result), orig_fn, orig_args);
+-      KOENIG_LOOKUP_P (result) = koenig_p;
++      /* Don't repeat arg-dependent lookup at instantiation time if this call
++         is not type-dependent.  */
++      KOENIG_LOOKUP_P (result) = 0;
+     }
+   return result;
+ }
+diff -Naur gcc-4.3.2.orig/gcc/cp/typeck.c gcc-4.3.2/gcc/cp/typeck.c
+--- gcc-4.3.2.orig/gcc/cp/typeck.c	2008-04-29 01:56:27.000000000 -0700
++++ gcc-4.3.2/gcc/cp/typeck.c	2008-11-12 14:08:01.000000000 -0800
+@@ -5650,7 +5650,6 @@
+   tree newrhs = rhs;
+   tree lhstype = TREE_TYPE (lhs);
+   tree olhstype = lhstype;
+-  tree olhs = NULL_TREE;
+   bool plain_assign = (modifycode == NOP_EXPR);
+ 
+   /* Avoid duplicate error messages from operands that had errors.  */
+@@ -5839,35 +5838,11 @@
+ 	      && C_TYPE_FIELDS_READONLY (lhstype))))
+     readonly_error (lhs, "assignment");
+ 
+-  /* If storing into a structure or union member, it has probably been
+-     given type `int'.  Compute the type that would go with the actual
+-     amount of storage the member occupies.  */
++  /* If storing into a structure or union member, it may have been given a
++     lowered bitfield type.  We need to convert to the declared type first,
++     so retrieve it now.  */
+ 
+-  if (TREE_CODE (lhs) == COMPONENT_REF
+-      && (TREE_CODE (lhstype) == INTEGER_TYPE
+-	  || TREE_CODE (lhstype) == REAL_TYPE
+-	  || TREE_CODE (lhstype) == ENUMERAL_TYPE))
+-    {
+-      lhstype = TREE_TYPE (get_unwidened (lhs, 0));
+-
+-      /* If storing in a field that is in actuality a short or narrower
+-	 than one, we must store in the field in its actual type.  */
+-
+-      if (lhstype != TREE_TYPE (lhs))
+-	{
+-	  /* Avoid warnings converting integral types back into enums for
+-	     enum bit fields.  */
+-	  if (TREE_CODE (lhstype) == INTEGER_TYPE
+-	      && TREE_CODE (olhstype) == ENUMERAL_TYPE)
+-	    {
+-	      if (TREE_SIDE_EFFECTS (lhs))
+-		lhs = stabilize_reference (lhs);
+-	      olhs = lhs;
+-	    }
+-	  lhs = copy_node (lhs);
+-	  TREE_TYPE (lhs) = lhstype;
+-	}
+-    }
++  olhstype = unlowered_expr_type (lhs);
+ 
+   /* Convert new value to destination type.  */
+ 
+@@ -5903,21 +5878,17 @@
+     }
+ 
+   if (modifycode == INIT_EXPR)
+-    newrhs = convert_for_initialization (lhs, lhstype, newrhs, LOOKUP_NORMAL,
++    newrhs = convert_for_initialization (lhs, olhstype, newrhs, LOOKUP_NORMAL,
+ 					 "initialization", NULL_TREE, 0);
+   else
++    newrhs = convert_for_assignment (olhstype, newrhs, "assignment",
++				     NULL_TREE, 0);
++
++  if (!same_type_p (lhstype, olhstype))
++    newrhs = cp_convert_and_check (lhstype, newrhs);
++
++  if (modifycode != INIT_EXPR)
+     {
+-      /* Avoid warnings on enum bit fields.  */
+-      if (TREE_CODE (olhstype) == ENUMERAL_TYPE
+-	  && TREE_CODE (lhstype) == INTEGER_TYPE)
+-	{
+-	  newrhs = convert_for_assignment (olhstype, newrhs, "assignment",
+-					   NULL_TREE, 0);
+-	  newrhs = convert_force (lhstype, newrhs, 0);
+-	}
+-      else
+-	newrhs = convert_for_assignment (lhstype, newrhs, "assignment",
+-					 NULL_TREE, 0);
+       if (TREE_CODE (newrhs) == CALL_EXPR
+ 	  && TYPE_NEEDS_CONSTRUCTING (lhstype))
+ 	newrhs = build_cplus_new (lhstype, newrhs);
+@@ -5949,21 +5920,7 @@
+   if (!plain_assign)
+     TREE_NO_WARNING (result) = 1;
+ 
+-  /* If we got the LHS in a different type for storing in,
+-     convert the result back to the nominal type of LHS
+-     so that the value we return always has the same type
+-     as the LHS argument.  */
+-
+-  if (olhstype == TREE_TYPE (result))
+-    return result;
+-  if (olhs)
+-    {
+-      result = build2 (COMPOUND_EXPR, olhstype, result, olhs);
+-      TREE_NO_WARNING (result) = 1;
+-      return result;
+-    }
+-  return convert_for_assignment (olhstype, result, "assignment",
+-				 NULL_TREE, 0);
++  return result;
+ }
+ 
+ tree
+diff -Naur gcc-4.3.2.orig/gcc/cp/typeck2.c gcc-4.3.2/gcc/cp/typeck2.c
+--- gcc-4.3.2.orig/gcc/cp/typeck2.c	2008-02-03 19:28:53.000000000 -0800
++++ gcc-4.3.2/gcc/cp/typeck2.c	2008-11-13 20:16:07.000000000 -0800
+@@ -895,6 +895,7 @@
+   for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
+     {
+       tree next;
++      tree type;
+ 
+       if (!DECL_NAME (field) && DECL_C_BIT_FIELD (field))
+ 	{
+@@ -906,6 +907,11 @@
+       if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
+ 	continue;
+ 
++      /* If this is a bitfield, first convert to the declared type.  */
++      type = TREE_TYPE (field);
++      if (DECL_BIT_FIELD_TYPE (field))
++	type = DECL_BIT_FIELD_TYPE (field);
++
+       if (idx < VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init)))
+ 	{
+ 	  constructor_elt *ce = VEC_index (constructor_elt,
+@@ -926,7 +932,7 @@
+ 	    }
+ 
+ 	  gcc_assert (ce->value);
+-	  next = digest_init (TREE_TYPE (field), ce->value);
++	  next = digest_init (type, ce->value);
+ 	  ++idx;
+ 	}
+       else if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (field)))
+@@ -969,6 +975,9 @@
+ 	    continue;
+ 	}
+ 
++      /* If this is a bitfield, now convert to the lowered type.  */
++      if (type != TREE_TYPE (field))
++	next = cp_convert_and_check (TREE_TYPE (field), next);
+       flags |= picflag_from_initializer (next);
+       CONSTRUCTOR_APPEND_ELT (v, field, next);
+     }
+diff -Naur gcc-4.3.2.orig/gcc/cse.c gcc-4.3.2/gcc/cse.c
+--- gcc-4.3.2.orig/gcc/cse.c	2008-03-19 03:06:52.000000000 -0700
++++ gcc-4.3.2/gcc/cse.c	2008-12-04 13:49:29.000000000 -0800
+@@ -1363,17 +1363,6 @@
+   struct table_elt *p
+     = lookup (x, SAFE_HASH (x, VOIDmode), GET_MODE (x));
+ 
+-  /* If we are looking for a CONST_INT, the mode doesn't really matter, as
+-     long as we are narrowing.  So if we looked in vain for a mode narrower
+-     than word_mode before, look for word_mode now.  */
+-  if (p == 0 && code == CONST_INT
+-      && GET_MODE_SIZE (GET_MODE (x)) < GET_MODE_SIZE (word_mode))
+-    {
+-      x = copy_rtx (x);
+-      PUT_MODE (x, word_mode);
+-      p = lookup (x, SAFE_HASH (x, VOIDmode), word_mode);
+-    }
+-
+   if (p == 0)
+     return 0;
+ 
+@@ -3182,17 +3171,24 @@
+       if (const_arg0 == 0 || const_arg1 == 0)
+ 	{
+ 	  struct table_elt *p0, *p1;
+-	  rtx true_rtx = const_true_rtx, false_rtx = const0_rtx;
++	  rtx true_rtx, false_rtx;
+ 	  enum machine_mode mode_arg1;
+ 
+-#ifdef FLOAT_STORE_FLAG_VALUE
+ 	  if (SCALAR_FLOAT_MODE_P (mode))
+ 	    {
++#ifdef FLOAT_STORE_FLAG_VALUE
+ 	      true_rtx = (CONST_DOUBLE_FROM_REAL_VALUE
+ 			  (FLOAT_STORE_FLAG_VALUE (mode), mode));
++#else
++	      true_rtx = NULL_RTX;
++#endif
+ 	      false_rtx = CONST0_RTX (mode);
+ 	    }
+-#endif
++	  else
++	    {
++	      true_rtx = const_true_rtx;
++	      false_rtx = const0_rtx;
++	    }
+ 
+ 	  code = find_comparison_args (code, &folded_arg0, &folded_arg1,
+ 				       &mode_arg0, &mode_arg1);
+@@ -3300,8 +3296,17 @@
+ 						  const_arg1))
+ 			      || (REG_P (folded_arg1)
+ 				  && (REG_QTY (REGNO (folded_arg1)) == ent->comparison_qty))))
+-			return (comparison_dominates_p (ent->comparison_code, code)
+-				? true_rtx : false_rtx);
++			{
++			  if (comparison_dominates_p (ent->comparison_code, code))
++			    {
++			      if (true_rtx)
++				return true_rtx;
++			      else
++				break;
++			    }
++			  else
++			    return false_rtx;
++			}
+ 		    }
+ 		}
+ 	    }
+@@ -3489,6 +3494,11 @@
+ 			  && exact_log2 (- INTVAL (const_arg1)) >= 0)))
+ 		break;
+ 
++	      /* ??? Vector mode shifts by scalar
++		 shift operand are not supported yet.  */
++	      if (is_shift && VECTOR_MODE_P (mode))
++                break;
++
+ 	      if (is_shift
+ 		  && (INTVAL (inner_const) >= GET_MODE_BITSIZE (mode)
+ 		      || INTVAL (inner_const) < 0))
+@@ -3605,6 +3615,8 @@
+ 
+   if (GET_CODE (x) == SUBREG)
+     {
++      enum machine_mode mode = GET_MODE (x);
++      enum machine_mode imode = GET_MODE (SUBREG_REG (x));
+       rtx new;
+ 
+       /* See if we previously assigned a constant value to this SUBREG.  */
+@@ -3613,10 +3625,25 @@
+           || (new = lookup_as_function (x, CONST_FIXED)) != 0)
+         return new;
+ 
++      /* If we didn't and if doing so makes sense, see if we previously
++	 assigned a constant value to the enclosing word mode SUBREG.  */
++      if (GET_MODE_SIZE (mode) < GET_MODE_SIZE (word_mode)
++	  && GET_MODE_SIZE (word_mode) < GET_MODE_SIZE (imode))
++	{
++	  int byte = SUBREG_BYTE (x) - subreg_lowpart_offset (mode, word_mode);
++	  if (byte >= 0 && (byte % UNITS_PER_WORD) == 0)
++	    {
++	      rtx y = gen_rtx_SUBREG (word_mode, SUBREG_REG (x), byte);
++	      new = lookup_as_function (y, CONST_INT);
++	      if (new)
++		return gen_lowpart (mode, new);
++	    }
++	}
++
++      /* Otherwise see if we already have a constant for the inner REG.  */
+       if (REG_P (SUBREG_REG (x))
+ 	  && (new = equiv_constant (SUBREG_REG (x))) != 0)
+-        return simplify_subreg (GET_MODE (x), SUBREG_REG (x),
+-				GET_MODE (SUBREG_REG (x)), SUBREG_BYTE (x));
++        return simplify_subreg (mode, new, imode, SUBREG_BYTE (x));
+ 
+       return 0;
+     }
+diff -Naur gcc-4.3.2.orig/gcc/df-scan.c gcc-4.3.2/gcc/df-scan.c
+--- gcc-4.3.2.orig/gcc/df-scan.c	2008-07-01 07:05:13.000000000 -0700
++++ gcc-4.3.2/gcc/df-scan.c	2008-11-24 00:36:43.000000000 -0800
+@@ -3171,7 +3171,22 @@
+     }
+ 
+   BITMAP_FREE (defs_generated);
+-  return;
++
++#ifdef EH_USES
++  if ((flags & DF_REF_CONDITIONAL) == 0
++      && find_reg_note (insn, REG_NORETURN, 0))
++    {
++      unsigned int i;
++      /* This code is putting in an artificial ref for the use at the
++	 BOTTOM of the block with noreturn call, as EH_USES registers need
++	 to be live until epilogue or noreturn call, for debugging purposes
++	 as well as any insns that might throw.  */
++      for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
++	if (EH_USES (i))
++	  df_ref_record (collection_rec, regno_reg_rtx[i],
++			 NULL, bb, NULL, DF_REF_REG_USE, 0);
++    }
++#endif
+ }
+ 
+ /* Collect all refs in the INSN. This function is free of any
+@@ -3592,16 +3607,6 @@
+   /* These registers are live everywhere.  */
+   if (!reload_completed)
+     {
+-#ifdef EH_USES
+-      /* The ia-64, the only machine that uses this, does not define these 
+-	 until after reload.  */
+-      for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+-	if (EH_USES (i))
+-	  {
+-	    bitmap_set_bit (entry_block_defs, i);
+-	  }
+-#endif
+-      
+ #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
+       /* Pseudos with argument area equivalences may require
+ 	 reloading via the argument pointer.  */
+diff -Naur gcc-4.3.2.orig/gcc/dfp.c gcc-4.3.2/gcc/dfp.c
+--- gcc-4.3.2.orig/gcc/dfp.c	2008-06-17 02:32:34.000000000 -0700
++++ gcc-4.3.2/gcc/dfp.c	2008-09-18 11:33:58.000000000 -0700
+@@ -50,8 +50,6 @@
+   memset (r, 0, sizeof (REAL_VALUE_TYPE));
+ 
+   r->cl = rvc_normal;
+-  if (decNumberIsZero (dn))
+-    r->cl = rvc_zero;
+   if (decNumberIsNaN (dn))
+     r->cl = rvc_nan;
+   if (decNumberIsInfinite (dn))
+diff -Naur gcc-4.3.2.orig/gcc/doc/invoke.texi gcc-4.3.2/gcc/doc/invoke.texi
+--- gcc-4.3.2.orig/gcc/doc/invoke.texi	2008-06-24 18:37:53.000000000 -0700
++++ gcc-4.3.2/gcc/doc/invoke.texi	2008-11-21 08:21:50.000000000 -0800
+@@ -327,7 +327,7 @@
+ -ffunction-sections -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm @gol
+ -fgcse-sm -fif-conversion -fif-conversion2 -finline-functions @gol
+ -finline-functions-called-once -finline-limit=@var{n} @gol
+--finline-small-functions -fipa-cp -fipa-marix-reorg -fipa-pta @gol 
++-finline-small-functions -fipa-cp -fipa-matrix-reorg -fipa-pta @gol 
+ -fipa-pure-const -fipa-reference -fipa-struct-reorg @gol
+ -fipa-type-escape -fivopts -fkeep-inline-functions -fkeep-static-consts @gol
+ -fmerge-all-constants -fmerge-constants -fmodulo-sched @gol
+@@ -718,7 +718,8 @@
+ 
+ @emph{S/390 and zSeries Options}
+ @gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
+--mhard-float  -msoft-float -mlong-double-64 -mlong-double-128 @gol
++-mhard-float  -msoft-float  -mhard-dfp -mno-hard-dfp @gol
++-mlong-double-64 -mlong-double-128 @gol
+ -mbackchain  -mno-backchain -mpacked-stack  -mno-packed-stack @gol
+ -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle @gol
+ -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch @gol
+@@ -13612,6 +13613,17 @@
+ operations.  When @option{-mhard-float} is specified, the compiler
+ generates IEEE floating-point instructions.  This is the default.
+ 
++@item -mhard-dfp
++@itemx -mno-hard-dfp
++@opindex mhard-dfp
++@opindex mno-hard-dfp
++Use (do not use) the hardware decimal-floating-point instructions for
++decimal-floating-point operations.  When @option{-mno-hard-dfp} is
++specified, functions in @file{libgcc.a} will be used to perform
++decimal-floating-point operations.  When @option{-mhard-dfp} is
++specified, the compiler generates decimal-floating-point hardware
++instructions.  This is the default for @option{-march=z9-ec} or higher.
++
+ @item -mlong-double-64
+ @itemx -mlong-double-128
+ @opindex mlong-double-64
+@@ -13722,7 +13734,8 @@
+ @opindex march
+ Generate code that will run on @var{cpu-type}, which is the name of a system
+ representing a certain processor type.  Possible values for
+-@var{cpu-type} are @samp{g5}, @samp{g6}, @samp{z900}, and @samp{z990}.
++@var{cpu-type} are @samp{g5}, @samp{g6}, @samp{z900}, @samp{z990},
++@samp{z9-109} and @samp{z9-ec}.
+ When generating code using the instructions available on z/Architecture,
+ the default is @option{-march=z900}.  Otherwise, the default is
+ @option{-march=g5}.
+@@ -14429,6 +14442,33 @@
+ two registers separated by a dash.  Multiple register ranges can be
+ specified separated by a comma.
+ 
++@item -mdual-nops
++@itemx -mdual-nops=@var{n}
++@opindex mdual-nops
++By default, GCC will insert nops to increase dual issue when it expects
++it to increase performance.  @var{n} can be a value from 0 to 10.  A
++smaller @var{n} will insert fewer nops.  10 is the default, 0 is the
++same as @option{-mno-dual-nops}.  Disabled with @option{-Os}.
++
++@item -mhint-max-nops=@var{n}
++@opindex mhint-max-nops
++Maximum number of nops to insert for a branch hint.  A branch hint must
++be at least 8 instructions away from the branch it is effecting.  GCC
++will insert up to @var{n} nops to enforce this, otherwise it will not
++generate the branch hint.
++
++@item -mhint-max-distance=@var{n}
++@opindex mhint-max-distance
++The encoding of the branch hint instruction limits the hint to be within
++256 instructions of the branch it is effecting.  By default, GCC makes
++sure it is within 125. 
++
++@item -msafe-hints
++@opindex msafe-hints
++Work around a hardware bug which causes the SPU to stall indefinitely.
++By default, GCC will insert the @code{hbrp} instruction to make sure
++this stall won't happen.
++
+ @end table
+ 
+ @node System V Options
+diff -Naur gcc-4.3.2.orig/gcc/doc/md.texi gcc-4.3.2/gcc/doc/md.texi
+--- gcc-4.3.2.orig/gcc/doc/md.texi	2008-07-12 01:00:46.000000000 -0700
++++ gcc-4.3.2/gcc/doc/md.texi	2008-12-12 06:34:21.000000000 -0800
+@@ -2036,9 +2036,18 @@
+ @item x
+ Any SSE register.
+ 
++@item Yz
++First SSE register (@code{%xmm0}).
++
+ @ifset INTERNALS
+-@item Y
+-Any SSE2 register.
++@item Y2
++Any SSE register, when SSE2 is enabled.
++
++@item Yi
++Any SSE register, when SSE2 and inter-unit moves are enabled.
++
++@item Ym
++Any MMX register, when inter-unit moves are enabled.
+ @end ifset
+ 
+ @item I
+@@ -2722,6 +2731,9 @@
+ @item h
+ 64-bit global or out register for the SPARC-V8+ architecture.
+ 
++@item D
++A vector constant
++
+ @item I
+ Signed 13-bit constant
+ 
+diff -Naur gcc-4.3.2.orig/gcc/doc/sourcebuild.texi gcc-4.3.2/gcc/doc/sourcebuild.texi
+--- gcc-4.3.2.orig/gcc/doc/sourcebuild.texi	2008-04-01 11:49:36.000000000 -0700
++++ gcc-4.3.2/gcc/doc/sourcebuild.texi	2008-12-09 14:31:01.000000000 -0800
+@@ -819,6 +819,7 @@
+ * gcov Testing::    Support for testing gcov.
+ * profopt Testing:: Support for testing profile-directed optimizations.
+ * compat Testing::  Support for testing binary compatibility.
++* Torture Tests::   Support for torture testing using multiple options.
+ @end menu
+ 
+ @node Test Idioms
+@@ -988,6 +989,26 @@
+ and only then in certain modes.
+ @end table
+ 
++@item @{ dg-timeout @var{n} [@{target @var{selector} @}] @}
++Set the time limit for the compilation and for the execution of the test
++to the specified number of seconds.
++
++@item @{ dg-timeout-factor @var{x} [@{ target @var{selector} @}] @}
++Multiply the normal time limit for compilation and execution of the test
++by the specified floating-point factor.  The normal timeout limit, in
++seconds, is found by searching the following in order:
++
++@itemize @bullet
++@item the value defined by an earlier @code{dg-timeout} directive in
++the test
++
++@item variable @var{tool_timeout} defined by the set of tests
++
++@item @var{gcc},@var{timeout} set in the target board
++
++@item 300
++@end itemize
++
+ @item @{ dg-skip-if @var{comment} @{ @var{selector} @} @{ @var{include-opts} @} @{ @var{exclude-opts} @} @}
+ Skip the test if the test system is included in @var{selector} and if
+ each of the options in @var{include-opts} is in the set of options with
+@@ -1528,3 +1549,43 @@
+ compilation is expected to fail for particular options on particular
+ targets.
+ @end table
++
++@node Torture Tests
++@subsection Support for torture testing using multiple options
++
++Throughout the compiler testsuite there are several directories whose
++tests are run multiple times, each with a different set of options.
++These are known as torture tests.
++@file{gcc/testsuite/lib/torture-options.exp} defines procedures to
++set up these lists:
++
++@table @code
++@item torture-init
++Initialize use of torture lists.
++@item set-torture-options
++Set lists of torture options to use for tests with and without loops.
++Optionally combine a set of torture options with a set of other
++options, as is done with Objective-C runtime options.
++@item torture-finish
++Finalize use of torture lists.
++@end table
++
++The @file{.exp} file for a set of tests that use torture options must
++include calls to these three procecures if:
++
++@itemize @bullet
++@item It calls @code{gcc-dg-runtest} and overrides @var{DG_TORTURE_OPTIONS}.
++
++@item It calls @var{$@{tool@}}@code{-torture} or
++@var{$@{tool@}}@code{-torture-execute}, where @var{tool} is @code{c},
++@code{fortran}, or @code{objc}.
++
++@item It calls @code{dg-pch}.
++@end itemize
++
++It is not necessary for a @file{.exp} file that calls @code{gcc-dg-runtest}
++to call the torture procedures if the tests should use the list in
++@var{DG_TORTURE_OPTIONS} defined in @file{gcc-dg.exp}.
++
++Most uses of torture options can override the default lists by defining
++@var{TORTURE_OPTIONS} in a @file{.dejagnurc} file.
+diff -Naur gcc-4.3.2.orig/gcc/dwarf2.h gcc-4.3.2/gcc/dwarf2.h
+--- gcc-4.3.2.orig/gcc/dwarf2.h	2007-12-09 09:08:06.000000000 -0800
++++ gcc-4.3.2/gcc/dwarf2.h	2008-09-24 15:44:28.000000000 -0700
+@@ -543,6 +543,7 @@
+     DW_OP_GNU_push_tls_address = 0xe0,
+     /* The following is for marking variables that are uninitialized.  */
+     DW_OP_GNU_uninit     = 0xf0,
++    DW_OP_GNU_encoded_addr = 0xf1,
+     /* HP extensions.  */
+     DW_OP_HP_unknown     = 0xe0, /* Ouch, the same as GNU_push_tls_address.  */
+     DW_OP_HP_is_value    = 0xe1,
+diff -Naur gcc-4.3.2.orig/gcc/emit-rtl.c gcc-4.3.2/gcc/emit-rtl.c
+--- gcc-4.3.2.orig/gcc/emit-rtl.c	2008-06-23 06:16:07.000000000 -0700
++++ gcc-4.3.2/gcc/emit-rtl.c	2008-09-12 06:34:12.000000000 -0700
+@@ -973,7 +973,7 @@
+ 	REG_ATTRS (reg)
+ 	  = get_reg_attrs (MEM_EXPR (x), INTVAL (MEM_OFFSET (x)) + offset);
+       if (MEM_POINTER (x))
+-	mark_reg_pointer (reg, MEM_ALIGN (x));
++	mark_reg_pointer (reg, 0);
+     }
+   else if (REG_P (x))
+     {
+diff -Naur gcc-4.3.2.orig/gcc/emutls.c gcc-4.3.2/gcc/emutls.c
+--- gcc-4.3.2.orig/gcc/emutls.c	2007-03-29 16:34:10.000000000 -0700
++++ gcc-4.3.2/gcc/emutls.c	2008-12-11 15:30:42.000000000 -0800
+@@ -144,8 +144,12 @@
+       static __gthread_once_t once = __GTHREAD_ONCE_INIT;
+       __gthread_once (&once, emutls_init);
+       __gthread_mutex_lock (&emutls_mutex);
+-      offset = ++emutls_size;
+-      obj->loc.offset = offset;
++      offset = obj->loc.offset;
++      if (offset == 0)
++	{
++	  offset = ++emutls_size;
++	  obj->loc.offset = offset;
++	}
+       __gthread_mutex_unlock (&emutls_mutex);
+     }
+ 
+diff -Naur gcc-4.3.2.orig/gcc/explow.c gcc-4.3.2/gcc/explow.c
+--- gcc-4.3.2.orig/gcc/explow.c	2008-05-09 11:26:57.000000000 -0700
++++ gcc-4.3.2/gcc/explow.c	2008-09-12 06:34:12.000000000 -0700
+@@ -696,10 +696,8 @@
+ 
+ 	align = MIN (sa, ca);
+       }
+-    else if (MEM_P (x) && MEM_POINTER (x))
+-      align = MEM_ALIGN (x);
+ 
+-    if (align)
++    if (align || (MEM_P (x) && MEM_POINTER (x)))
+       mark_reg_pointer (temp, align);
+   }
+ 
+diff -Naur gcc-4.3.2.orig/gcc/expmed.c gcc-4.3.2/gcc/expmed.c
+--- gcc-4.3.2.orig/gcc/expmed.c	2008-03-06 12:23:56.000000000 -0800
++++ gcc-4.3.2/gcc/expmed.c	2008-11-05 12:33:54.000000000 -0800
+@@ -1266,9 +1266,8 @@
+       {
+ 	if (MEM_P (op0))
+ 	  op0 = adjust_address (op0, imode, 0);
+-	else
++	else if (imode != BLKmode)
+ 	  {
+-	    gcc_assert (imode != BLKmode);
+ 	    op0 = gen_lowpart (imode, op0);
+ 
+ 	    /* If we got a SUBREG, force it into a register since we
+@@ -1276,6 +1275,24 @@
+ 	    if (GET_CODE (op0) == SUBREG)
+ 	      op0 = force_reg (imode, op0);
+ 	  }
++	else if (REG_P (op0))
++	  {
++	    rtx reg, subreg;
++	    imode = smallest_mode_for_size (GET_MODE_BITSIZE (GET_MODE (op0)),
++					    MODE_INT);
++	    reg = gen_reg_rtx (imode);
++	    subreg = gen_lowpart_SUBREG (GET_MODE (op0), reg);
++	    emit_move_insn (subreg, op0);
++	    op0 = reg;
++	    bitnum += SUBREG_BYTE (subreg) * BITS_PER_UNIT;
++	  }
++	else
++	  {
++	    rtx mem = assign_stack_temp (GET_MODE (op0),
++					 GET_MODE_SIZE (GET_MODE (op0)), 0);
++	    emit_move_insn (mem, op0);
++	    op0 = adjust_address (mem, BLKmode, 0);
++	  }
+       }
+   }
+ 
+@@ -3115,7 +3132,8 @@
+ 	{
+ 	  /* If we are multiplying in DImode, it may still be a win
+ 	     to try to work with shifts and adds.  */
+-	  if (CONST_DOUBLE_HIGH (op1) == 0)
++	  if (CONST_DOUBLE_HIGH (op1) == 0
++	      && CONST_DOUBLE_LOW (op1) > 0)
+ 	    coeff = CONST_DOUBLE_LOW (op1);
+ 	  else if (CONST_DOUBLE_LOW (op1) == 0
+ 		   && EXACT_POWER_OF_2_OR_ZERO_P (CONST_DOUBLE_HIGH (op1)))
+diff -Naur gcc-4.3.2.orig/gcc/expr.c gcc-4.3.2/gcc/expr.c
+--- gcc-4.3.2.orig/gcc/expr.c	2008-08-12 11:36:28.000000000 -0700
++++ gcc-4.3.2/gcc/expr.c	2008-10-07 21:17:27.000000000 -0700
+@@ -4994,6 +4994,9 @@
+     case REFERENCE_TYPE:
+       return 1;
+ 
++    case ERROR_MARK:
++      return 0;
++
+     case VOID_TYPE:
+     case METHOD_TYPE:
+     case FUNCTION_TYPE:
+diff -Naur gcc-4.3.2.orig/gcc/final.c gcc-4.3.2/gcc/final.c
+--- gcc-4.3.2.orig/gcc/final.c	2008-01-26 15:08:54.000000000 -0800
++++ gcc-4.3.2/gcc/final.c	2008-11-14 05:26:59.000000000 -0800
+@@ -4152,6 +4152,10 @@
+   timevar_push (TV_SYMOUT);
+   (*debug_hooks->function_decl) (current_function_decl);
+   timevar_pop (TV_SYMOUT);
++
++  /* Release the blocks that are linked to DECL_INITIAL() to free the memory.  */
++  DECL_INITIAL (current_function_decl) = error_mark_node;
++
+   if (DECL_STATIC_CONSTRUCTOR (current_function_decl)
+       && targetm.have_ctors_dtors)
+     targetm.asm_out.constructor (XEXP (DECL_RTL (current_function_decl), 0),
+diff -Naur gcc-4.3.2.orig/gcc/fold-const.c gcc-4.3.2/gcc/fold-const.c
+--- gcc-4.3.2.orig/gcc/fold-const.c	2008-08-14 02:11:03.000000000 -0700
++++ gcc-4.3.2/gcc/fold-const.c	2008-10-22 13:08:01.000000000 -0700
+@@ -109,9 +109,12 @@
+ static tree eval_subst (tree, tree, tree, tree, tree);
+ static tree pedantic_omit_one_operand (tree, tree, tree);
+ static tree distribute_bit_expr (enum tree_code, tree, tree, tree);
++static tree make_bit_field_ref (tree, tree, HOST_WIDE_INT, HOST_WIDE_INT, int);
++static tree optimize_bit_field_compare (enum tree_code, tree, tree, tree);
+ static tree decode_field_reference (tree, HOST_WIDE_INT *, HOST_WIDE_INT *,
+ 				    enum machine_mode *, int *, int *,
+ 				    tree *, tree *);
++static int all_ones_mask_p (const_tree, int);
+ static tree sign_bit_p (tree, const_tree);
+ static int simple_operand_p (const_tree);
+ static tree range_binop (enum tree_code, tree, tree, int, tree, int);
+@@ -834,7 +837,7 @@
+ 	if (hden < 0)
+ 	  neg_double (lden, hden, &labs_den, &habs_den);
+ 
+-	/* If (2 * abs (lrem) >= abs (lden)) */
++	/* If (2 * abs (lrem) >= abs (lden)), adjust the quotient.  */
+ 	mul_double ((HOST_WIDE_INT) 2, (HOST_WIDE_INT) 0,
+ 		    labs_rem, habs_rem, &ltwice, &htwice);
+ 
+@@ -842,7 +845,7 @@
+ 	     < (unsigned HOST_WIDE_INT) htwice)
+ 	    || (((unsigned HOST_WIDE_INT) habs_den
+ 		 == (unsigned HOST_WIDE_INT) htwice)
+-		&& (labs_den < ltwice)))
++		&& (labs_den <= ltwice)))
+ 	  {
+ 	    if (*hquo < 0)
+ 	      /* quo = quo - 1;  */
+@@ -3848,6 +3851,202 @@
+   return NULL_TREE;
+ }
+ 
+
++/* Return a BIT_FIELD_REF of type TYPE to refer to BITSIZE bits of INNER
++   starting at BITPOS.  The field is unsigned if UNSIGNEDP is nonzero.  */
++
++static tree
++make_bit_field_ref (tree inner, tree type, HOST_WIDE_INT bitsize,
++		    HOST_WIDE_INT bitpos, int unsignedp)
++{
++  tree result;
++
++  if (bitpos == 0)
++    {
++      tree size = TYPE_SIZE (TREE_TYPE (inner));
++      if ((INTEGRAL_TYPE_P (TREE_TYPE (inner))
++	   || POINTER_TYPE_P (TREE_TYPE (inner)))
++	  && host_integerp (size, 0) 
++	  && tree_low_cst (size, 0) == bitsize)
++	return fold_convert (type, inner);
++    }
++
++  result = build3 (BIT_FIELD_REF, type, inner,
++		   size_int (bitsize), bitsize_int (bitpos));
++
++  BIT_FIELD_REF_UNSIGNED (result) = unsignedp;
++
++  return result;
++}
++
++/* Optimize a bit-field compare.
++
++   There are two cases:  First is a compare against a constant and the
++   second is a comparison of two items where the fields are at the same
++   bit position relative to the start of a chunk (byte, halfword, word)
++   large enough to contain it.  In these cases we can avoid the shift
++   implicit in bitfield extractions.
++
++   For constants, we emit a compare of the shifted constant with the
++   BIT_AND_EXPR of a mask and a byte, halfword, or word of the operand being
++   compared.  For two fields at the same position, we do the ANDs with the
++   similar mask and compare the result of the ANDs.
++
++   CODE is the comparison code, known to be either NE_EXPR or EQ_EXPR.
++   COMPARE_TYPE is the type of the comparison, and LHS and RHS
++   are the left and right operands of the comparison, respectively.
++
++   If the optimization described above can be done, we return the resulting
++   tree.  Otherwise we return zero.  */
++
++static tree
++optimize_bit_field_compare (enum tree_code code, tree compare_type,
++			    tree lhs, tree rhs)
++{
++  HOST_WIDE_INT lbitpos, lbitsize, rbitpos, rbitsize, nbitpos, nbitsize;
++  tree type = TREE_TYPE (lhs);
++  tree signed_type, unsigned_type;
++  int const_p = TREE_CODE (rhs) == INTEGER_CST;
++  enum machine_mode lmode, rmode, nmode;
++  int lunsignedp, runsignedp;
++  int lvolatilep = 0, rvolatilep = 0;
++  tree linner, rinner = NULL_TREE;
++  tree mask;
++  tree offset;
++
++  /* Get all the information about the extractions being done.  If the bit size
++     if the same as the size of the underlying object, we aren't doing an
++     extraction at all and so can do nothing.  We also don't want to
++     do anything if the inner expression is a PLACEHOLDER_EXPR since we
++     then will no longer be able to replace it.  */
++  linner = get_inner_reference (lhs, &lbitsize, &lbitpos, &offset, &lmode,
++				&lunsignedp, &lvolatilep, false);
++  if (linner == lhs || lbitsize == GET_MODE_BITSIZE (lmode) || lbitsize < 0
++      || offset != 0 || TREE_CODE (linner) == PLACEHOLDER_EXPR)
++    return 0;
++
++ if (!const_p)
++   {
++     /* If this is not a constant, we can only do something if bit positions,
++	sizes, and signedness are the same.  */
++     rinner = get_inner_reference (rhs, &rbitsize, &rbitpos, &offset, &rmode,
++				   &runsignedp, &rvolatilep, false);
++
++     if (rinner == rhs || lbitpos != rbitpos || lbitsize != rbitsize
++	 || lunsignedp != runsignedp || offset != 0
++	 || TREE_CODE (rinner) == PLACEHOLDER_EXPR)
++       return 0;
++   }
++
++  /* See if we can find a mode to refer to this field.  We should be able to,
++     but fail if we can't.  */
++  nmode = get_best_mode (lbitsize, lbitpos,
++			 const_p ? TYPE_ALIGN (TREE_TYPE (linner))
++			 : MIN (TYPE_ALIGN (TREE_TYPE (linner)),
++				TYPE_ALIGN (TREE_TYPE (rinner))),
++			 word_mode, lvolatilep || rvolatilep);
++  if (nmode == VOIDmode)
++    return 0;
++
++  /* Set signed and unsigned types of the precision of this mode for the
++     shifts below.  */
++  signed_type = lang_hooks.types.type_for_mode (nmode, 0);
++  unsigned_type = lang_hooks.types.type_for_mode (nmode, 1);
++
++  /* Compute the bit position and size for the new reference and our offset
++     within it. If the new reference is the same size as the original, we
++     won't optimize anything, so return zero.  */
++  nbitsize = GET_MODE_BITSIZE (nmode);
++  nbitpos = lbitpos & ~ (nbitsize - 1);
++  lbitpos -= nbitpos;
++  if (nbitsize == lbitsize)
++    return 0;
++
++  if (BYTES_BIG_ENDIAN)
++    lbitpos = nbitsize - lbitsize - lbitpos;
++
++  /* Make the mask to be used against the extracted field.  */
++  mask = build_int_cst_type (unsigned_type, -1);
++  mask = const_binop (LSHIFT_EXPR, mask, size_int (nbitsize - lbitsize), 0);
++  mask = const_binop (RSHIFT_EXPR, mask,
++		      size_int (nbitsize - lbitsize - lbitpos), 0);
++
++  if (! const_p)
++    /* If not comparing with constant, just rework the comparison
++       and return.  */
++    return fold_build2 (code, compare_type,
++			fold_build2 (BIT_AND_EXPR, unsigned_type,
++				     make_bit_field_ref (linner,
++							 unsigned_type,
++							 nbitsize, nbitpos,
++							 1),
++				     mask),
++			fold_build2 (BIT_AND_EXPR, unsigned_type,
++				     make_bit_field_ref (rinner,
++							 unsigned_type,
++							 nbitsize, nbitpos,
++							 1),
++				     mask));
++
++  /* Otherwise, we are handling the constant case. See if the constant is too
++     big for the field.  Warn and return a tree of for 0 (false) if so.  We do
++     this not only for its own sake, but to avoid having to test for this
++     error case below.  If we didn't, we might generate wrong code.
++
++     For unsigned fields, the constant shifted right by the field length should
++     be all zero.  For signed fields, the high-order bits should agree with
++     the sign bit.  */
++
++  if (lunsignedp)
++    {
++      if (! integer_zerop (const_binop (RSHIFT_EXPR,
++					fold_convert (unsigned_type, rhs),
++					size_int (lbitsize), 0)))
++	{
++	  warning (0, "comparison is always %d due to width of bit-field",
++		   code == NE_EXPR);
++	  return constant_boolean_node (code == NE_EXPR, compare_type);
++	}
++    }
++  else
++    {
++      tree tem = const_binop (RSHIFT_EXPR, fold_convert (signed_type, rhs),
++			      size_int (lbitsize - 1), 0);
++      if (! integer_zerop (tem) && ! integer_all_onesp (tem))
++	{
++	  warning (0, "comparison is always %d due to width of bit-field",
++		   code == NE_EXPR);
++	  return constant_boolean_node (code == NE_EXPR, compare_type);
++	}
++    }
++
++  /* Single-bit compares should always be against zero.  */
++  if (lbitsize == 1 && ! integer_zerop (rhs))
++    {
++      code = code == EQ_EXPR ? NE_EXPR : EQ_EXPR;
++      rhs = build_int_cst (type, 0);
++    }
++
++  /* Make a new bitfield reference, shift the constant over the
++     appropriate number of bits and mask it with the computed mask
++     (in case this was a signed field).  If we changed it, make a new one.  */
++  lhs = make_bit_field_ref (linner, unsigned_type, nbitsize, nbitpos, 1);
++  if (lvolatilep)
++    {
++      TREE_SIDE_EFFECTS (lhs) = 1;
++      TREE_THIS_VOLATILE (lhs) = 1;
++    }
++
++  rhs = const_binop (BIT_AND_EXPR,
++		     const_binop (LSHIFT_EXPR,
++				  fold_convert (unsigned_type, rhs),
++				  size_int (lbitpos), 0),
++		     mask, 0);
++
++  return build2 (code, compare_type,
++		 build2 (BIT_AND_EXPR, unsigned_type, lhs, mask),
++		 rhs);
++}
++
+
+ /* Subroutine for fold_truthop: decode a field reference.
+ 
+    If EXP is a comparison reference, we return the innermost reference.
+@@ -3939,6 +4138,27 @@
+   return inner;
+ }
+ 
++/* Return nonzero if MASK represents a mask of SIZE ones in the low-order
++   bit positions.  */
++
++static int
++all_ones_mask_p (const_tree mask, int size)
++{
++  tree type = TREE_TYPE (mask);
++  unsigned int precision = TYPE_PRECISION (type);
++  tree tmask;
++
++  tmask = build_int_cst_type (signed_type_for (type), -1);
++
++  return
++    tree_int_cst_equal (mask,
++			const_binop (RSHIFT_EXPR,
++				     const_binop (LSHIFT_EXPR, tmask,
++						  size_int (precision - size),
++						  0),
++				     size_int (precision - size), 0));
++}
++
+ /* Subroutine for fold: determine if VAL is the INTEGER_CONST that
+    represents the sign bit of EXP's type.  If EXP represents a sign
+    or zero extension, also test VAL against the unextended type.
+@@ -4490,7 +4710,12 @@
+ 	{
+ 	  if (TYPE_UNSIGNED (etype))
+ 	    {
+-	      etype = signed_type_for (etype);
++	      tree signed_etype = signed_type_for (etype);
++	      if (TYPE_PRECISION (signed_etype) != TYPE_PRECISION (etype))
++		etype
++		  = build_nonstandard_integer_type (TYPE_PRECISION (etype), 0);
++	      else
++		etype = signed_etype;
+ 	      exp = fold_convert (etype, exp);
+ 	    }
+ 	  return fold_build2 (GT_EXPR, type, exp,
+@@ -5264,16 +5489,16 @@
+   tree ll_inner, lr_inner, rl_inner, rr_inner;
+   HOST_WIDE_INT ll_bitsize, ll_bitpos, lr_bitsize, lr_bitpos;
+   HOST_WIDE_INT rl_bitsize, rl_bitpos, rr_bitsize, rr_bitpos;
+-  HOST_WIDE_INT xll_bitpos, xrl_bitpos;
+-  HOST_WIDE_INT lnbitsize, lnbitpos;
++  HOST_WIDE_INT xll_bitpos, xlr_bitpos, xrl_bitpos, xrr_bitpos;
++  HOST_WIDE_INT lnbitsize, lnbitpos, rnbitsize, rnbitpos;
+   int ll_unsignedp, lr_unsignedp, rl_unsignedp, rr_unsignedp;
+   enum machine_mode ll_mode, lr_mode, rl_mode, rr_mode;
+-  enum machine_mode lnmode;
++  enum machine_mode lnmode, rnmode;
+   tree ll_mask, lr_mask, rl_mask, rr_mask;
+   tree ll_and_mask, lr_and_mask, rl_and_mask, rr_and_mask;
+   tree l_const, r_const;
+-  tree lntype, result;
+-  int first_bit, end_bit;
++  tree lntype, rntype, result;
++  HOST_WIDE_INT first_bit, end_bit;
+   int volatilep;
+   tree orig_lhs = lhs, orig_rhs = rhs;
+   enum tree_code orig_code = code;
+@@ -5510,6 +5735,118 @@
+ 	}
+     }
+ 
++  /* If the right sides are not constant, do the same for it.  Also,
++     disallow this optimization if a size or signedness mismatch occurs
++     between the left and right sides.  */
++  if (l_const == 0)
++    {
++      if (ll_bitsize != lr_bitsize || rl_bitsize != rr_bitsize
++	  || ll_unsignedp != lr_unsignedp || rl_unsignedp != rr_unsignedp
++	  /* Make sure the two fields on the right
++	     correspond to the left without being swapped.  */
++	  || ll_bitpos - rl_bitpos != lr_bitpos - rr_bitpos)
++	return 0;
++
++      first_bit = MIN (lr_bitpos, rr_bitpos);
++      end_bit = MAX (lr_bitpos + lr_bitsize, rr_bitpos + rr_bitsize);
++      rnmode = get_best_mode (end_bit - first_bit, first_bit,
++			      TYPE_ALIGN (TREE_TYPE (lr_inner)), word_mode,
++			      volatilep);
++      if (rnmode == VOIDmode)
++	return 0;
++
++      rnbitsize = GET_MODE_BITSIZE (rnmode);
++      rnbitpos = first_bit & ~ (rnbitsize - 1);
++      rntype = lang_hooks.types.type_for_size (rnbitsize, 1);
++      xlr_bitpos = lr_bitpos - rnbitpos, xrr_bitpos = rr_bitpos - rnbitpos;
++
++      if (BYTES_BIG_ENDIAN)
++	{
++	  xlr_bitpos = rnbitsize - xlr_bitpos - lr_bitsize;
++	  xrr_bitpos = rnbitsize - xrr_bitpos - rr_bitsize;
++	}
++
++      lr_mask = const_binop (LSHIFT_EXPR, fold_convert (rntype, lr_mask),
++			     size_int (xlr_bitpos), 0);
++      rr_mask = const_binop (LSHIFT_EXPR, fold_convert (rntype, rr_mask),
++			     size_int (xrr_bitpos), 0);
++
++      /* Make a mask that corresponds to both fields being compared.
++	 Do this for both items being compared.  If the operands are the
++	 same size and the bits being compared are in the same position
++	 then we can do this by masking both and comparing the masked
++	 results.  */
++      ll_mask = const_binop (BIT_IOR_EXPR, ll_mask, rl_mask, 0);
++      lr_mask = const_binop (BIT_IOR_EXPR, lr_mask, rr_mask, 0);
++      if (lnbitsize == rnbitsize && xll_bitpos == xlr_bitpos)
++	{
++	  lhs = make_bit_field_ref (ll_inner, lntype, lnbitsize, lnbitpos,
++				    ll_unsignedp || rl_unsignedp);
++	  if (! all_ones_mask_p (ll_mask, lnbitsize))
++	    lhs = build2 (BIT_AND_EXPR, lntype, lhs, ll_mask);
++
++	  rhs = make_bit_field_ref (lr_inner, rntype, rnbitsize, rnbitpos,
++				    lr_unsignedp || rr_unsignedp);
++	  if (! all_ones_mask_p (lr_mask, rnbitsize))
++	    rhs = build2 (BIT_AND_EXPR, rntype, rhs, lr_mask);
++
++	  return build2 (wanted_code, truth_type, lhs, rhs);
++	}
++
++      /* There is still another way we can do something:  If both pairs of
++	 fields being compared are adjacent, we may be able to make a wider
++	 field containing them both.
++
++	 Note that we still must mask the lhs/rhs expressions.  Furthermore,
++	 the mask must be shifted to account for the shift done by
++	 make_bit_field_ref.  */
++      if ((ll_bitsize + ll_bitpos == rl_bitpos
++	   && lr_bitsize + lr_bitpos == rr_bitpos)
++	  || (ll_bitpos == rl_bitpos + rl_bitsize
++	      && lr_bitpos == rr_bitpos + rr_bitsize))
++	{
++	  tree type;
++
++	  lhs = make_bit_field_ref (ll_inner, lntype, ll_bitsize + rl_bitsize,
++				    MIN (ll_bitpos, rl_bitpos), ll_unsignedp);
++	  rhs = make_bit_field_ref (lr_inner, rntype, lr_bitsize + rr_bitsize,
++				    MIN (lr_bitpos, rr_bitpos), lr_unsignedp);
++
++	  ll_mask = const_binop (RSHIFT_EXPR, ll_mask,
++				 size_int (MIN (xll_bitpos, xrl_bitpos)), 0);
++	  lr_mask = const_binop (RSHIFT_EXPR, lr_mask,
++				 size_int (MIN (xlr_bitpos, xrr_bitpos)), 0);
++
++	  /* Convert to the smaller type before masking out unwanted bits.  */
++	  type = lntype;
++	  if (lntype != rntype)
++	    {
++	      if (lnbitsize > rnbitsize)
++		{
++		  lhs = fold_convert (rntype, lhs);
++		  ll_mask = fold_convert (rntype, ll_mask);
++		  type = rntype;
++		}
++	      else if (lnbitsize < rnbitsize)
++		{
++		  rhs = fold_convert (lntype, rhs);
++		  lr_mask = fold_convert (lntype, lr_mask);
++		  type = lntype;
++		}
++	    }
++
++	  if (! all_ones_mask_p (ll_mask, ll_bitsize + rl_bitsize))
++	    lhs = build2 (BIT_AND_EXPR, type, lhs, ll_mask);
++
++	  if (! all_ones_mask_p (lr_mask, lr_bitsize + rr_bitsize))
++	    rhs = build2 (BIT_AND_EXPR, type, rhs, lr_mask);
++
++	  return build2 (wanted_code, truth_type, lhs, rhs);
++	}
++
++      return 0;
++    }
++
+   /* Handle the case of comparisons with constants.  If there is something in
+      common between the masks, those bits of the constants must be the same.
+      If not, the condition is always false.  Test for this to avoid generating
+@@ -5531,7 +5868,19 @@
+ 	}
+     }
+ 
+-  return NULL_TREE;
++  /* Construct the expression we will return.  First get the component
++     reference we will make.  Unless the mask is all ones the width of
++     that field, perform the mask operation.  Then compare with the
++     merged constant.  */
++  result = make_bit_field_ref (ll_inner, lntype, lnbitsize, lnbitpos,
++			       ll_unsignedp || rl_unsignedp);
++
++  ll_mask = const_binop (BIT_IOR_EXPR, ll_mask, rl_mask, 0);
++  if (! all_ones_mask_p (ll_mask, lnbitsize))
++    result = build2 (BIT_AND_EXPR, lntype, result, ll_mask);
++
++  return build2 (wanted_code, truth_type, result,
++		 const_binop (BIT_IOR_EXPR, l_const, r_const, 0));
+ }
+ 
+
+ /* Optimize T, which is a comparison of a MIN_EXPR or MAX_EXPR with a
+@@ -5916,9 +6265,20 @@
+ 	 (C * 8) % 4 since we know that's zero.  */
+       if ((code == TRUNC_MOD_EXPR || code == CEIL_MOD_EXPR
+ 	   || code == FLOOR_MOD_EXPR || code == ROUND_MOD_EXPR)
++	  /* If the multiplication can overflow we cannot optimize this.
++	     ???  Until we can properly mark individual operations as
++	     not overflowing we need to treat sizetype special here as
++	     stor-layout relies on this opimization to make
++	     DECL_FIELD_BIT_OFFSET always a constant.  */
++	  && (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (t))
++	      || (TREE_CODE (TREE_TYPE (t)) == INTEGER_TYPE
++		  && TYPE_IS_SIZETYPE (TREE_TYPE (t))))
+ 	  && TREE_CODE (TREE_OPERAND (t, 1)) == INTEGER_CST
+ 	  && integer_zerop (const_binop (TRUNC_MOD_EXPR, op1, c, 0)))
+-	return omit_one_operand (type, integer_zero_node, op0);
++	{
++	  *strict_overflow_p = true;
++	  return omit_one_operand (type, integer_zero_node, op0);
++	}
+ 
+       /* ... fall through ...  */
+ 
+@@ -10629,14 +10989,13 @@
+ 	  && TREE_CODE (arg1) == INTEGER_CST
+ 	  && TREE_CODE (TREE_OPERAND (arg0, 1)) == INTEGER_CST)
+ 	{
+-	  tree tmp1 = fold_convert (TREE_TYPE (arg0), arg1);
+-	  tree tmp2 = fold_build2 (BIT_AND_EXPR, TREE_TYPE (arg0),
+-				   TREE_OPERAND (arg0, 0), tmp1);
+-	  tree tmp3 = fold_build2 (BIT_AND_EXPR, TREE_TYPE (arg0),
+-				   TREE_OPERAND (arg0, 1), tmp1);
++	  tree tmp1 = fold_convert (type, arg1);
++	  tree tmp2 = fold_convert (type, TREE_OPERAND (arg0, 0));
++	  tree tmp3 = fold_convert (type, TREE_OPERAND (arg0, 1));
++	  tmp2 = fold_build2 (BIT_AND_EXPR, type, tmp2, tmp1);
++	  tmp3 = fold_build2 (BIT_AND_EXPR, type, tmp3, tmp1);
+ 	  return fold_convert (type,
+-			       fold_build2 (BIT_IOR_EXPR, TREE_TYPE (arg0),
+-					    tmp2, tmp3));
++			       fold_build2 (BIT_IOR_EXPR, type, tmp2, tmp3));
+ 	}
+ 
+       /* (X | Y) & Y is (X, Y).  */
+@@ -11912,6 +12271,18 @@
+ 	    return omit_one_operand (type, rslt, arg0);
+ 	}
+ 
++      /* If this is a comparison of a field, we may be able to simplify it.  */
++      if ((TREE_CODE (arg0) == COMPONENT_REF
++	   || TREE_CODE (arg0) == BIT_FIELD_REF)
++	  /* Handle the constant case even without -O
++	     to make sure the warnings are given.  */
++	  && (optimize || TREE_CODE (arg1) == INTEGER_CST))
++	{
++	  t1 = optimize_bit_field_compare (code, type, arg0, arg1);
++	  if (t1)
++	    return t1;
++	}
++
+       /* Optimize comparisons of strlen vs zero to a compare of the
+ 	 first character of the string vs zero.  To wit,
+ 		strlen(ptr) == 0   =>  *ptr == 0
+diff -Naur gcc-4.3.2.orig/gcc/fortran/ChangeLog gcc-4.3.2/gcc/fortran/ChangeLog
+--- gcc-4.3.2.orig/gcc/fortran/ChangeLog	2008-08-27 11:01:56.000000000 -0700
++++ gcc-4.3.2/gcc/fortran/ChangeLog	2008-12-14 08:07:46.000000000 -0800
+@@ -1,3 +1,309 @@
++2008-12-14  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/35937
++	* trans-expr.c (gfc_finish_interface_mapping): Fold convert the
++	character length to gfc_charlen_type_node.
++
++2008-12-04  Janis Johnson  <janis187@us.ibm.com>
++
++	Backport from mainline:
++	2008-10-18  Jakub Jelinek  <jakub@redhat.com>
++	            Janis Johnson  <janis187@us.ibm.com>
++
++	* Make-lang.in (check-f95-subtargets, check-fortran-subtargets): New
++	aliases for check-gfortran-subtargets.
++	(lang_checks_parallelized): Add check-gfortran.
++	(check_gfortran_parallelize): New variable.
++
++2008-11-24  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/34820
++	* trans-expr.c (gfc_conv_function_call): Remove all code to
++	deallocate intent out derived types with allocatable
++	components.
++	(gfc_trans_assignment_1): An assignment from a scalar to an
++	array of derived types with allocatable components, requires
++	a deep copy to each array element and deallocation of the
++	converted rhs expression afterwards.
++	* trans-array.c : Minor whitespace.
++	* trans-decl.c (init_intent_out_dt): Add code to deallocate
++	allocatable components of derived types with intent out.
++	(generate_local_decl): If these types are unused, set them
++	referenced anyway but allow the uninitialized warning.
++
++	PR fortran/34143
++	* trans-expr.c (gfc_trans_subcomponent_assign): If a conversion
++	expression has a null data pointer argument, nullify the
++	allocatable component.
++
++	PR fortran/32795
++	* trans-expr.c (gfc_trans_subcomponent_assign): Only nullify
++	the data pointer if the source is not a variable.
++
++2008-11-29  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/37735
++	* trans-array.c (structure_alloc_comps): Do not duplicate the
++	descriptor if this is a descriptorless array!
++
++2008-11-27  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/36526
++	* interface.c (check_intents):  Correct error where the actual
++	arg was checked for a pointer argument, rather than the formal.
++
++2008-11-24  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/38033
++	* trans-array.c (gfc_trans_create_temp_array): Stabilize the
++	'to' expression.
++	(gfc_conv_loop_setup): Use the end expression for the loop 'to'
++	if it is available.
++
++2008-11-24  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/37926
++	* trans-expr.c (gfc_free_interface_mapping): Null sym->formal
++	(gfc_add_interface_mapping): Copy the pointer to the formal
++	arglist and set attr.always_explicit if this is a procedure.
++
++2008-11-24  Steven G. Kargl  <kargls@comcast.net>
++
++	PR fortran/37792
++	* fortran/resolve.c (resolve_fl_variable): Simplify the
++	initializer if there is one.
++
++2008-11-24  Mikael Morin <mikael.morin@tele2.fr>
++
++	PR fortran/35681
++	* dependency.c (gfc_check_argument_var_dependency): Add
++	elemental check flag. Issue a warning if we find a dependency
++	but don't generate a temporary. Add the case of an elemental
++	function call as actual argument to an elemental procedure.
++	Add the case of an operator expression as actual argument
++	to an elemental procedure.
++	(gfc_check_argument_dependency): Add elemental check flag.
++	Update calls to gfc_check_argument_var_dependency.
++	(gfc_check_fncall_dependency): Add elemental check flag.
++	Update call to gfc_check_argument_dependency.
++	* trans-stmt.c (gfc_trans_call): Make call to
++	gfc_conv_elemental_dependency unconditional, but with a flag
++	whether we should check dependencies between variables.
++	(gfc_conv_elemental_dependency): Add elemental check flag.
++	Update call to gfc_check_fncall_dependency.
++	* trans-expr.c (gfc_trans_arrayfunc_assign): Update call to
++	gfc_check_fncall_dependency.
++	* resolve.c (find_noncopying_intrinsics): Update call to
++	gfc_check_fncall_dependency.
++	* dependency.h (enum gfc_dep_check): New enum.
++	(gfc_check_fncall_dependency): Update prototype.
++
++2008-11-19  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/38171
++	* module.c (load_equiv): Regression fix; check that equivalence
++	members come from the same module only.
++
++2008-11-14  Paul Thomas  <pault@gcc.gnu.org>
++
++        PR fortran/37836
++        * intrinsic.c (add_functions): Reference gfc_simplify._minval
++	and gfc_simplify_maxval.
++	* intrinsic.h : Add prototypes for gfc_simplify._minval and
++	gfc_simplify_maxval.
++	* simplify.c (min_max_choose): New function extracted from
++	simplify_min_max.
++	(simplify_min_max): Call it.
++	(simplify_minval_maxval, gfc_simplify_minval,
++	gfc_simplify_maxval): New functions.
++
++2008-11-08  Paul Thomas  <pault@gcc.gnu.org>
++
++        PR fortran/37597
++        * parse.c (gfc_fixup_sibling_symbols ): Fixup contained, even
++	when symbol not found.
++
++2008-11-08  Mikael Morin  <mikael.morin@tele2.fr>
++
++	PR fortran/35820
++	* resolve.c (gfc_count_forall_iterators): New function.
++	(gfc_resolve_forall): Use gfc_count_forall_iterators to evaluate 
++	the needed memory amount to allocate. Don't forget to free allocated 
++	memory.  Add an assertion to check for memory leaks. 
++
++2008-11-08  Paul Thomas  <pault@gcc.gnu.org>
++
++        PR fortran/37445
++        * resolve.c (resolve_call): Check host association is correct.
++        (resolve_actual_arglist ): Remove return is old_sym is use
++        associated.  Only reparse expression if old and new symbols
++        have different types.
++
++        PR fortran/PR35769
++        * resolve.c (gfc_resolve_assign_in_forall): Change error to a
++        warning.
++
++2008-11-01  Mikael Morin  <mikael.morin@tele2.fr>
++
++        PR fortran/37903
++        * trans-array.c (gfc_trans_create_temp_array): If n is less
++	than the temporary dimension, assert that loop->from is
++	zero (reverts to earlier versions). If there is at least one
++	null loop->to[n], it is a callee allocated array so set the
++	size to NULL and break.
++	(gfc_trans_constant_array_constructor): Set the offset to zero.
++	(gfc_trans_array_constructor): Remove loop shifting around the
++	temporary creation.
++	(gfc_conv_loop_setup): Prefer zero-based descriptors if
++	possible.  Calculate the translation from loop variables to
++	array indices if an array constructor.
++
++2008-11-01  Mikael Morin  <mikael.morin@tele2.fr>
++
++        PR fortran/37749
++        * trans-array.c (gfc_trans_create_temp_array): If size is NULL
++	use the array bounds for loop->to.
++
++2008-10-19  Paul Thomas  <pault@gcc.gnu.org>
++
++        PR fortran/37723
++        * dependency.c (gfc_dep_resolver ): If we find equal array
++	element references, go on to the next reference.
++
++2008-10-19  Paul Thomas  <pault@gcc.gnu.org>
++
++        PR fortran/37787
++        * dependency.c (gfc_are_equivalenced_arrays): Look in symbol
++        namespace rather than current namespace, if it is available.
++
++2008-10-11  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/37794
++	* module.c (check_for_ambiguous): Remove redundant code.
++
++2008-10-11  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/35680
++	* gfortran.h : Add 'error' bit field to gfc_expr structure.
++	* expr.c (check_inquiry): When checking a restricted expression
++	check that arguments are either variables or restricted.
++	(check_restricted): Do not emit error if the expression has
++	'error' set.  Clean up detection of host-associated variable.
++
++2008-10-05  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/37706
++	* module.c (load_equiv): Check the module before negating the
++	unused flag.
++
++2008-09-26  Tobias Burnus  <burnus@net-b.de>
++
++	PR fortran/37580
++	* expr.c (gfc_check_pointer_assign): Add checks for pointer
++	remapping.
++
++2008-09-26  Tobias Burnus  <burnus@net-b.de>
++
++	PR fortran/37504
++	* expr.c (gfc_check_pointer_assign): Allow assignment of
++	protected pointers.
++
++2008-09-25  Tobias Burnus  <burnus@net-b.de>
++
++	PR fortran/37626
++	* trans-array.c (gfc_trans_deferred_array): Don't auto-deallocate
++	result variable.
++
++2008-09-24  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/35945
++	* resolve.c (resolve_fl_variable_derived):  Remove derived type
++	comparison for use associated derived types.  Host association
++	of a derived type will not arise if there is a local derived type
++	whose use name is the same.
++
++	PR fortran/36700
++	* match.c (gfc_match_call):  Use the existing symbol even if
++	it is a function.
++
++2008-09-24  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/37583
++	* decl.c (gfc_match_entry): Both subroutines and functions can
++	give a true for get_proc_mame's last argument so remove the
++	&& gfc_current_ns->proc_name->attr.function.
++	resolve.c (resolve_actual_arglist): Add check for recursion by
++	reference to procedure as actual argument.
++
++2008-09-23  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/37274
++	PR fortran/36374
++	* module.c (check_for_ambiguous): New function to test loaded
++	symbol for ambiguity with fixup symbol.
++	(read_module): Call check_for_ambiguous.
++	(write_symtree): Do not write the symtree for symbols coming
++	from an interface body.
++
++	PR fortran/36374
++	* resolve.c (count_specific_procs ): New function to count the
++	number of specific procedures with the same name as the generic
++	and emit appropriate errors for and actual argument reference.
++	(resolve_assumed_size_actual): Add new argument no_formal_args.
++	Correct logic around passing generic procedures as arguments.
++	Call count_specific_procs from two locations.
++	(resolve_function): Evaluate and pass no_formal_args.
++	(resolve call): The same and clean up a bit by using csym more
++	widely.
++
++	PR fortran/36454
++	* symbol.c (gfc_add_access): Access can be updated if use
++	associated and not private.
++
++2008-09-13  Daniel Kraft  <d@domob.eu>
++
++	PR fortran/35770
++	* primary.c (gfc_match_varspec): Added missing type-spec clearing
++	after wrong implicit character typing.
++
++2008-09-11  Daniel Kraft  <d@domob.eu>
++
++	PR fortran/36214
++	* simplify.c (simplify_cmplx): Added linebreak to long line.
++	* target-memory.c (gfc_convert_boz): Fix indentation.
++	(gfc_interpret_float): Set mpfr precision to right value before
++	calling mpfr_init.
++
++2008-09-08  Daniel Kraft  <d@domob.eu>
++
++	PR fortran/37199
++	* trans-expr.c (gfc_add_interface_mapping): Set new_sym->as.
++	(gfc_map_intrinsic_function): Added checks against NULL bounds in
++	array specs.
++
++2008-09-05  Daniel Kraft  <d@domob.eu>
++
++	PR fortran/35837
++	* resolve.c (resolve_types): Restore gfc_current_ns on exit.
++	* symbol.c (gfc_save_all): Removed blank line.
++
++2008-09-04  Daniel Kraft  <d@domob.eu>
++
++	* PR fortran/37099
++	* expr.c (simplify_const_ref): Update expression's character length
++	when pulling out a substring reference.
++
++2008-08-30  Daniel Kraft  <d@domob.eu>
++
++	PR fortran/37193
++	* module.c (read_module): Initialize use_only flag on used symbols.
++
++2008-06-24  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/36371
++	* expr.c (gfc_check_assign):  Change message and locus for
++	error when conform == 0.
++
+ 2008-08-27  Release Manager
+ 
+ 	* GCC 4.3.2 released.
+diff -Naur gcc-4.3.2.orig/gcc/fortran/Make-lang.in gcc-4.3.2/gcc/fortran/Make-lang.in
+--- gcc-4.3.2.orig/gcc/fortran/Make-lang.in	2008-04-01 11:49:36.000000000 -0700
++++ gcc-4.3.2/gcc/fortran/Make-lang.in	2008-12-04 15:00:19.000000000 -0800
+@@ -141,7 +141,14 @@
+ 
+ check-f95 : check-gfortran
+ check-fortran : check-gfortran
++check-f95-subtargets : check-gfortran-subtargets
++check-fortran-subtargets : check-gfortran-subtargets
+ lang_checks += check-gfortran
++lang_checks_parallelized += check-gfortran
++# For description see comment above check_gcc_parallelize in gcc/Makefile.in.
++check_gfortran_parallelize = dg.exp=gfortran.dg/\[a-cA-C\]* \
++			     dg.exp=gfortran.dg/\[d-mD-M\]* \
++			     dg.exp=gfortran.dg/\[n-zN-Z0-9\]*
+ 
+ # GFORTRAN documentation.
+ GFORTRAN_TEXI = \
+diff -Naur gcc-4.3.2.orig/gcc/fortran/decl.c gcc-4.3.2/gcc/fortran/decl.c
+--- gcc-4.3.2.orig/gcc/fortran/decl.c	2008-01-29 22:56:10.000000000 -0800
++++ gcc-4.3.2/gcc/fortran/decl.c	2008-09-24 01:04:26.000000000 -0700
+@@ -4504,8 +4504,7 @@
+      created symbols attached to the current namespace.  */
+   if (get_proc_name (name, &entry,
+ 		     gfc_current_ns->parent != NULL
+-		     && module_procedure
+-		     && gfc_current_ns->proc_name->attr.function))
++		     && module_procedure))
+     return MATCH_ERROR;
+ 
+   proc = gfc_current_block ();
+diff -Naur gcc-4.3.2.orig/gcc/fortran/dependency.c gcc-4.3.2/gcc/fortran/dependency.c
+--- gcc-4.3.2.orig/gcc/fortran/dependency.c	2007-10-29 07:13:44.000000000 -0700
++++ gcc-4.3.2/gcc/fortran/dependency.c	2008-11-24 04:13:59.000000000 -0800
+@@ -432,25 +432,81 @@
+ 
+ static int
+ gfc_check_argument_var_dependency (gfc_expr *var, sym_intent intent,
+-				   gfc_expr *expr)
++				   gfc_expr *expr, gfc_dep_check elemental)
+ {
++  gfc_expr *arg;
++
+   gcc_assert (var->expr_type == EXPR_VARIABLE);
+   gcc_assert (var->rank > 0);
+ 
+   switch (expr->expr_type)
+     {
+     case EXPR_VARIABLE:
+-      return (gfc_ref_needs_temporary_p (expr->ref)
+-	      || gfc_check_dependency (var, expr, 1));
++      /* In case of elemental subroutines, there is no dependency 
++         between two same-range array references.  */
++      if (gfc_ref_needs_temporary_p (expr->ref)
++	  || gfc_check_dependency (var, expr, !elemental))
++	{
++	  if (elemental == ELEM_DONT_CHECK_VARIABLE)
++	    {
++	      /* Elemental procedures forbid unspecified intents, 
++		 and we don't check dependencies for INTENT_IN args.  */
++	      gcc_assert (intent == INTENT_OUT || intent == INTENT_INOUT);
++
++	      /* We are told not to check dependencies. 
++		 We do it, however, and issue a warning in case we find one. 
++		 If a dependency is found in the case 
++		 elemental == ELEM_CHECK_VARIABLE, we will generate
++		 a temporary, so we don't need to bother the user.  */
++	      gfc_warning ("INTENT(%s) actual argument at %L might interfere "
++			   "with actual argument at %L.", 
++			   intent == INTENT_OUT ? "OUT" : "INOUT", 
++			   &var->where, &expr->where);
++	      return 0;
++	    }
++	  else
++	    return 1; 
++	}
++      return 0;
+ 
+     case EXPR_ARRAY:
+       return gfc_check_dependency (var, expr, 1);
+ 
+     case EXPR_FUNCTION:
+-      if (intent != INTENT_IN && expr->inline_noncopying_intrinsic)
++      if (intent != INTENT_IN && expr->inline_noncopying_intrinsic
++	  && (arg = gfc_get_noncopying_intrinsic_argument (expr))
++	  && gfc_check_argument_var_dependency (var, intent, arg, elemental))
++	return 1;
++      if (elemental)
+ 	{
+-	  expr = gfc_get_noncopying_intrinsic_argument (expr);
+-	  return gfc_check_argument_var_dependency (var, intent, expr);
++	  if ((expr->value.function.esym
++	       && expr->value.function.esym->attr.elemental)
++	      || (expr->value.function.isym
++		  && expr->value.function.isym->elemental))
++	    return gfc_check_fncall_dependency (var, intent, NULL,
++						expr->value.function.actual,
++						ELEM_CHECK_VARIABLE);
++	}
++      return 0;
++
++    case EXPR_OP:
++      /* In case of non-elemental procedures, there is no need to catch
++	 dependencies, as we will make a temporary anyway.  */
++      if (elemental)
++	{
++	  /* If the actual arg EXPR is an expression, we need to catch 
++	     a dependency between variables in EXPR and VAR, 
++	     an intent((IN)OUT) variable.  */
++	  if (expr->value.op.op1
++	      && gfc_check_argument_var_dependency (var, intent, 
++						    expr->value.op.op1, 
++						    ELEM_CHECK_VARIABLE))
++	    return 1;
++	  else if (expr->value.op.op2
++		   && gfc_check_argument_var_dependency (var, intent, 
++							 expr->value.op.op2, 
++							 ELEM_CHECK_VARIABLE))
++	    return 1;
+ 	}
+       return 0;
+ 
+@@ -465,18 +521,19 @@
+ 
+ static int
+ gfc_check_argument_dependency (gfc_expr *other, sym_intent intent,
+-			       gfc_expr *expr)
++			       gfc_expr *expr, gfc_dep_check elemental)
+ {
+   switch (other->expr_type)
+     {
+     case EXPR_VARIABLE:
+-      return gfc_check_argument_var_dependency (other, intent, expr);
++      return gfc_check_argument_var_dependency (other, intent, expr, elemental);
+ 
+     case EXPR_FUNCTION:
+       if (other->inline_noncopying_intrinsic)
+ 	{
+ 	  other = gfc_get_noncopying_intrinsic_argument (other);
+-	  return gfc_check_argument_dependency (other, INTENT_IN, expr);
++	  return gfc_check_argument_dependency (other, INTENT_IN, expr, 
++						elemental);
+ 	}
+       return 0;
+ 
+@@ -491,7 +548,8 @@
+ 
+ int
+ gfc_check_fncall_dependency (gfc_expr *other, sym_intent intent,
+-			     gfc_symbol *fnsym, gfc_actual_arglist *actual)
++			     gfc_symbol *fnsym, gfc_actual_arglist *actual,
++			     gfc_dep_check elemental)
+ {
+   gfc_formal_arglist *formal;
+   gfc_expr *expr;
+@@ -514,7 +572,7 @@
+ 	  && formal->sym->attr.intent == INTENT_IN)
+ 	continue;
+ 
+-      if (gfc_check_argument_dependency (other, intent, expr))
++      if (gfc_check_argument_dependency (other, intent, expr, elemental))
+ 	return 1;
+     }
+ 
+@@ -547,10 +605,16 @@
+       || !e2->symtree->n.sym->attr.in_equivalence|| !e1->rank || !e2->rank)
+     return 0;
+ 
++  if (e1->symtree->n.sym->ns
++	&& e1->symtree->n.sym->ns != gfc_current_ns)
++    l = e1->symtree->n.sym->ns->equiv_lists;
++  else
++    l = gfc_current_ns->equiv_lists;
++
+   /* Go through the equiv_lists and return 1 if the variables
+      e1 and e2 are members of the same group and satisfy the
+      requirement on their relative offsets.  */
+-  for (l = gfc_current_ns->equiv_lists; l; l = l->next)
++  for (; l; l = l->next)
+     {
+       fl1 = NULL;
+       fl2 = NULL;
+@@ -1246,6 +1310,14 @@
+ 	      if (this_dep > fin_dep)
+ 		fin_dep = this_dep;
+ 	    }
++
++	  /* If this is an equal element, we have to keep going until we find
++	     the "real" array reference.  */
++	  if (lref->u.ar.type == AR_ELEMENT
++		&& rref->u.ar.type == AR_ELEMENT
++		&& fin_dep == GFC_DEP_EQUAL)
++	    break;
++
+ 	  /* Exactly matching and forward overlapping ranges don't cause a
+ 	     dependency.  */
+ 	  if (fin_dep < GFC_DEP_OVERLAP)
+diff -Naur gcc-4.3.2.orig/gcc/fortran/dependency.h gcc-4.3.2/gcc/fortran/dependency.h
+--- gcc-4.3.2.orig/gcc/fortran/dependency.h	2007-08-01 09:29:36.000000000 -0700
++++ gcc-4.3.2/gcc/fortran/dependency.h	2008-11-24 04:13:59.000000000 -0800
+@@ -19,13 +19,24 @@
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
++/****************************** Enums *********************************/
++typedef enum
++{
++  NOT_ELEMENTAL,        /* Not elemental case: normal dependency check.  */
++  ELEM_CHECK_VARIABLE,  /* Test whether variables overlap.  */
++  ELEM_DONT_CHECK_VARIABLE  /* Test whether variables overlap only if used 
++			       in an expression.  */
++}
++gfc_dep_check;
+ 
+ 
++/*********************** Functions prototypes **************************/
++
+ bool gfc_ref_needs_temporary_p (gfc_ref *);
+ bool gfc_full_array_ref_p (gfc_ref *);
+ gfc_expr *gfc_get_noncopying_intrinsic_argument (gfc_expr *);
+ int gfc_check_fncall_dependency (gfc_expr *, sym_intent, gfc_symbol *,
+-				 gfc_actual_arglist *);
++				 gfc_actual_arglist *, gfc_dep_check);
+ int gfc_check_dependency (gfc_expr *, gfc_expr *, bool);
+ int gfc_is_same_range (gfc_array_ref *, gfc_array_ref *, int, int);
+ int gfc_expr_is_one (gfc_expr *, int);
+diff -Naur gcc-4.3.2.orig/gcc/fortran/expr.c gcc-4.3.2/gcc/fortran/expr.c
+--- gcc-4.3.2.orig/gcc/fortran/expr.c	2008-05-01 00:31:28.000000000 -0700
++++ gcc-4.3.2/gcc/fortran/expr.c	2008-10-11 02:58:38.000000000 -0700
+@@ -1443,6 +1443,40 @@
+ 		    {
+ 		      cons->expr->ref = copy_ref (p->ref->next);
+ 		      simplify_const_ref (cons->expr);
++		      if (simplify_const_ref (cons->expr) == FAILURE)
++			return FAILURE;
++		    }
++
++		  /* If this is a CHARACTER array and we possibly took a
++		     substring out of it, update the type-spec's character
++		     length according to the first element (as all should have
++		     the same length).  */
++		  if (p->ts.type == BT_CHARACTER)
++		    {
++		      int string_len;
++
++		      gcc_assert (p->ref->next);
++		      gcc_assert (!p->ref->next->next);
++		      gcc_assert (p->ref->next->type == REF_SUBSTRING);
++
++		      if (p->value.constructor)
++			{
++			  const gfc_expr* first = p->value.constructor->expr;
++			  gcc_assert (first->expr_type == EXPR_CONSTANT);
++			  gcc_assert (first->ts.type == BT_CHARACTER);
++			  string_len = first->value.character.length;
++			}
++		      else
++			string_len = 0;
++
++		      if (!p->ts.cl)
++			{
++			  p->ts.cl = gfc_get_charlen ();
++			  p->ts.cl->next = NULL;
++			  p->ts.cl->length = NULL;
++			}
++		      gfc_free_expr (p->ts.cl->length);
++		      p->ts.cl->length = gfc_int_expr (string_len);
+ 		    }
+ 		}
+ 	      gfc_free_ref_list (p->ref);
+@@ -1968,6 +2002,9 @@
+   return MATCH_YES;
+ }
+ 
++
++static try check_restricted (gfc_expr *);
++
+ /* F95, 7.1.6.1, Initialization expressions, (7)
+    F2003, 7.1.7 Initialization expression, (8)  */
+ 
+@@ -2047,6 +2084,11 @@
+ 	  }
+ 	else if (not_restricted && check_init_expr (ap->expr) == FAILURE)
+ 	  return MATCH_ERROR;
++
++	if (not_restricted == 0
++	      && ap->expr->expr_type != EXPR_VARIABLE
++	      && check_restricted (ap->expr) == FAILURE)
++	  return MATCH_ERROR;
+     }
+ 
+   return MATCH_YES;
+@@ -2368,8 +2410,6 @@
+ }
+ 
+ 
+-static try check_restricted (gfc_expr *);
+-
+ /* Given an actual argument list, test to see that each argument is a
+    restricted expression and optionally if the expression type is
+    integer or character.  */
+@@ -2508,14 +2548,17 @@
+ 	 that host associated dummy array indices are accepted (PR23446).
+ 	 This mechanism also does the same for the specification expressions
+ 	 of array-valued functions.  */
+-      if (sym->attr.in_common
+-	  || sym->attr.use_assoc
+-	  || sym->attr.dummy
+-	  || sym->attr.implied_index
+-	  || sym->ns != gfc_current_ns
+-	  || (sym->ns->proc_name != NULL
+-	      && sym->ns->proc_name->attr.flavor == FL_MODULE)
+-	  || (gfc_is_formal_arg () && (sym->ns == gfc_current_ns)))
++      if (e->error
++	    || sym->attr.in_common
++	    || sym->attr.use_assoc
++	    || sym->attr.dummy
++	    || sym->attr.implied_index
++	    || (sym->ns && sym->ns == gfc_current_ns->parent)
++	    || (sym->ns && gfc_current_ns->parent
++		  && sym->ns == gfc_current_ns->parent->parent)
++	    || (sym->ns->proc_name != NULL
++		  && sym->ns->proc_name->attr.flavor == FL_MODULE)
++	    || (gfc_is_formal_arg () && (sym->ns == gfc_current_ns)))
+ 	{
+ 	  t = SUCCESS;
+ 	  break;
+@@ -2523,7 +2566,8 @@
+ 
+       gfc_error ("Variable '%s' cannot appear in the expression at %L",
+ 		 sym->name, &e->where);
+-
++      /* Prevent a repetition of the error.  */
++      e->error = 1;
+       break;
+ 
+     case EXPR_NULL:
+@@ -2825,6 +2869,7 @@
+   if (gfc_compare_types (&lvalue->ts, &rvalue->ts))
+     return SUCCESS;
+ 
++  /* Only DATA Statements come here.  */
+   if (!conform)
+     {
+       /* Numeric can be converted to any other numeric. And Hollerith can be
+@@ -2837,7 +2882,7 @@
+ 	return SUCCESS;
+ 
+       gfc_error ("Incompatible types in assignment at %L, %s to %s",
+-		 &rvalue->where, gfc_typename (&rvalue->ts),
++		 &lvalue->where, gfc_typename (&rvalue->ts),
+ 		 gfc_typename (&lvalue->ts));
+ 
+       return FAILURE;
+@@ -2888,6 +2933,32 @@
+ 
+       if (ref->type == REF_COMPONENT && ref->u.c.component->pointer)
+ 	pointer = 1;
++
++      if (ref->type == REF_ARRAY && ref->next == NULL)
++	{
++	  if (ref->u.ar.type == AR_FULL)
++	    break;
++
++	  if (ref->u.ar.type != AR_SECTION)
++	    {
++	      gfc_error ("Expected bounds specification for '%s' at %L",
++			 lvalue->symtree->n.sym->name, &lvalue->where);
++	      return FAILURE;
++	    }
++
++	  if (gfc_notify_std (GFC_STD_F2003,"Fortran 2003: Bounds "
++			      "specification for '%s' in pointer assignment "
++                              "at %L", lvalue->symtree->n.sym->name,
++			      &lvalue->where) == FAILURE)
++            return FAILURE;
++
++	  gfc_error ("Pointer bounds remapping at %L is not yet implemented "
++		     "in gfortran", &lvalue->where);
++	  /* TODO: See PR 29785. Add checks that all lbounds are specified and
++	     either never or always the upper-bound; strides shall not be
++	     present.  */
++	  return FAILURE;
++	}
+     }
+ 
+   if (check_intent_in && lvalue->symtree->n.sym->attr.intent == INTENT_IN)
+@@ -2978,9 +3049,9 @@
+       return FAILURE;
+     }
+ 
+-  if (attr.protected && attr.use_assoc)
++  if (attr.protected && attr.use_assoc && !attr.pointer)
+     {
+-      gfc_error ("Pointer assigment target has PROTECTED "
++      gfc_error ("Pointer assignment target has PROTECTED "
+ 		 "attribute at %L", &rvalue->where);
+       return FAILURE;
+     }
+diff -Naur gcc-4.3.2.orig/gcc/fortran/gfortran.h gcc-4.3.2/gcc/fortran/gfortran.h
+--- gcc-4.3.2.orig/gcc/fortran/gfortran.h	2008-01-29 22:56:10.000000000 -0800
++++ gcc-4.3.2/gcc/fortran/gfortran.h	2008-10-11 02:58:38.000000000 -0700
+@@ -1432,6 +1432,10 @@
+      and if we have decided not to allocate temporary data for that array.  */
+   unsigned int inline_noncopying_intrinsic : 1, is_boz : 1;
+ 
++  /* Sometimes, when an error has been emitted, it is necessary to prevent
++      it from recurring.  */
++  unsigned int error : 1;
++
+   /* Used to quickly find a given constructor by its offset.  */
+   splay_tree con_by_offset;
+ 
+diff -Naur gcc-4.3.2.orig/gcc/fortran/interface.c gcc-4.3.2/gcc/fortran/interface.c
+--- gcc-4.3.2.orig/gcc/fortran/interface.c	2008-05-17 00:10:13.000000000 -0700
++++ gcc-4.3.2/gcc/fortran/interface.c	2008-11-27 14:20:27.000000000 -0800
+@@ -2374,7 +2374,7 @@
+ 	      return FAILURE;
+ 	    }
+ 
+-	  if (a->expr->symtree->n.sym->attr.pointer)
++	  if (f->sym->attr.pointer)
+ 	    {
+ 	      gfc_error ("Procedure argument at %L is local to a PURE "
+ 			 "procedure and has the POINTER attribute",
+diff -Naur gcc-4.3.2.orig/gcc/fortran/intrinsic.c gcc-4.3.2/gcc/fortran/intrinsic.c
+--- gcc-4.3.2.orig/gcc/fortran/intrinsic.c	2007-12-25 02:41:44.000000000 -0800
++++ gcc-4.3.2/gcc/fortran/intrinsic.c	2008-11-13 22:14:46.000000000 -0800
+@@ -1867,7 +1867,7 @@
+   make_generic ("maxloc", GFC_ISYM_MAXLOC, GFC_STD_F95);
+ 
+   add_sym_3red ("maxval", GFC_ISYM_MAXVAL, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95,
+-		gfc_check_minval_maxval, NULL, gfc_resolve_maxval,
++		gfc_check_minval_maxval, gfc_simplify_maxval, gfc_resolve_maxval,
+ 		ar, BT_REAL, dr, REQUIRED, dm, BT_INTEGER, ii, OPTIONAL,
+ 		msk, BT_LOGICAL, dl, OPTIONAL);
+ 
+@@ -1933,7 +1933,7 @@
+   make_generic ("minloc", GFC_ISYM_MINLOC, GFC_STD_F95);
+ 
+   add_sym_3red ("minval", GFC_ISYM_MINVAL, CLASS_TRANSFORMATIONAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F95,
+-		gfc_check_minval_maxval, NULL, gfc_resolve_minval,
++		gfc_check_minval_maxval, gfc_simplify_minval, gfc_resolve_minval,
+ 		ar, BT_REAL, dr, REQUIRED, dm, BT_INTEGER, ii, OPTIONAL,
+ 		msk, BT_LOGICAL, dl, OPTIONAL);
+ 
+diff -Naur gcc-4.3.2.orig/gcc/fortran/intrinsic.h gcc-4.3.2/gcc/fortran/intrinsic.h
+--- gcc-4.3.2.orig/gcc/fortran/intrinsic.h	2007-12-25 02:41:44.000000000 -0800
++++ gcc-4.3.2/gcc/fortran/intrinsic.h	2008-11-13 22:14:46.000000000 -0800
+@@ -258,7 +258,9 @@
+ gfc_expr *gfc_simplify_log10 (gfc_expr *);
+ gfc_expr *gfc_simplify_logical (gfc_expr *, gfc_expr *);
+ gfc_expr *gfc_simplify_min (gfc_expr *);
++gfc_expr *gfc_simplify_minval (gfc_expr *, gfc_expr*, gfc_expr*);
+ gfc_expr *gfc_simplify_max (gfc_expr *);
++gfc_expr *gfc_simplify_maxval (gfc_expr *, gfc_expr*, gfc_expr*);
+ gfc_expr *gfc_simplify_maxexponent (gfc_expr *);
+ gfc_expr *gfc_simplify_minexponent (gfc_expr *);
+ gfc_expr *gfc_simplify_mod (gfc_expr *, gfc_expr *);
+diff -Naur gcc-4.3.2.orig/gcc/fortran/match.c gcc-4.3.2/gcc/fortran/match.c
+--- gcc-4.3.2.orig/gcc/fortran/match.c	2008-02-03 03:29:27.000000000 -0800
++++ gcc-4.3.2/gcc/fortran/match.c	2008-09-24 01:12:47.000000000 -0700
+@@ -2488,9 +2488,12 @@
+ 
+   sym = st->n.sym;
+ 
+-  /* If it does not seem to be callable...  */
++  /* If it does not seem to be callable (include functions so that the
++     right association is made.  They are thrown out in resolution.)
++     ...  */
+   if (!sym->attr.generic
+-	&& !sym->attr.subroutine)
++	&& !sym->attr.subroutine
++	&& !sym->attr.function)
+     {
+       if (!(sym->attr.external && !sym->attr.referenced))
+ 	{
+diff -Naur gcc-4.3.2.orig/gcc/fortran/module.c gcc-4.3.2/gcc/fortran/module.c
+--- gcc-4.3.2.orig/gcc/fortran/module.c	2008-05-13 13:26:47.000000000 -0700
++++ gcc-4.3.2/gcc/fortran/module.c	2008-11-18 19:46:12.000000000 -0800
+@@ -3465,11 +3465,16 @@
+ 	mio_expr (&tail->expr);
+       }
+ 
+-    /* Unused equivalence members have a unique name.  */
++    /* Unused equivalence members have a unique name.  In addition, it
++       must be checked that the symbols are from the same module.  */
+     unused = true;
+     for (eq = head; eq; eq = eq->eq)
+       {
+-	if (!check_unique_name (eq->expr->symtree->name))
++	if (eq->expr->symtree->n.sym->module
++	      && head->expr->symtree->n.sym->module
++	      && strcmp (head->expr->symtree->n.sym->module,
++			 eq->expr->symtree->n.sym->module) == 0
++	      && !check_unique_name (eq->expr->symtree->name))
+ 	  {
+ 	    unused = false;
+ 	    break;
+@@ -3603,6 +3608,41 @@
+ }
+ 
+ 
++/* It is not quite enough to check for ambiguity in the symbols by
++   the loaded symbol and the new symbol not being identical.  */
++static bool
++check_for_ambiguous (gfc_symbol *st_sym, pointer_info *info)
++{
++  gfc_symbol *rsym;
++  module_locus locus;
++  symbol_attribute attr;
++
++  rsym = info->u.rsym.sym;
++  if (st_sym == rsym)
++    return false;
++
++  /* If the existing symbol is generic from a different module and
++     the new symbol is generic there can be no ambiguity.  */
++  if (st_sym->attr.generic
++	&& st_sym->module
++	&& strcmp (st_sym->module, module_name))
++    {
++      /* The new symbol's attributes have not yet been read.  Since
++	 we need attr.generic, read it directly.  */
++      get_module_locus (&locus);
++      set_module_locus (&info->u.rsym.where);
++      mio_lparen ();
++      attr.generic = 0;
++      mio_symbol_attribute (&attr);
++      set_module_locus (&locus);
++      if (attr.generic)
++	return false;
++    }
++
++  return true;
++}
++
++
+ /* Read a module file.  */
+ 
+ static void
+@@ -3744,7 +3784,7 @@
+ 	  if (st != NULL)
+ 	    {
+ 	      /* Check for ambiguous symbols.  */
+-	      if (st->n.sym != info->u.rsym.sym)
++	      if (check_for_ambiguous (st->n.sym, info))
+ 		st->ambiguous = 1;
+ 	      info->u.rsym.symtree = st;
+ 	    }
+@@ -3753,9 +3793,9 @@
+ 	      st = gfc_find_symtree (gfc_current_ns->sym_root, name);
+ 
+ 	      /* Delete the symtree if the symbol has been added by a USE
+-		 statement without an ONLY(11.3.2). Remember that the rsym
++		 statement without an ONLY(11.3.2).  Remember that the rsym
+ 		 will be the same as the symbol found in the symtree, for
+-		 this case.*/
++		 this case.  */
+ 	      if (st && (only_flag || info->u.rsym.renamed)
+ 		     && !st->n.sym->attr.use_only
+ 		     && !st->n.sym->attr.use_rename
+@@ -3791,6 +3831,11 @@
+ 	      if (strcmp (name, p) != 0)
+ 		sym->attr.use_rename = 1;
+ 
++	      /* We need to set the only_flag here so that symbols from the
++		 same USE...ONLY but earlier are not deleted from the tree in
++		 the gfc_delete_symtree above.  */
++	      sym->attr.use_only = only_flag;
++
+ 	      /* Store the symtree pointing to this symbol.  */
+ 	      info->u.rsym.symtree = st;
+ 
+@@ -4233,6 +4278,14 @@
+   pointer_info *p;
+ 
+   sym = st->n.sym;
++
++  /* A symbol in an interface body must not be visible in the
++     module file.  */
++  if (sym->ns != gfc_current_ns
++	&& sym->ns->proc_name
++	&& sym->ns->proc_name->attr.if_source == IFSRC_IFBODY)
++    return;
++
+   if (!gfc_check_access (sym->attr.access, sym->ns->default_access)
+       || (sym->attr.flavor == FL_PROCEDURE && sym->attr.generic
+ 	  && !sym->attr.subroutine && !sym->attr.function))
+diff -Naur gcc-4.3.2.orig/gcc/fortran/parse.c gcc-4.3.2/gcc/fortran/parse.c
+--- gcc-4.3.2.orig/gcc/fortran/parse.c	2008-01-29 22:56:10.000000000 -0800
++++ gcc-4.3.2/gcc/fortran/parse.c	2008-11-08 06:17:35.000000000 -0800
+@@ -3038,7 +3038,7 @@
+       gfc_find_sym_tree (sym->name, ns, 0, &st);
+ 
+       if (!st || (st->n.sym->attr.dummy && ns == st->n.sym->ns))
+-	continue;
++	goto fixup_contained;
+ 
+       old_sym = st->n.sym;
+       if (old_sym->ns == ns
+@@ -3072,6 +3072,7 @@
+ 	    gfc_free_symbol (old_sym);
+ 	}
+ 
++fixup_contained:
+       /* Do the same for any contained procedures.  */
+       gfc_fixup_sibling_symbols (sym, ns->contained);
+     }
+diff -Naur gcc-4.3.2.orig/gcc/fortran/primary.c gcc-4.3.2/gcc/fortran/primary.c
+--- gcc-4.3.2.orig/gcc/fortran/primary.c	2008-02-03 03:29:27.000000000 -0800
++++ gcc-4.3.2/gcc/fortran/primary.c	2008-09-17 04:56:09.000000000 -0700
+@@ -1785,7 +1785,10 @@
+ 
+ 	case MATCH_NO:
+ 	  if (unknown)
+-	    gfc_clear_ts (&primary->ts);
++	    {
++	      gfc_clear_ts (&primary->ts);
++	      gfc_clear_ts (&sym->ts);
++	    }
+ 	  break;
+ 
+ 	case MATCH_ERROR:
+diff -Naur gcc-4.3.2.orig/gcc/fortran/resolve.c gcc-4.3.2/gcc/fortran/resolve.c
+--- gcc-4.3.2.orig/gcc/fortran/resolve.c	2008-07-19 11:34:21.000000000 -0700
++++ gcc-4.3.2/gcc/fortran/resolve.c	2008-11-24 11:13:12.000000000 -0800
+@@ -1012,6 +1012,38 @@
+ }
+ 
+ 
++/* Check a generic procedure, passed as an actual argument, to see if
++   there is a matching specific name.  If none, it is an error, and if
++   more than one, the reference is ambiguous.  */
++static int
++count_specific_procs (gfc_expr *e)
++{
++  int n;
++  gfc_interface *p;
++  gfc_symbol *sym;
++	
++  n = 0;
++  sym = e->symtree->n.sym;
++
++  for (p = sym->generic; p; p = p->next)
++    if (strcmp (sym->name, p->sym->name) == 0)
++      {
++	e->symtree = gfc_find_symtree (p->sym->ns->sym_root,
++				       sym->name);
++	n++;
++      }
++
++  if (n > 1)
++    gfc_error ("'%s' at %L is ambiguous", e->symtree->n.sym->name,
++	       &e->where);
++
++  if (n == 0)
++    gfc_error ("GENERIC procedure '%s' is not allowed as an actual "
++	       "argument at %L", sym->name, &e->where);
++
++  return n;
++}
++
+ /* Resolve an actual argument list.  Most of the time, this is just
+    resolving the expressions in the list.
+    The exception is that we sometimes have to decide whether arguments
+@@ -1019,7 +1051,8 @@
+    references.  */
+ 
+ static try
+-resolve_actual_arglist (gfc_actual_arglist *arg, procedure_type ptype)
++resolve_actual_arglist (gfc_actual_arglist *arg, procedure_type ptype,
++			bool no_formal_args)
+ {
+   gfc_symbol *sym;
+   gfc_symtree *parent_st;
+@@ -1044,17 +1077,16 @@
+ 	  continue;
+ 	}
+ 
+-      if (e->expr_type == FL_VARIABLE && e->symtree->ambiguous)
+-	{
+-	  gfc_error ("'%s' at %L is ambiguous", e->symtree->n.sym->name,
+-		     &e->where);
+-	  return FAILURE;
+-	}
++      if (e->expr_type == EXPR_VARIABLE
++	    && e->symtree->n.sym->attr.generic
++	    && no_formal_args
++	    && count_specific_procs (e) != 1)
++	return FAILURE;
+ 
+       if (e->ts.type != BT_PROCEDURE)
+ 	{
+ 	  save_need_full_assumed_size = need_full_assumed_size;
+-	  if (e->expr_type != FL_VARIABLE)
++	  if (e->expr_type != EXPR_VARIABLE)
+ 	    need_full_assumed_size = 0;
+ 	  if (gfc_resolve_expr (e) != SUCCESS)
+ 	    return FAILURE;
+@@ -1110,22 +1142,19 @@
+ 
+ 	  /* Check if a generic interface has a specific procedure
+ 	    with the same name before emitting an error.  */
+-	  if (sym->attr.generic)
+-	    {
+-	      gfc_interface *p;
+-	      for (p = sym->generic; p; p = p->next)
+-		if (strcmp (sym->name, p->sym->name) == 0)
+-		  {
+-		    e->symtree = gfc_find_symtree
+-					   (p->sym->ns->sym_root, sym->name);
+-		    sym = p->sym;
+-		    break;
+-		  }
++	  if (sym->attr.generic && count_specific_procs (e) != 1)
++	    return FAILURE;
++	  
++	  /* Just in case a specific was found for the expression.  */
++	  sym = e->symtree->n.sym;
+ 
+-	      if (p == NULL || e->symtree == NULL)
+-		gfc_error ("GENERIC procedure '%s' is not "
+-			   "allowed as an actual argument at %L", sym->name,
+-			   &e->where);
++	  if (sym->attr.entry && sym->ns->entries
++		&& sym->ns == gfc_current_ns
++		&& !sym->ns->entries->sym->attr.recursive)
++	    {
++	      gfc_error ("Reference to ENTRY '%s' at %L is recursive, but procedure "
++			 "'%s' is not declared as RECURSIVE",
++			 sym->name, &e->where, sym->ns->entries->sym->name);
+ 	    }
+ 
+ 	  /* If the symbol is the function that names the current (or
+@@ -1198,7 +1227,7 @@
+ 	 is a  variable instead, it needs to be resolved as it was not
+ 	 done at the beginning of this function.  */
+       save_need_full_assumed_size = need_full_assumed_size;
+-      if (e->expr_type != FL_VARIABLE)
++      if (e->expr_type != EXPR_VARIABLE)
+ 	need_full_assumed_size = 0;
+       if (gfc_resolve_expr (e) != SUCCESS)
+ 	return FAILURE;
+@@ -1426,7 +1455,8 @@
+   for (ap = actual; ap; ap = ap->next)
+     if (ap->expr
+ 	&& (expr = gfc_get_noncopying_intrinsic_argument (ap->expr))
+-	&& !gfc_check_fncall_dependency (expr, INTENT_IN, fnsym, actual))
++	&& !gfc_check_fncall_dependency (expr, INTENT_IN, fnsym, actual,
++					 NOT_ELEMENTAL))
+       ap->expr->inline_noncopying_intrinsic = 1;
+ }
+ 
+@@ -2170,6 +2200,7 @@
+   try t;
+   int temp;
+   procedure_type p = PROC_INTRINSIC;
++  bool no_formal_args;
+ 
+   sym = NULL;
+   if (expr->symtree)
+@@ -2199,7 +2230,9 @@
+   if (expr->symtree && expr->symtree->n.sym)
+     p = expr->symtree->n.sym->attr.proc;
+ 
+-  if (resolve_actual_arglist (expr->value.function.actual, p) == FAILURE)
++  no_formal_args = sym && is_external_proc (sym) && sym->formal == NULL;
++  if (resolve_actual_arglist (expr->value.function.actual,
++			      p, no_formal_args) == FAILURE)
+       return FAILURE;
+ 
+   /* Need to setup the call to the correct c_associated, depending on
+@@ -2776,26 +2809,41 @@
+ {
+   try t;
+   procedure_type ptype = PROC_INTRINSIC;
++  gfc_symbol *csym, *sym;
++  bool no_formal_args;
++
++  csym = c->symtree ? c->symtree->n.sym : NULL;
+ 
+-  if (c->symtree && c->symtree->n.sym
+-      && c->symtree->n.sym->ts.type != BT_UNKNOWN)
++  if (csym && csym->ts.type != BT_UNKNOWN)
+     {
+       gfc_error ("'%s' at %L has a type, which is not consistent with "
+-		 "the CALL at %L", c->symtree->n.sym->name,
+-		 &c->symtree->n.sym->declared_at, &c->loc);
++		 "the CALL at %L", csym->name, &csym->declared_at, &c->loc);
+       return FAILURE;
+     }
+ 
++  if (csym && gfc_current_ns->parent && csym->ns != gfc_current_ns)
++    {
++      gfc_find_symbol (csym->name, gfc_current_ns, 1, &sym);
++      if (sym && csym != sym
++	      && sym->ns == gfc_current_ns
++	      && sym->attr.flavor == FL_PROCEDURE
++	      && sym->attr.contained)
++	{
++	  sym->refs++;
++	  csym = sym;
++	  c->symtree->n.sym = sym;
++	}
++    }
++
+   /* If external, check for usage.  */
+-  if (c->symtree && is_external_proc (c->symtree->n.sym))
+-    resolve_global_procedure (c->symtree->n.sym, &c->loc, 1);
++  if (csym && is_external_proc (csym))
++    resolve_global_procedure (csym, &c->loc, 1);
+ 
+   /* Subroutines without the RECURSIVE attribution are not allowed to
+    * call themselves.  */
+-  if (c->symtree && c->symtree->n.sym && !c->symtree->n.sym->attr.recursive)
++  if (csym && !csym->attr.recursive)
+     {
+-      gfc_symbol *csym, *proc;
+-      csym = c->symtree->n.sym;
++      gfc_symbol *proc;
+       proc = gfc_current_ns->proc_name;
+       if (csym == proc)
+       {
+@@ -2818,10 +2866,12 @@
+      of procedure, once the procedure itself is resolved.  */
+   need_full_assumed_size++;
+ 
+-  if (c->symtree && c->symtree->n.sym)
+-    ptype = c->symtree->n.sym->attr.proc;
++  if (csym)
++    ptype = csym->attr.proc;
+ 
+-  if (resolve_actual_arglist (c->ext.actual, ptype) == FAILURE)
++  no_formal_args = csym && is_external_proc (csym) && csym->formal == NULL;
++  if (resolve_actual_arglist (c->ext.actual, ptype,
++			      no_formal_args) == FAILURE)
+     return FAILURE;
+ 
+   /* Resume assumed_size checking.  */
+@@ -2829,7 +2879,7 @@
+ 
+   t = SUCCESS;
+   if (c->resolved_sym == NULL)
+-    switch (procedure_kind (c->symtree->n.sym))
++    switch (procedure_kind (csym))
+       {
+       case PTYPE_GENERIC:
+ 	t = resolve_generic_s (c);
+@@ -4155,14 +4205,12 @@
+ 
+   old_sym = e->symtree->n.sym;
+ 
+-  if (old_sym->attr.use_assoc)
+-    return retval;
+-
+   if (gfc_current_ns->parent
+ 	&& old_sym->ns != gfc_current_ns)
+     {
+       gfc_find_symbol (old_sym->name, gfc_current_ns, 1, &sym);
+       if (sym && old_sym != sym
++	      && sym->ts.type == old_sym->ts.type
+ 	      && sym->attr.flavor == FL_PROCEDURE
+ 	      && sym->attr.contained)
+ 	{
+@@ -5796,9 +5844,9 @@
+ 	     assignment target, then there will be a many-to-one
+ 	     assignment.  */
+ 	  if (find_forall_index (code->expr, forall_index, 0) == FAILURE)
+-	    gfc_error ("The FORALL with index '%s' cause more than one "
+-		       "assignment to this object at %L",
+-		       var_expr[n]->symtree->name, &code->expr->where);
++	    gfc_warning ("The FORALL with index '%s' might cause more than "
++			 "one assignment to this object at %L",
++			 var_expr[n]->symtree->name, &code->expr->where);
+ 	}
+     }
+ }
+@@ -5894,6 +5942,40 @@
+ }
+ 
+ 
++/* Counts the number of iterators needed inside a forall construct, including
++   nested forall constructs. This is used to allocate the needed memory 
++   in gfc_resolve_forall.  */
++
++static int 
++gfc_count_forall_iterators (gfc_code *code)
++{
++  int max_iters, sub_iters, current_iters;
++  gfc_forall_iterator *fa;
++
++  gcc_assert(code->op == EXEC_FORALL);
++  max_iters = 0;
++  current_iters = 0;
++
++  for (fa = code->ext.forall_iterator; fa; fa = fa->next)
++    current_iters ++;
++  
++  code = code->block->next;
++
++  while (code)
++    {          
++      if (code->op == EXEC_FORALL)
++        {
++          sub_iters = gfc_count_forall_iterators (code);
++          if (sub_iters > max_iters)
++            max_iters = sub_iters;
++        }
++      code = code->next;
++    }
++
++  return current_iters + max_iters;
++}
++
++
+ /* Given a FORALL construct, first resolve the FORALL iterator, then call
+    gfc_resolve_forall_body to resolve the FORALL body.  */
+ 
+@@ -5903,22 +5985,18 @@
+   static gfc_expr **var_expr;
+   static int total_var = 0;
+   static int nvar = 0;
++  int old_nvar, tmp;
+   gfc_forall_iterator *fa;
+-  gfc_code *next;
+   int i;
+ 
++  old_nvar = nvar;
++
+   /* Start to resolve a FORALL construct   */
+   if (forall_save == 0)
+     {
+       /* Count the total number of FORALL index in the nested FORALL
+-	 construct in order to allocate the VAR_EXPR with proper size.  */
+-      next = code;
+-      while ((next != NULL) && (next->op == EXEC_FORALL))
+-	{
+-	  for (fa = next->ext.forall_iterator; fa; fa = fa->next)
+-	    total_var ++;
+-	  next = next->block->next;
+-	}
++         construct in order to allocate the VAR_EXPR with proper size.  */
++      total_var = gfc_count_forall_iterators (code);
+ 
+       /* Allocate VAR_EXPR with NUMBER_OF_FORALL_INDEX elements.  */
+       var_expr = (gfc_expr **) gfc_getmem (total_var * sizeof (gfc_expr *));
+@@ -5943,6 +6021,9 @@
+       var_expr[nvar] = gfc_copy_expr (fa->var);
+ 
+       nvar++;
++
++      /* No memory leak.  */
++      gcc_assert (nvar <= total_var);
+     }
+ 
+   /* Resolve the FORALL body.  */
+@@ -5951,13 +6032,21 @@
+   /* May call gfc_resolve_forall to resolve the inner FORALL loop.  */
+   gfc_resolve_blocks (code->block, ns);
+ 
+-  /* Free VAR_EXPR after the whole FORALL construct resolved.  */
+-  for (i = 0; i < total_var; i++)
+-    gfc_free_expr (var_expr[i]);
+-
+-  /* Reset the counters.  */
+-  total_var = 0;
+-  nvar = 0;
++  tmp = nvar;
++  nvar = old_nvar;
++  /* Free only the VAR_EXPRs allocated in this frame.  */
++  for (i = nvar; i < tmp; i++)
++     gfc_free_expr (var_expr[i]);
++
++  if (nvar == 0)
++    {
++      /* We are in the outermost FORALL construct.  */
++      gcc_assert (forall_save == 0);
++
++      /* VAR_EXPR is not needed any more.  */
++      gfc_free (var_expr);
++      total_var = 0;
++    }
+ }
+ 
+ 
+@@ -7060,8 +7149,7 @@
+     {
+       gfc_symbol *s;
+       gfc_find_symbol (sym->ts.derived->name, sym->ns, 0, &s);
+-      if (s && (s->attr.flavor != FL_DERIVED
+-		|| !gfc_compare_derived_types (s, sym->ts.derived)))
++      if (s && s->attr.flavor != FL_DERIVED)
+ 	{
+ 	  gfc_error ("The type '%s' cannot be host associated at %L "
+ 		     "because it is blocked by an incompatible object "
+@@ -7193,6 +7281,10 @@
+ 	}
+     }
+ 
++  /* Ensure that any initializer is simplified.  */
++  if (sym->value)
++    gfc_simplify_expr (sym->value, 1);
++
+   /* Reject illegal initializers.  */
+   if (!sym->mark && sym->value)
+     {
+@@ -9092,6 +9184,7 @@
+   gfc_charlen *cl;
+   gfc_data *d;
+   gfc_equiv *eq;
++  gfc_namespace* old_ns = gfc_current_ns;
+ 
+   gfc_current_ns = ns;
+ 
+@@ -9149,6 +9242,8 @@
+     warn_unused_fortran_label (ns->st_labels);
+ 
+   gfc_resolve_uops (ns->uop_root);
++
++  gfc_current_ns = old_ns;
+ }
+ 
+ 
+diff -Naur gcc-4.3.2.orig/gcc/fortran/simplify.c gcc-4.3.2/gcc/fortran/simplify.c
+--- gcc-4.3.2.orig/gcc/fortran/simplify.c	2008-01-28 09:25:55.000000000 -0800
++++ gcc-4.3.2/gcc/fortran/simplify.c	2008-11-13 22:14:46.000000000 -0800
+@@ -763,7 +763,8 @@
+ 	{
+ 	case BT_INTEGER:
+ 	  if (!y->is_boz)
+-	    mpfr_set_z (result->value.complex.i, y->value.integer, GFC_RND_MODE);
++	    mpfr_set_z (result->value.complex.i, y->value.integer,
++			GFC_RND_MODE);
+ 	  break;
+ 
+ 	case BT_REAL:
+@@ -2451,57 +2452,32 @@
+ }
+ 
+ 
+-/* This function is special since MAX() can take any number of
+-   arguments.  The simplified expression is a rewritten version of the
+-   argument list containing at most one constant element.  Other
+-   constant elements are deleted.  Because the argument list has
+-   already been checked, this function always succeeds.  sign is 1 for
+-   MAX(), -1 for MIN().  */
+-
+-static gfc_expr *
+-simplify_min_max (gfc_expr *expr, int sign)
++/* Selects bewteen current value and extremum for simplify_min_max
++   and simplify_minval_maxval.  */
++static void
++min_max_choose (gfc_expr *arg, gfc_expr *extremum, int sign)
+ {
+-  gfc_actual_arglist *arg, *last, *extremum;
+-  gfc_intrinsic_sym * specific;
+-
+-  last = NULL;
+-  extremum = NULL;
+-  specific = expr->value.function.isym;
+-
+-  arg = expr->value.function.actual;
+-
+-  for (; arg; last = arg, arg = arg->next)
+-    {
+-      if (arg->expr->expr_type != EXPR_CONSTANT)
+-	continue;
+-
+-      if (extremum == NULL)
+-	{
+-	  extremum = arg;
+-	  continue;
+-	}
+-
+-      switch (arg->expr->ts.type)
++      switch (arg->ts.type)
+ 	{
+ 	case BT_INTEGER:
+-	  if (mpz_cmp (arg->expr->value.integer,
+-		       extremum->expr->value.integer) * sign > 0)
+-	    mpz_set (extremum->expr->value.integer, arg->expr->value.integer);
++	  if (mpz_cmp (arg->value.integer,
++		       extremum->value.integer) * sign > 0)
++	    mpz_set (extremum->value.integer, arg->value.integer);
+ 	  break;
+ 
+ 	case BT_REAL:
+ 	  /* We need to use mpfr_min and mpfr_max to treat NaN properly.  */
+ 	  if (sign > 0)
+-	    mpfr_max (extremum->expr->value.real, extremum->expr->value.real,
+-		      arg->expr->value.real, GFC_RND_MODE);
++	    mpfr_max (extremum->value.real, extremum->value.real,
++		      arg->value.real, GFC_RND_MODE);
+ 	  else
+-	    mpfr_min (extremum->expr->value.real, extremum->expr->value.real,
+-		      arg->expr->value.real, GFC_RND_MODE);
++	    mpfr_min (extremum->value.real, extremum->value.real,
++		      arg->value.real, GFC_RND_MODE);
+ 	  break;
+ 
+ 	case BT_CHARACTER:
+-#define LENGTH(x) ((x)->expr->value.character.length)
+-#define STRING(x) ((x)->expr->value.character.string)
++#define LENGTH(x) ((x)->value.character.length)
++#define STRING(x) ((x)->value.character.string)
+ 	  if (LENGTH(extremum) < LENGTH(arg))
+ 	    {
+ 	      char * tmp = STRING(extremum);
+@@ -2515,7 +2491,7 @@
+ 	      gfc_free (tmp);
+ 	    }
+ 
+-	  if (gfc_compare_string (arg->expr, extremum->expr) * sign > 0)
++	  if (gfc_compare_string (arg, extremum) * sign > 0)
+ 	    {
+ 	      gfc_free (STRING(extremum));
+ 	      STRING(extremum) = gfc_getmem (LENGTH(extremum) + 1);
+@@ -2532,6 +2508,40 @@
+ 	default:
+ 	  gfc_internal_error ("simplify_min_max(): Bad type in arglist");
+ 	}
++}
++
++
++/* This function is special since MAX() can take any number of
++   arguments.  The simplified expression is a rewritten version of the
++   argument list containing at most one constant element.  Other
++   constant elements are deleted.  Because the argument list has
++   already been checked, this function always succeeds.  sign is 1 for
++   MAX(), -1 for MIN().  */
++
++static gfc_expr *
++simplify_min_max (gfc_expr *expr, int sign)
++{
++  gfc_actual_arglist *arg, *last, *extremum;
++  gfc_intrinsic_sym * specific;
++
++  last = NULL;
++  extremum = NULL;
++  specific = expr->value.function.isym;
++
++  arg = expr->value.function.actual;
++
++  for (; arg; last = arg, arg = arg->next)
++    {
++      if (arg->expr->expr_type != EXPR_CONSTANT)
++	continue;
++
++      if (extremum == NULL)
++	{
++	  extremum = arg;
++	  continue;
++	}
++
++     min_max_choose (arg->expr, extremum->expr, sign);
+ 
+       /* Delete the extra constant argument.  */
+       if (last == NULL)
+@@ -2576,6 +2586,69 @@
+ }
+ 
+ 
++/* This is a simplified version of simplify_min_max to provide
++   simplification of minval and maxval for a vector.  */
++
++static gfc_expr *
++simplify_minval_maxval (gfc_expr *expr, int sign)
++{
++  gfc_constructor *ctr, *extremum;
++  gfc_intrinsic_sym * specific;
++
++  extremum = NULL;
++  specific = expr->value.function.isym;
++
++  ctr = expr->value.constructor;
++
++  for (; ctr; ctr = ctr->next)
++    {
++      if (ctr->expr->expr_type != EXPR_CONSTANT)
++	return NULL;
++
++      if (extremum == NULL)
++	{
++	  extremum = ctr;
++	  continue;
++	}
++
++      min_max_choose (ctr->expr, extremum->expr, sign);
++     }
++
++  if (extremum == NULL)
++    return NULL;
++
++  /* Convert to the correct type and kind.  */
++  if (expr->ts.type != BT_UNKNOWN) 
++    return gfc_convert_constant (extremum->expr,
++	expr->ts.type, expr->ts.kind);
++
++  if (specific->ts.type != BT_UNKNOWN) 
++    return gfc_convert_constant (extremum->expr,
++	specific->ts.type, specific->ts.kind); 
++ 
++  return gfc_copy_expr (extremum->expr);
++}
++
++
++gfc_expr *
++gfc_simplify_minval (gfc_expr *array, gfc_expr* dim, gfc_expr *mask)
++{
++  if (array->expr_type != EXPR_ARRAY || array->rank != 1 || dim || mask)
++    return NULL;
++  
++  return simplify_minval_maxval (array, -1);
++}
++
++
++gfc_expr *
++gfc_simplify_maxval (gfc_expr *array, gfc_expr* dim, gfc_expr *mask)
++{
++  if (array->expr_type != EXPR_ARRAY || array->rank != 1 || dim || mask)
++    return NULL;
++  return simplify_minval_maxval (array, 1);
++}
++
++
+ gfc_expr *
+ gfc_simplify_maxexponent (gfc_expr *x)
+ {
+diff -Naur gcc-4.3.2.orig/gcc/fortran/symbol.c gcc-4.3.2/gcc/fortran/symbol.c
+--- gcc-4.3.2.orig/gcc/fortran/symbol.c	2008-01-29 22:56:10.000000000 -0800
++++ gcc-4.3.2/gcc/fortran/symbol.c	2008-09-22 23:25:39.000000000 -0700
+@@ -1377,7 +1377,8 @@
+ 		const char *name, locus *where)
+ {
+ 
+-  if (attr->access == ACCESS_UNKNOWN)
++  if (attr->access == ACCESS_UNKNOWN
++	|| (attr->use_assoc && attr->access != ACCESS_PRIVATE))
+     {
+       attr->access = access;
+       return check_conflict (attr, name, where);
+@@ -3058,7 +3059,6 @@
+ void
+ gfc_save_all (gfc_namespace *ns)
+ {
+-
+   gfc_traverse_ns (ns, save_symbol);
+ }
+ 
+diff -Naur gcc-4.3.2.orig/gcc/fortran/target-memory.c gcc-4.3.2/gcc/fortran/target-memory.c
+--- gcc-4.3.2.orig/gcc/fortran/target-memory.c	2008-05-18 16:06:16.000000000 -0700
++++ gcc-4.3.2/gcc/fortran/target-memory.c	2008-09-14 02:57:50.000000000 -0700
+@@ -338,8 +338,9 @@
+ 
+ int
+ gfc_interpret_float (int kind, unsigned char *buffer, size_t buffer_size,
+-		 mpfr_t real)
++		     mpfr_t real)
+ {
++  gfc_set_model_kind (kind);
+   mpfr_init (real);
+   gfc_conv_tree_to_mpfr (real,
+ 			 native_interpret_expr (gfc_get_real_type (kind),
+@@ -661,10 +662,8 @@
+     }
+ 
+   for (index = 0; gfc_integer_kinds[index].kind != 0; ++index)
+-    {
+-	if ((unsigned) gfc_integer_kinds[index].bit_size >= ts_bit_size)
+-	  break;
+-    }
++    if ((unsigned) gfc_integer_kinds[index].bit_size >= ts_bit_size)
++      break;
+ 
+   expr->ts.kind = gfc_integer_kinds[index].kind;
+   buffer_size = MAX (buffer_size, size_integer (expr->ts.kind));
+diff -Naur gcc-4.3.2.orig/gcc/fortran/trans-array.c gcc-4.3.2/gcc/fortran/trans-array.c
+--- gcc-4.3.2.orig/gcc/fortran/trans-array.c	2008-07-27 04:41:35.000000000 -0700
++++ gcc-4.3.2/gcc/fortran/trans-array.c	2008-11-29 12:42:22.000000000 -0800
+@@ -587,17 +587,13 @@
+   /* Set the lower bound to zero.  */
+   for (dim = 0; dim < info->dimen; dim++)
+     {
+-      n = loop->order[dim];
+-      /* TODO: Investigate why "if (n < loop->temp_dim)
+-	 gcc_assert (integer_zerop (loop->from[n]));" fails here.  */
+-      if (n >= loop->temp_dim)
+-	{
+-	  /* Callee allocated arrays may not have a known bound yet.  */
+-          if (loop->to[n])
+-              loop->to[n] = fold_build2 (MINUS_EXPR, gfc_array_index_type,
+-					 loop->to[n], loop->from[n]);
+-	  loop->from[n] = gfc_index_zero_node;
+-	}
++     n = loop->order[dim];
++      /* Callee allocated arrays may not have a known bound yet.  */
++      if (loop->to[n])
++	loop->to[n] = gfc_evaluate_now (fold_build2 (MINUS_EXPR,
++					gfc_array_index_type,
++					loop->to[n], loop->from[n]), pre);
++      loop->from[n] = gfc_index_zero_node;
+ 
+       info->delta[dim] = gfc_index_zero_node;
+       info->start[dim] = gfc_index_zero_node;
+@@ -635,9 +631,18 @@
+ 
+   or_expr = NULL_TREE;
+ 
++  /* If there is at least one null loop->to[n], it is a callee allocated 
++     array.  */
+   for (n = 0; n < info->dimen; n++)
+-    {
+-      if (loop->to[n] == NULL_TREE)
++    if (loop->to[n] == NULL_TREE)
++      {
++	size = NULL_TREE;
++	break;
++      }
++
++  for (n = 0; n < info->dimen; n++)
++     {
++      if (size == NULL_TREE)
+         {
+ 	  /* For a callee allocated array express the loop bounds in terms
+ 	     of the descriptor fields.  */
+@@ -645,7 +650,6 @@
+ 			gfc_conv_descriptor_ubound (desc, gfc_rank_cst[n]),
+ 			gfc_conv_descriptor_lbound (desc, gfc_rank_cst[n]));
+           loop->to[n] = tmp;
+-          size = NULL_TREE;
+           continue;
+         }
+         
+@@ -1604,8 +1608,7 @@
+ 
+   info->descriptor = tmp;
+   info->data = build_fold_addr_expr (tmp);
+-  info->offset = fold_build1 (NEGATE_EXPR, gfc_array_index_type,
+-			      loop->from[0]);
++  info->offset = gfc_index_zero_node;
+ 
+   for (i = 0; i < info->dimen; i++)
+     {
+@@ -1668,7 +1671,6 @@
+   tree offsetvar;
+   tree desc;
+   tree type;
+-  tree loopfrom;
+   bool dynamic;
+ 
+   if (flag_bounds_check && ss->expr->ts.type == BT_CHARACTER)
+@@ -1747,34 +1749,9 @@
+ 	}
+     }
+ 
+-  /* Temporarily reset the loop variables, so that the returned temporary
+-     has the right size and bounds.  This seems only to be necessary for
+-     1D arrays.  */
+-  if (!integer_zerop (loop->from[0]) && loop->dimen == 1)
+-    {
+-      loopfrom = loop->from[0];
+-      loop->from[0] = gfc_index_zero_node;
+-      loop->to[0] = fold_build2 (MINUS_EXPR, gfc_array_index_type,
+-				 loop->to[0], loopfrom);
+-    }
+-  else
+-    loopfrom = NULL_TREE;
+-
+   gfc_trans_create_temp_array (&loop->pre, &loop->post, loop, &ss->data.info,
+ 			       type, dynamic, true, false);
+ 
+-  if (loopfrom != NULL_TREE)
+-    {
+-      loop->from[0] = loopfrom;
+-      loop->to[0] = fold_build2 (PLUS_EXPR, gfc_array_index_type,
+-				 loop->to[0], loopfrom);
+-      /* In the case of a non-zero from, the temporary needs an offset
+-	 so that subsequent indexing is correct.  */
+-      ss->data.info.offset = fold_build1 (NEGATE_EXPR,
+-					  gfc_array_index_type,
+-					  loop->from[0]);
+-    }
+-
+   desc = ss->data.info.descriptor;
+   offset = gfc_index_zero_node;
+   offsetvar = gfc_create_var_np (gfc_array_index_type, "offset");
+@@ -3299,7 +3276,10 @@
+ 	  if (ss->shape)
+ 	    {
+ 	      /* The frontend has worked out the size for us.  */
+-	      loopspec[n] = ss;
++	      if (!loopspec[n] || !loopspec[n]->shape
++		    || !integer_zerop (loopspec[n]->data.info.start[n]))
++		/* Prefer zero-based descriptors if possible.  */
++		loopspec[n] = ss;
+ 	      continue;
+ 	    }
+ 
+@@ -3398,8 +3378,13 @@
+ 	      break;
+ 
+ 	    case GFC_SS_SECTION:
+-	      loop->to[n] = gfc_conv_section_upper_bound (loopspec[n], n,
+-							  &loop->pre);
++	      /* Use the end expression if it exists and is not constant,
++		 so that it is only evaluated once.  */
++	      if (info->end[n] && !INTEGER_CST_P (info->end[n]))
++		loop->to[n] = info->end[n];
++	      else
++		loop->to[n] = gfc_conv_section_upper_bound (loopspec[n], n,
++							    &loop->pre);
+ 	      break;
+ 
+             case GFC_SS_FUNCTION:
+@@ -3473,7 +3458,9 @@
+   /* Calculate the translation from loop variables to array indices.  */
+   for (ss = loop->ss; ss != gfc_ss_terminator; ss = ss->loop_chain)
+     {
+-      if (ss->type != GFC_SS_SECTION && ss->type != GFC_SS_COMPONENT)
++      if (ss->type != GFC_SS_SECTION && ss->type != GFC_SS_COMPONENT
++	    && ss->type != GFC_SS_CONSTRUCTOR)
++
+ 	continue;
+ 
+       info = &ss->data.info;
+@@ -5144,7 +5131,6 @@
+       gfc_conv_expr_descriptor (se, expr, ss);
+     }
+ 
+-
+   /* Deallocate the allocatable components of structures that are
+      not variable.  */
+   if (expr->ts.type == BT_DERIVED
+@@ -5375,10 +5361,12 @@
+ 
+       if (purpose == COPY_ALLOC_COMP)
+         {
+-          tmp = gfc_duplicate_allocatable (dest, decl, TREE_TYPE(decl), rank);
+-	  gfc_add_expr_to_block (&fnblock, tmp);
+-
+-	  tmp = build_fold_indirect_ref (gfc_conv_descriptor_data_get (dest));
++	  if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (dest)))
++	    {
++	      tmp = gfc_duplicate_allocatable (dest, decl, TREE_TYPE(decl), rank);
++	      gfc_add_expr_to_block (&fnblock, tmp);
++	    }
++	  tmp = build_fold_indirect_ref (gfc_conv_array_data (dest));
+ 	  dref = gfc_build_array_ref (tmp, index, NULL);
+ 	  tmp = structure_alloc_comps (der_type, vref, dref, rank, purpose);
+ 	}
+@@ -5621,7 +5609,7 @@
+       gfc_add_expr_to_block (&fnblock, tmp);
+     }
+ 
+-  if (sym->attr.allocatable && !sym->attr.save)
++  if (sym->attr.allocatable && !sym->attr.save && !sym->attr.result)
+     {
+       tmp = gfc_trans_dealloc_allocated (sym->backend_decl);
+       gfc_add_expr_to_block (&fnblock, tmp);
+diff -Naur gcc-4.3.2.orig/gcc/fortran/trans-decl.c gcc-4.3.2/gcc/fortran/trans-decl.c
+--- gcc-4.3.2.orig/gcc/fortran/trans-decl.c	2008-04-19 15:30:03.000000000 -0700
++++ gcc-4.3.2/gcc/fortran/trans-decl.c	2008-11-29 12:42:22.000000000 -0800
+@@ -2589,20 +2589,34 @@
+ }
+ 
+ 
+-/* Initialize INTENT(OUT) derived type dummies.  */
++/* Initialize INTENT(OUT) derived type dummies.  As well as giving
++   them their default initializer, if they do not have allocatable
++   components, they have their allocatable components deallocated. */
++
+ static tree
+ init_intent_out_dt (gfc_symbol * proc_sym, tree body)
+ {
+   stmtblock_t fnblock;
+   gfc_formal_arglist *f;
++  tree tmp;
+ 
+   gfc_init_block (&fnblock);
+   for (f = proc_sym->formal; f; f = f->next)
+     if (f->sym && f->sym->attr.intent == INTENT_OUT
+-	  && f->sym->ts.type == BT_DERIVED
+-	  && !f->sym->ts.derived->attr.alloc_comp
+-	  && f->sym->value)
+-      body = gfc_init_default_dt (f->sym, body);
++	  && f->sym->ts.type == BT_DERIVED)
++      {
++	if (f->sym->ts.derived->attr.alloc_comp)
++	  {
++	    tmp = gfc_deallocate_alloc_comp (f->sym->ts.derived,
++					     f->sym->backend_decl,
++					     f->sym->as ? f->sym->as->rank : 0);
++	    gfc_add_expr_to_block (&fnblock, tmp);
++	  }
++
++	if (!f->sym->ts.derived->attr.alloc_comp
++	      && f->sym->value)
++	  body = gfc_init_default_dt (f->sym, body);
++      }
+ 
+   gfc_add_expr_to_block (&fnblock, body);
+   return gfc_finish_block (&fnblock);
+@@ -2966,10 +2980,10 @@
+ 	getting stuck in a circular dependency.  */
+       sym->mark = 1;
+       if (!sym->attr.dummy && !sym->ns->proc_name->attr.entry_master)
+-        generate_dependency_declarations (sym);
++	generate_dependency_declarations (sym);
+ 
+       if (sym->attr.referenced)
+-        gfc_get_symbol_decl (sym);
++	gfc_get_symbol_decl (sym);
+       /* INTENT(out) dummy arguments are likely meant to be set.  */
+       else if (warn_unused_variable
+ 	       && sym->attr.dummy
+@@ -3000,6 +3014,19 @@
+ 	  gfc_get_symbol_decl (sym);
+ 	}
+ 
++      /* INTENT(out) dummy arguments with allocatable components are reset
++	 by default and need to be set referenced to generate the code for
++	 automatic lengths.  */
++      if (sym->attr.dummy && !sym->attr.referenced
++	    && sym->ts.type == BT_DERIVED
++	    && sym->ts.derived->attr.alloc_comp
++	    && sym->attr.intent == INTENT_OUT)
++	{
++	  sym->attr.referenced = 1;
++	  gfc_get_symbol_decl (sym);
++	}
++
++
+       /* We do not want the middle-end to warn about unused parameters
+          as this was already done above.  */
+       if (sym->attr.dummy && sym->backend_decl != NULL_TREE)
+diff -Naur gcc-4.3.2.orig/gcc/fortran/trans-expr.c gcc-4.3.2/gcc/fortran/trans-expr.c
+--- gcc-4.3.2.orig/gcc/fortran/trans-expr.c	2008-07-27 04:41:35.000000000 -0700
++++ gcc-4.3.2/gcc/fortran/trans-expr.c	2008-12-14 08:07:46.000000000 -0800
+@@ -1421,6 +1421,7 @@
+   for (sym = mapping->syms; sym; sym = nextsym)
+     {
+       nextsym = sym->next;
++      sym->new->n.sym->formal = NULL;
+       gfc_free_symbol (sym->new->n.sym);
+       gfc_free_expr (sym->expr);
+       gfc_free (sym->new);
+@@ -1541,6 +1542,7 @@
+   /* Create a new symbol to represent the actual argument.  */
+   new_sym = gfc_new_symbol (sym->name, NULL);
+   new_sym->ts = sym->ts;
++  new_sym->as = gfc_copy_array_spec (sym->as);
+   new_sym->attr.referenced = 1;
+   new_sym->attr.dimension = sym->attr.dimension;
+   new_sym->attr.pointer = sym->attr.pointer;
+@@ -1548,6 +1550,15 @@
+   new_sym->attr.flavor = sym->attr.flavor;
+   new_sym->attr.function = sym->attr.function;
+ 
++  /* Ensure that the interface is available and that
++     descriptors are passed for array actual arguments.  */
++  if (sym->attr.flavor == FL_PROCEDURE)
++    {
++      new_sym->formal = expr->symtree->n.sym->formal;
++      new_sym->attr.always_explicit
++	    = expr->symtree->n.sym->attr.always_explicit;
++    }
++
+   /* Create a fake symtree for it.  */
+   root = NULL;
+   new_symtree = gfc_new_symtree (&root, sym->name);
+@@ -1657,7 +1668,7 @@
+ 	gfc_apply_interface_mapping_to_expr (mapping, expr);
+ 	gfc_init_se (&se, NULL);
+ 	gfc_conv_expr (&se, expr);
+-
++	se.expr = fold_convert (gfc_charlen_type_node, se.expr);
+ 	se.expr = gfc_evaluate_now (se.expr, &se.pre);
+ 	gfc_add_block_to_block (pre, &se.pre);
+ 	gfc_add_block_to_block (post, &se.post);
+@@ -1721,8 +1732,9 @@
+ 
+ 
+ /* Convert intrinsic function calls into result expressions.  */
++
+ static bool
+-gfc_map_intrinsic_function (gfc_expr *expr, gfc_interface_mapping * mapping)
++gfc_map_intrinsic_function (gfc_expr *expr, gfc_interface_mapping *mapping)
+ {
+   gfc_symbol *sym;
+   gfc_expr *new_expr;
+@@ -1736,7 +1748,7 @@
+   else
+     arg2 = NULL;
+ 
+-  sym  = arg1->symtree->n.sym;
++  sym = arg1->symtree->n.sym;
+ 
+   if (sym->attr.dummy)
+     return false;
+@@ -1773,6 +1785,13 @@
+       for (; d < dup; d++)
+ 	{
+ 	  gfc_expr *tmp;
++
++	  if (!sym->as->upper[d] || !sym->as->lower[d])
++	    {
++	      gfc_free_expr (new_expr);
++	      return false;
++	    }
++
+ 	  tmp = gfc_add (gfc_copy_expr (sym->as->upper[d]), gfc_int_expr (1));
+ 	  tmp = gfc_subtract (tmp, gfc_copy_expr (sym->as->lower[d]));
+ 	  if (new_expr)
+@@ -1798,9 +1817,15 @@
+ 	gcc_unreachable ();
+ 
+       if (expr->value.function.isym->id == GFC_ISYM_LBOUND)
+-	new_expr = gfc_copy_expr (sym->as->lower[d]);
++	{
++	  if (sym->as->lower[d])
++	    new_expr = gfc_copy_expr (sym->as->lower[d]);
++	}
+       else
+-	new_expr = gfc_copy_expr (sym->as->upper[d]);
++	{
++	  if (sym->as->upper[d])
++	    new_expr = gfc_copy_expr (sym->as->upper[d]);
++	}
+       break;
+ 
+     default:
+@@ -2518,14 +2543,11 @@
+       gfc_add_block_to_block (&post, &parmse.post);
+ 
+       /* Allocated allocatable components of derived types must be
+-	 deallocated for INTENT(OUT) dummy arguments and non-variable
+-         scalars.  Non-variable arrays are dealt with in trans-array.c
+-         (gfc_conv_array_parameter).  */
++	 deallocated for non-variable scalars.  Non-variable arrays are
++	 dealt with in trans-array.c(gfc_conv_array_parameter).  */
+       if (e && e->ts.type == BT_DERIVED
+ 	    && e->ts.derived->attr.alloc_comp
+-	    && ((formal && formal->sym->attr.intent == INTENT_OUT)
+-		   ||
+-		(e->expr_type != EXPR_VARIABLE && !e->rank)))
++	    && (e->expr_type != EXPR_VARIABLE && !e->rank))
+         {
+ 	  int parm_rank;
+ 	  tmp = build_fold_indirect_ref (parmse.expr);
+@@ -2540,24 +2562,10 @@
+ 	    case (SCALAR_POINTER):
+               tmp = build_fold_indirect_ref (tmp);
+ 	      break;
+-	    case (ARRAY):
+-              tmp = parmse.expr;
+-	      break;
+ 	    }
+ 
+-          tmp = gfc_deallocate_alloc_comp (e->ts.derived, tmp, parm_rank);
+-	  if (e->expr_type == EXPR_VARIABLE && e->symtree->n.sym->attr.optional)
+-	    tmp = build3_v (COND_EXPR, gfc_conv_expr_present (e->symtree->n.sym),
+-			    tmp, build_empty_stmt ());
+-
+-	  if (e->expr_type != EXPR_VARIABLE)
+-	    /* Don't deallocate non-variables until they have been used.  */
+-	    gfc_add_expr_to_block (&se->post, tmp);
+-	  else 
+-	    {
+-	      gcc_assert (formal && formal->sym->attr.intent == INTENT_OUT);
+-	      gfc_add_expr_to_block (&se->pre, tmp);
+-	    }
++	  tmp = gfc_deallocate_alloc_comp (e->ts.derived, tmp, parm_rank);
++	  gfc_add_expr_to_block (&se->post, tmp);
+         }
+ 
+       /* Character strings are passed as two parameters, a length and a
+@@ -3305,9 +3313,10 @@
+ 					     cm->as->rank);
+ 
+ 	  gfc_add_expr_to_block (&block, tmp);
+-
+ 	  gfc_add_block_to_block (&block, &se.post);
+-	  gfc_conv_descriptor_data_set (&block, se.expr, null_pointer_node);
++
++	  if (expr->expr_type != EXPR_VARIABLE)
++	    gfc_conv_descriptor_data_set (&block, se.expr, null_pointer_node);
+ 
+ 	  /* Shift the lbound and ubound of temporaries to being unity, rather
+ 	     than zero, based.  Calculate the offset for all cases.  */
+@@ -3339,6 +3348,35 @@
+ 	      tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, offset, tmp2);
+ 	      gfc_add_modify_expr (&block, offset, tmp);
+ 	    }
++
++	  if (expr->expr_type == EXPR_FUNCTION
++		&& expr->value.function.isym
++		&& expr->value.function.isym->conversion
++		&& expr->value.function.actual->expr
++		&& expr->value.function.actual->expr->expr_type
++						== EXPR_VARIABLE)
++	    {
++	      /* If a conversion expression has a null data pointer
++		 argument, nullify the allocatable component.  */
++	      gfc_symbol *s;
++	      tree non_null_expr;
++	      tree null_expr;
++	      s = expr->value.function.actual->expr->symtree->n.sym;
++	      if (s->attr.allocatable || s->attr.pointer)
++		{
++		  non_null_expr = gfc_finish_block (&block);
++		  gfc_start_block (&block);
++		  gfc_conv_descriptor_data_set (&block, dest,
++						null_pointer_node);
++		  null_expr = gfc_finish_block (&block);
++		  tmp = gfc_conv_descriptor_data_get (s->backend_decl);
++		  tmp = build2 (EQ_EXPR, boolean_type_node, tmp,
++			        fold_convert (TREE_TYPE (tmp),
++					      null_pointer_node));
++		  return build3_v (COND_EXPR, tmp, null_expr,
++				   non_null_expr);
++		}
++	    }
+ 	}
+       else
+ 	{
+@@ -3974,7 +4012,8 @@
+   /* Check for a dependency.  */
+   if (gfc_check_fncall_dependency (expr1, INTENT_OUT,
+ 				   expr2->value.function.esym,
+-				   expr2->value.function.actual))
++				   expr2->value.function.actual,
++				   NOT_ELEMENTAL))
+     return NULL;
+ 
+   /* The frontend doesn't seem to bother filling in expr->symtree for intrinsic
+@@ -4218,6 +4257,7 @@
+   stmtblock_t block;
+   stmtblock_t body;
+   bool l_is_temp;
++  bool scalar_to_array;
+ 
+   /* Assignment of the form lhs = rhs.  */
+   gfc_start_block (&block);
+@@ -4301,9 +4341,24 @@
+   else
+     gfc_conv_expr (&lse, expr1);
+ 
++  /* Assignments of scalar derived types with allocatable components
++     to arrays must be done with a deep copy and the rhs temporary
++     must have its components deallocated afterwards.  */
++  scalar_to_array = (expr2->ts.type == BT_DERIVED
++		       && expr2->ts.derived->attr.alloc_comp
++		       && expr2->expr_type != EXPR_VARIABLE
++		       && !gfc_is_constant_expr (expr2)
++		       && expr1->rank && !expr2->rank);
++  if (scalar_to_array)
++    {
++      tmp = gfc_deallocate_alloc_comp (expr2->ts.derived, rse.expr, 0);
++      gfc_add_expr_to_block (&loop.post, tmp);
++    }
++
+   tmp = gfc_trans_scalar_assign (&lse, &rse, expr1->ts,
+ 				 l_is_temp || init_flag,
+-				 expr2->expr_type == EXPR_VARIABLE);
++				 (expr2->expr_type == EXPR_VARIABLE)
++				    || scalar_to_array);
+   gfc_add_expr_to_block (&body, tmp);
+ 
+   if (lss == gfc_ss_terminator)
+diff -Naur gcc-4.3.2.orig/gcc/fortran/trans-stmt.c gcc-4.3.2/gcc/fortran/trans-stmt.c
+--- gcc-4.3.2.orig/gcc/fortran/trans-stmt.c	2008-05-17 00:10:13.000000000 -0700
++++ gcc-4.3.2/gcc/fortran/trans-stmt.c	2008-11-24 04:13:59.000000000 -0800
+@@ -200,7 +200,8 @@
+    can be used, as is, to copy the result back to the variable.  */
+ static void
+ gfc_conv_elemental_dependencies (gfc_se * se, gfc_se * loopse,
+-				 gfc_symbol * sym, gfc_actual_arglist * arg)
++				 gfc_symbol * sym, gfc_actual_arglist * arg,
++				 gfc_dep_check check_variable)
+ {
+   gfc_actual_arglist *arg0;
+   gfc_expr *e;
+@@ -248,7 +249,7 @@
+ 	    && e->rank && fsym
+ 	    && fsym->attr.intent != INTENT_IN
+ 	    && gfc_check_fncall_dependency (e, fsym->attr.intent,
+-					    sym, arg0))
++					    sym, arg0, check_variable))
+ 	{
+ 	  /* Make a local loopinfo for the temporary creation, so that
+ 	     none of the other ss->info's have to be renormalized.  */
+@@ -312,6 +313,7 @@
+   gfc_se se;
+   gfc_ss * ss;
+   int has_alternate_specifier;
++  gfc_dep_check check_variable;
+ 
+   /* A CALL starts a new block because the actual arguments may have to
+      be evaluated first.  */
+@@ -374,6 +376,10 @@
+       gfc_add_ss_to_loop (&loop, ss);
+ 
+       gfc_conv_ss_startstride (&loop);
++      /* TODO: gfc_conv_loop_setup generates a temporary for vector 
++	 subscripts.  This could be prevented in the elemental case  
++	 as temporaries are handled separatedly 
++	 (below in gfc_conv_elemental_dependencies).  */
+       gfc_conv_loop_setup (&loop);
+       gfc_mark_ss_chain_used (ss, 1);
+ 
+@@ -383,12 +389,11 @@
+ 
+       /* For operator assignment, do dependency checking.  */
+       if (dependency_check)
+-	{
+-	  gfc_symbol *sym;
+-	  sym = code->resolved_sym;
+-	  gfc_conv_elemental_dependencies (&se, &loopse, sym,
+-					   code->ext.actual);
+-	}
++	check_variable = ELEM_CHECK_VARIABLE;
++      else
++	check_variable = ELEM_DONT_CHECK_VARIABLE;
++      gfc_conv_elemental_dependencies (&se, &loopse, code->resolved_sym,
++				       code->ext.actual, check_variable);
+ 
+       /* Generate the loop body.  */
+       gfc_start_scalarized_body (&loop, &body);
+diff -Naur gcc-4.3.2.orig/gcc/function.c gcc-4.3.2/gcc/function.c
+--- gcc-4.3.2.orig/gcc/function.c	2008-02-15 01:55:36.000000000 -0800
++++ gcc-4.3.2/gcc/function.c	2008-09-09 13:24:58.000000000 -0700
+@@ -2336,6 +2336,11 @@
+   stack_parm = gen_rtx_MEM (data->promoted_mode, stack_parm);
+ 
+   set_mem_attributes (stack_parm, parm, 1);
++  /* set_mem_attributes could set MEM_SIZE to the passed mode's size,
++     while promoted mode's size is needed.  */
++  if (data->promoted_mode != BLKmode
++      && data->promoted_mode != DECL_MODE (parm))
++    set_mem_size (stack_parm, GEN_INT (GET_MODE_SIZE (data->promoted_mode)));
+ 
+   boundary = data->locate.boundary;
+   align = BITS_PER_UNIT;
+diff -Naur gcc-4.3.2.orig/gcc/gimplify.c gcc-4.3.2/gcc/gimplify.c
+--- gcc-4.3.2.orig/gcc/gimplify.c	2008-08-12 07:04:18.000000000 -0700
++++ gcc-4.3.2/gcc/gimplify.c	2008-12-18 13:55:31.000000000 -0800
+@@ -3416,7 +3416,8 @@
+ 
+ 	    if (constant_p)
+ 	      {
+-		TREE_OPERAND (*expr_p, 1) = build_vector_from_ctor (type, elts);
++		GENERIC_TREE_OPERAND (*expr_p, 1)
++		  = build_vector_from_ctor (type, elts);
+ 		break;
+ 	      }
+ 
+diff -Naur gcc-4.3.2.orig/gcc/haifa-sched.c gcc-4.3.2/gcc/haifa-sched.c
+--- gcc-4.3.2.orig/gcc/haifa-sched.c	2008-08-05 23:34:18.000000000 -0700
++++ gcc-4.3.2/gcc/haifa-sched.c	2008-09-09 14:17:19.000000000 -0700
+@@ -4485,4 +4485,15 @@
+ }
+ #endif /* ENABLE_CHECKING */
+ 
++/* Insert PAT as an INSN into the schedule and update the necessary data
++   structures to account for it. */
++rtx
++sched_emit_insn (rtx pat)
++{
++  rtx insn = emit_insn_after (pat, last_scheduled_insn);
++  last_scheduled_insn = insn;
++  extend_region_data (insn);
++  return insn;
++}
++
+ #endif /* INSN_SCHEDULING */
+diff -Naur gcc-4.3.2.orig/gcc/ifcvt.c gcc-4.3.2/gcc/ifcvt.c
+--- gcc-4.3.2.orig/gcc/ifcvt.c	2008-07-01 07:05:13.000000000 -0700
++++ gcc-4.3.2/gcc/ifcvt.c	2008-09-30 12:48:12.000000000 -0700
+@@ -659,7 +659,15 @@
+      build the store_flag insn directly.  */
+ 
+   if (cond_complex)
+-    cond = XEXP (SET_SRC (pc_set (if_info->jump)), 0);
++    {
++      rtx set = pc_set (if_info->jump);
++      cond = XEXP (SET_SRC (set), 0);
++      if (GET_CODE (XEXP (SET_SRC (set), 2)) == LABEL_REF
++	  && XEXP (XEXP (SET_SRC (set), 2), 0) == JUMP_LABEL (if_info->jump))
++	reversep = !reversep;
++      if (if_info->then_else_reversed)
++	reversep = !reversep;
++    }
+ 
+   if (reversep)
+     code = reversed_comparison_code (cond, if_info->jump);
+diff -Naur gcc-4.3.2.orig/gcc/java/ChangeLog gcc-4.3.2/gcc/java/ChangeLog
+--- gcc-4.3.2.orig/gcc/java/ChangeLog	2008-08-27 11:02:23.000000000 -0700
++++ gcc-4.3.2/gcc/java/ChangeLog	2008-12-04 15:00:19.000000000 -0800
+@@ -1,3 +1,56 @@
++2008-12-04  Janis Johnson  <janis187@us.ibm.com>
++
++	Backport from mainline:
++	2008-10-18  Jakub Jelinek  <jakub@redhat.com>
++	            Janis Johnson  <janis187@us.ibm.com>
++
++	* Make-lang.in (check-java-subtargets): New target.
++
++contrib/
++	* dg-extract-results.sh: New file.
++gcc/
++	* Makefile.in (lang_checks_parallelized, check_gcc_parallelize,
++	check_p_tool, check_p_vars, check_p_subno, check_p_comma,
++	check_p_subwork, check_p_numbers, check_p_subdir, check_p_subdirs):
++	New variables.
++	(check-subtargets, check-%-subtargets, check-parallel-%): New
++	targets.
++	(check-%): For test targets listed in lang_checks_parallelized
++	if -j is used and RUNTESTFLAGS doesn't specify tests to execute,
++	run the testing in multiple make goals, possibly parallel, and
++	afterwards run dg-extract-results.sh to merge the sum and log files.
++gcc/cp/
++	* Make-lang.in (check-c++-subtargets): New alias for
++	check-g++-subtargets.
++	(lang_checks_parallelized): Add check-g++.
++	(check_g++_parallelize): New variable.
++gcc/fortran/
++	* Make-lang.in (check-f95-subtargets, check-fortran-subtargets): New
++	aliases for check-gfortran-subtargets.
++	(lang_checks_parallelized): Add check-gfortran.
++	(check_gfortran_parallelize): New variable.
++gcc/ada/
++	* Make-lang.in (check-ada-subtargets): Depend on
++	check-acats-subtargets and check-gnat-subtargets.
++	(check_acats_targets): New variable.
++	(check-acats-subtargets, check-acats%): New targets.
++	(check-acats): If -j is used and CHAPTERS is empty, run the testing
++	in multiple make goals, possibly parallel, and afterwards run
++	dg-extract-results.sh to merge the sum and log files.
++gcc/java/
++	* Make-lang.in (check-java-subtargets): New target.
++libstdc++-v3/
++	* testsuite/Makefile.am (AUTOMAKE_OPTIONS): Remove dejagnu.
++	(RUNTESTDEFAULTFLAGS, EXPECT, check_DEJAGNU_normal_targets): New
++	variables.
++	(%/site.exp, check-DEJAGNU%): New targets.
++	(check-am): Run $(MAKE) check-DEJAGNU.
++	* testsuite/Makefile.in: Regenerated.
++2008-10-14  Andrew Haley  <aph@redhat.com>
++
++	* constants.c (build_constant_data_ref): Make sure we only build
++	one copy of the decl for the constant pool.
++
+ 2008-08-27  Release Manager
+ 
+ 	* GCC 4.3.2 released.
+diff -Naur gcc-4.3.2.orig/gcc/java/Make-lang.in gcc-4.3.2/gcc/java/Make-lang.in
+--- gcc-4.3.2.orig/gcc/java/Make-lang.in	2008-04-01 11:49:36.000000000 -0700
++++ gcc-4.3.2/gcc/java/Make-lang.in	2008-12-04 15:00:19.000000000 -0800
+@@ -150,6 +150,7 @@
+ 	-cp -p $^ $(srcdir)/doc
+ 
+ check-java :
++check-java-subtargets :
+ 
+ # Install hooks:
+ # jc1, gcj, and jvgenmain are installed elsewhere as part
+diff -Naur gcc-4.3.2.orig/gcc/java/constants.c gcc-4.3.2/gcc/java/constants.c
+--- gcc-4.3.2.orig/gcc/java/constants.c	2007-11-17 21:23:59.000000000 -0800
++++ gcc-4.3.2/gcc/java/constants.c	2008-10-24 07:21:00.000000000 -0700
+@@ -451,21 +451,25 @@
+     }
+   else
+     {
+-      tree type, decl;
+       tree decl_name = mangled_classname ("_CD_", output_class);
++      tree decl = IDENTIFIER_GLOBAL_VALUE (decl_name);
+ 
+-      /* Build a type with unspecified bounds.  The will make sure
+-	 that targets do the right thing with whatever size we end
+-	 up with at the end.  Using bounds that are too small risks
+-	 assuming the data is in the small data section.  */
+-      type = build_array_type (ptr_type_node, NULL_TREE);
+-
+-      /* We need to lay out the type ourselves, since build_array_type
+-	 thinks the type is incomplete.  */
+-      layout_type (type);
+-
+-      decl = build_decl (VAR_DECL, decl_name, type);
+-      TREE_STATIC (decl) = 1;
++      if (! decl)
++	{
++	  /* Build a type with unspecified bounds.  The will make sure
++	     that targets do the right thing with whatever size we end
++	     up with at the end.  Using bounds that are too small risks
++	     assuming the data is in the small data section.  */
++	  tree type = build_array_type (ptr_type_node, NULL_TREE);
++
++	  /* We need to lay out the type ourselves, since build_array_type
++	     thinks the type is incomplete.  */
++	  layout_type (type);
++
++	  decl = build_decl (VAR_DECL, decl_name, type);
++	  TREE_STATIC (decl) = 1;
++	  IDENTIFIER_GLOBAL_VALUE (decl_name) = decl;
++	}
+ 
+       return decl;
+     }
+diff -Naur gcc-4.3.2.orig/gcc/passes.c gcc-4.3.2/gcc/passes.c
+--- gcc-4.3.2.orig/gcc/passes.c	2008-01-22 05:27:52.000000000 -0800
++++ gcc-4.3.2/gcc/passes.c	2008-11-05 12:38:46.000000000 -0800
+@@ -1132,6 +1132,7 @@
+   if (initializing_dump
+       && dump_file
+       && graph_dump_format != no_graph
++      && cfun
+       && (cfun->curr_properties & (PROP_cfg | PROP_rtl))
+ 	  == (PROP_cfg | PROP_rtl))
+     {
+diff -Naur gcc-4.3.2.orig/gcc/po/ChangeLog gcc-4.3.2/gcc/po/ChangeLog
+--- gcc-4.3.2.orig/gcc/po/ChangeLog	2008-08-27 11:02:13.000000000 -0700
++++ gcc-4.3.2/gcc/po/ChangeLog	2008-11-23 08:43:50.000000000 -0800
+@@ -1,3 +1,35 @@
++2008-11-23  Joseph S. Myers  <joseph@codesourcery.com>
++
++	* ru.po: Update.
++
++2008-11-18  Joseph S. Myers  <joseph@codesourcery.com>
++
++	* ru.po: Update.
++
++2008-11-07  Joseph S. Myers  <joseph@codesourcery.com>
++
++	* id.po: Update.
++
++2008-11-05  Joseph S. Myers  <joseph@codesourcery.com>
++
++	* id.po: Update.
++
++2008-11-02  Joseph S. Myers  <joseph@codesourcery.com>
++
++	* id.po: Update.
++
++2008-10-31  Joseph S. Myers  <joseph@codesourcery.com>
++
++	* id.po: Update.
++
++2008-10-29  Joseph S. Myers  <joseph@codesourcery.com>
++
++	* id.po: New.
++
++2008-08-30  Joseph S. Myers  <joseph@codesourcery.com>
++
++	* fi.po: New.
++
+ 2008-08-27  Release Manager
+ 
+ 	* GCC 4.3.2 released.
+diff -Naur gcc-4.3.2.orig/gcc/predict.c gcc-4.3.2/gcc/predict.c
+--- gcc-4.3.2.orig/gcc/predict.c	2007-08-26 20:45:06.000000000 -0700
++++ gcc-4.3.2/gcc/predict.c	2008-11-05 12:39:50.000000000 -0800
+@@ -1374,6 +1374,7 @@
+     {
+       edge e;
+       edge_iterator ei;
++      tree last;
+ 
+       FOR_EACH_EDGE (e, ei, bb->succs)
+ 	{
+@@ -1396,7 +1397,8 @@
+ 	      && e->dest != EXIT_BLOCK_PTR
+ 	      && single_succ_p (e->dest)
+ 	      && single_succ_edge (e->dest)->dest == EXIT_BLOCK_PTR
+-	      && TREE_CODE (last_stmt (e->dest)) == RETURN_EXPR)
++	      && (last = last_stmt (e->dest)) != NULL_TREE
++	      && TREE_CODE (last) == RETURN_EXPR)
+ 	    {
+ 	      edge e1;
+ 	      edge_iterator ei1;
+diff -Naur gcc-4.3.2.orig/gcc/real.c gcc-4.3.2/gcc/real.c
+--- gcc-4.3.2.orig/gcc/real.c	2008-08-19 09:37:13.000000000 -0700
++++ gcc-4.3.2/gcc/real.c	2008-10-22 04:33:04.000000000 -0700
+@@ -2341,7 +2341,7 @@
+ 	   required to be the value of the long double rounded to the
+ 	   nearest double.  Rounding means we need a slightly smaller
+ 	   value for LDBL_MAX.  */
+-        clear_significand_bit (r, SIGNIFICAND_BITS - fmt->pnan);
++	clear_significand_bit (r, SIGNIFICAND_BITS - fmt->pnan - 1);
+     }
+ }
+ 
+@@ -4218,6 +4218,7 @@
+     false,
+     false,
+     false,
++    false,
+     false
+   };
+ 
+diff -Naur gcc-4.3.2.orig/gcc/regmove.c gcc-4.3.2/gcc/regmove.c
+--- gcc-4.3.2.orig/gcc/regmove.c	2008-01-21 07:54:41.000000000 -0800
++++ gcc-4.3.2/gcc/regmove.c	2008-11-01 05:39:17.000000000 -0700
+@@ -686,7 +686,16 @@
+ 	      {
+ 		if (reg_mentioned_p (dest, PATTERN (q)))
+ 		  {
++		    rtx note;
++
+ 		    PATTERN (q) = replace_rtx (PATTERN (q), dest, src);
++		    note = FIND_REG_INC_NOTE (q, dest);
++		    if (note)
++		      {
++			remove_note (q, note);
++			REG_NOTES (q)
++			  = gen_rtx_EXPR_LIST (REG_INC, src, REG_NOTES (q));
++		      }
+ 		    df_insn_rescan (q);
+ 		  }
+ 
+diff -Naur gcc-4.3.2.orig/gcc/regrename.c gcc-4.3.2/gcc/regrename.c
+--- gcc-4.3.2.orig/gcc/regrename.c	2007-09-08 19:23:47.000000000 -0700
++++ gcc-4.3.2/gcc/regrename.c	2008-11-25 13:26:19.000000000 -0800
+@@ -137,8 +137,15 @@
+   struct du_chain *t = chain;
+   rtx insn;
+   HARD_REG_SET live;
++  struct df_ref **def_rec;
+ 
+   REG_SET_TO_HARD_REG_SET (live, df_get_live_in (b));
++  for (def_rec = df_get_artificial_defs (b->index); *def_rec; def_rec++)
++    {
++      struct df_ref *def = *def_rec;
++      if (DF_REF_FLAGS (def) & DF_REF_AT_TOP)
++	SET_HARD_REG_BIT (live, DF_REF_REGNO (def));
++    }
+   insn = BB_HEAD (b);
+   while (t)
+     {
+@@ -1315,6 +1322,10 @@
+ 		   enum machine_mode new_mode, unsigned int regno,
+ 		   unsigned int copy_regno ATTRIBUTE_UNUSED)
+ {
++  if (GET_MODE_SIZE (copy_mode) < GET_MODE_SIZE (orig_mode)
++      && GET_MODE_SIZE (copy_mode) < GET_MODE_SIZE (new_mode))
++    return NULL_RTX;
++
+   if (orig_mode == new_mode)
+     return gen_rtx_raw_REG (new_mode, regno);
+   else if (mode_change_ok (orig_mode, new_mode, regno))
+diff -Naur gcc-4.3.2.orig/gcc/rtlanal.c gcc-4.3.2/gcc/rtlanal.c
+--- gcc-4.3.2.orig/gcc/rtlanal.c	2007-11-24 14:15:54.000000000 -0800
++++ gcc-4.3.2/gcc/rtlanal.c	2008-11-10 02:43:35.000000000 -0800
+@@ -3618,8 +3618,9 @@
+   enum rtx_code code;
+   unsigned int mode_width = GET_MODE_BITSIZE (mode);
+ 
+-  /* For floating-point values, assume all bits are needed.  */
+-  if (FLOAT_MODE_P (GET_MODE (x)) || FLOAT_MODE_P (mode))
++  /* For floating-point and vector values, assume all bits are needed.  */
++  if (FLOAT_MODE_P (GET_MODE (x)) || FLOAT_MODE_P (mode)
++      || VECTOR_MODE_P (GET_MODE (x)) || VECTOR_MODE_P (mode))
+     return nonzero;
+ 
+   /* If X is wider than MODE, use its mode instead.  */
+@@ -4132,7 +4133,8 @@
+   if (mode == VOIDmode)
+     mode = GET_MODE (x);
+ 
+-  if (mode == VOIDmode || FLOAT_MODE_P (mode) || FLOAT_MODE_P (GET_MODE (x)))
++  if (mode == VOIDmode || FLOAT_MODE_P (mode) || FLOAT_MODE_P (GET_MODE (x))
++      || VECTOR_MODE_P (GET_MODE (x)) || VECTOR_MODE_P (mode))
+     return 1;
+ 
+   /* For a smaller object, just ignore the high bits.  */
+diff -Naur gcc-4.3.2.orig/gcc/sched-int.h gcc-4.3.2/gcc/sched-int.h
+--- gcc-4.3.2.orig/gcc/sched-int.h	2008-08-05 23:34:18.000000000 -0700
++++ gcc-4.3.2/gcc/sched-int.h	2008-09-09 14:17:19.000000000 -0700
+@@ -848,6 +848,7 @@
+ extern void unlink_bb_notes (basic_block, basic_block);
+ extern void add_block (basic_block, basic_block);
+ extern rtx bb_note (basic_block);
++extern rtx sched_emit_insn (rtx);
+ 
+ /* Functions in sched-rgn.c.  */
+ 
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/ChangeLog gcc-4.3.2/gcc/testsuite/ChangeLog
+--- gcc-4.3.2.orig/gcc/testsuite/ChangeLog	2008-08-27 11:02:30.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/ChangeLog	2008-12-19 10:20:41.000000000 -0800
+@@ -1,3 +1,708 @@
++2008-12-19  Janis Johnson  <janis187@us.ibm.com>
++
++	Revert:
++	2008-12-12  Janis Johnson  <janis187@us.ibm.com>
++	PR libgfortran/24685
++	* gfortran.dg/default_format_denormal_2.f90: Change XFAIL to check
++	for size of long double.
++
++2008-12-18  Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	PR middle-end/38565
++	* testsuite/g++.dg/torture/pr38565.C: New test.
++
++2008-12-14  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/35937
++	* gfortran.dg/char_length_14.f90: New test.
++
++2008-12-12  Janis Johnson  <janis187@us.ibm.com>
++
++	PR libgfortran/24685
++	* gfortran.dg/default_format_denormal_2.f90: Change XFAIL to check
++	for size of long double.
++
++2008-12-11  Michael Meissner  <meissner@linux.vnet.ibm.com>
++
++	* gcc.target/spu/ea: Delete __ea testsuite directory accidently
++	committed to 4.3 branch.
++
++2008-12-08  Janis Johnson  <janis187@us.ibm.com>
++
++	Backport from mainline:
++	2008-09-16  Jakub Jelinek  <jakub@redhat.com>
++
++	PR testsuite/36889
++	* lib/fortran-torture.exp (get-fortran-torture-options): Only
++	set test_tree_vectorize on i?86/x86_64 resp. sparc* if sse2 resp.
++	ultrasparc hw is available.
++
++2008-12-05  Janis Johnson  <janis187@us.ibm.com>
++
++	* lib/target-supports.exp (check_effective_target_hard_dfp): New.
++	* gcc.dg/dfp/convert-dfp-round.c: Skip for hard_dfp.
++	* gcc.dg/dfp/fe-binop.c: Ditto.
++	* gcc.dg/dfp/fe-convert-1.c: Ditto.
++
++	Backport from mainline:
++	2008-05-15  Janis Johnson  <janis187@us.ibm.com>
++
++	* lib/torture-options.exp: New support for torture options.
++	* lib/gfortran-dg.exp (gfortran-dg-runtest): Use new torture procs.
++	* lib/c-torture.exp: Define C_TORTURE_OPTIONS instead of
++	TORTURE_OPTIONS; don't define torture_with_loops and
++	torture_without_loops.
++	* lib/gcc-dg.exp: Define DG_TORTURE_OPTIONS instead of
++	TORTURE_OPTIONS; don't define torture_with_loops and
++	torture_without_loops.
++	(gcc-dg-runtest): Use new torture procs if no torture options defined.
++	* lib/fortran-torture.exp: Define FORTRAN_TORTURE_OPTIONS instead of
++	TORTURE_OPTIONS.
++	(fortran-torture-execute): Use torture_with_loops instead of
++	TORTURE_OPTIONS.
++	(fortran-torture): Ditto.
++	* lib/objc-torture.exp: Define OBJC_TORTURE_OPTIONS instead of
++	TORTURE_OPTIONS; don't define torture_with_loops and
++	torture_without_loops.
++	* gcc.c-torture/execute/execute.exp: Use new torture procs.
++	* gcc.c-torture/execute/builtins/builtins.exp: Ditto.
++	* gcc.c-torture/execute/ieee/ieee.exp: Ditto.
++	* gcc.c-torture/unsorted/unsorted.exp: Ditto.
++	* gfortran.fortran-torture/execute/execute.exp: Ditto.
++	* gfortran.fortran-torture/compile/compile.exp: Ditto.
++	* gcc.target/x86_64/abi/abi-x86_64.exp: Ditto.
++	* gcc.target/i386/math-torture/math-torture.exp: Define
++	MATH_TORTURE_OPTIONS, use new torture procs.
++	* gcc.dg/pch/pch.exp: Use new torture procs.
++	* gcc.dg/format/format.exp: Ditto.
++	* gcc.misc-tests/i386-prefetch.exp: Ditto.
++	* gcc.misc-tests/dectest.exp: Ditto.
++	* objc.dg/pch/pch.exp: Ditto.
++	* objc/execute/execute.exp: Ditto.
++	* objc/execute/exceptions/exceptions.exp: Ditto.
++	* objc/compile/compile.exp: Ditto.
++
++	Backport from mainline:
++	2008-05-27  Richard Sandiford  <rdsandiford@googlemail.com>
++
++	* lib/fortran-torture.exp (get-fortran-torture-options):
++	New function, replacing old FORTRAN_TORTURE_OPTIONS code.
++	* gfortran.fortran-torture/compile/compile.exp: Use
++	[get-fortran-torture-options] instead of $FORTRAN_TORTURE_OPTIONS.
++	* gfortran.fortran-torture/execute/execute.exp: Likewise.
++
++2008-12-05  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* gcc.dg/union-5.c: Run only on x86 and x86-64.
++
++2008-12-04  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* gcc.dg/union-5.c: New test.
++
++2008-12-04  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* gcc.dg/union-4.c: New test.
++
++2008-12-03  Janis Johnson  <janis187@us.ibm.com>
++
++	* gcc.dg/vect/pr33953.c: XFAIL dump scans for powerpc.
++
++2008-12-03  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* gcc.dg/torture/pr37868.c: Skip on the SPARC.
++
++2008-12-02  Janis Johnson  <janis187@us.ibm.com>
++
++	Backport from mainline:
++	2008-08-26  Janis Johnson  <janis187@us.ibm.com>
++
++	* gcc.dg/Wstrict-aliasing-bogus-ref-all-2.c: Ignore a warning.
++	* g++.dg/ext/altivec-3.C: Move AltiVec code out of main.
++
++	Backport from mainline:
++	2008-07-10 2008-07-10  Joseph Myers  <joseph@codesourcery.com>
++
++	PR middle-end/29056
++	* gcc.target/powerpc/ppc-negeq0-1.c: Use long instead of int.
++	Adjust shift and scan-assembler-not pattern to allow for 64-bit
++	case.
++
++	Backport from mainline:
++	2008-06-09  Joseph Myers  <joseph@codesourcery.com>
++
++	* gcc.dg/pr34856.c: Condition use of -maltivec on
++	powerpc_altivec_ok.  Use -w on other powerpc*-*-linux*.
++
++	Backport from mainline:
++	2008-05-20  Janis Johnson  <janis187@us.ibm.com>
++
++	* g++.dg/ext/vector14.C: Ignore a possible warning.
++
++	Backport from mainline:
++	2008-04-21  Steve Ellcey  <sje@cup.hp.com>
++
++	* gcc.dg/vect/pr33953.c:  XFAIL if vect_no_align.
++
++	Backport from mainline:
++	2008-04-04  Janis Johnson  <janis187@us.ibm.com>
++
++	* gcc.dg/var-expand3.c: Skip for powerpc-linux if not on AltiVec HW.
++
++	* gcc.dg/torture/builtin-modf-1.c: Use special options for
++	powerpc*-*-linux*.
++
++	Backport from mainline:
++	2008-04-04  Janis Johnson  <janis187@us.ibm.com>
++
++	* g++.dg/other/anon5.C: Don't depend on line number for error message.
++
++2008-12-02  Janis Johnson  <janis187@us.ibm.com>
++
++	Backport from mainline:
++	2008-11-26  Janis Johnson  <janis187@us.ibm.com>
++
++	PR testsuite/28870
++	* lib/timeout.exp: New.
++	* lib/timeout-dg.exp: New.
++	* lib/gcc-dg.exp: Include new timeout library files.
++	(dg-test): Unset timeout variables.
++	* lib/gcc.exp (gcc_target_compile): Set timeout value from new proc.
++	* lib/g++.exp (g++_target_compile): Ditto.
++	* lib/gfortran.exp (gfortran_target_compile): Ditto.
++	* lib/objc.exp (objc_target_compile): Ditto.
++	* lib/obj-c++.exp (obj-c++_target_compile): Ditto.
++	* lib/obj-c++.exp (obj-c++_target_compile): Ditto.
++	* lib/gnat.exp (gnat_target_compile): Ditto.
++
++2008-11-30  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* g++.dg/opt/reload3.C: New test.
++
++2008-11-24  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/34820
++	* gfortran.dg/alloc_comp_constructor_6.f90 : New test.
++	* gfortran.dg/alloc_comp_basics_1.f90 : Reduce expected refs to
++	'builtin_free' from 24 to 18.
++
++	PR fortran/34143
++	* gfortran.dg/alloc_comp_constructor_5.f90 : New test.
++
++	PR fortran/32795
++	* gfortran.dg/alloc_comp_constructor_4.f90 : New test.
++
++2008-11-29  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/37735
++	* gfortran.dg/alloc_comp_assign_7.f90: New test.
++
++2008-11-27  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/36526
++	* gfortran.dg/pure_formal_proc_2.f90: New test.
++
++2008-11-24  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/38119
++	* gfortran.dg/array_temporaries_3.f90: New test.
++
++2008-11-24  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/38033
++	* gfortran.dg/array_section_2.f90: New test.
++
++2008-11-24  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/37926
++	* gfortran.dg/dummy_procedure_3.f90: New test.
++
++2008-11-24  Mikael Morin  <mikael.morin@tele2.fr>
++
++	PR fortran/35681
++	* gfortran.dg/elemental_dependency_1.f90: Correct strings in test.
++
++2008-11-24  Steven G. Kargl  <kargls@comcast.net>
++
++	PR fortran/37792
++	* gfortran.dg/arithmetic_overflow_1.f90: New test.
++
++2008-11-24  Mikael Morin  <mikael.morin@tele2.fr>
++
++	PR fortran/35681
++	* gfortran.dg/elemental_dependency_1.f90: Really commit it.
++
++2008-11-24  Mikael Morin  <mikael.morin@tele2.fr>
++
++	PR fortran/35681
++	* gfortran.dg/elemental_dependency_1.f90: New test.
++
++2008-11-23  Thomas Koenig  <tkoenig@gcc.gnu.org>
++
++	PR libfortran/38135
++	Backport from trunk.
++	* gfortran.dg/reshape_pad_1.f90:  New test case.
++
++2008-11-21  Ben Elliston  <bje@au.ibm.com>
++
++	* gcc.c-torture/compile/sync-3.c: Remove dg-message directive.
++
++2008-11-20  Richard Guenther  <rguenther@suse.de>
++
++	PR tree-optimization/37868
++	* gcc.dg/torture/pr37868.c: New testcase.
++	* gcc.c-torture/execute/pr38048-1.c: Likewise.
++	* gcc.c-torture/execute/pr38048-2.c: Likewise.
++
++	Backport from mainline:
++	2008-07-07  Richard Guenther  <rguenther@suse.de>
++
++	* gcc.dg/torture/pta-ptrarith-1.c: New testcase.
++	* gcc.dg/torture/pta-ptrarith-2.c: Likewise.
++
++2008-11-19  Dodji Seketeli  <dodji@redhat.com>
++
++	PR c++/37142
++	* g++.dg/template/crash79.C: New test.
++
++2008-11-19  Dodji Seketeli  <dodji@redhat.com>
++
++	PR c++/35405
++	* g++.dg/template/crash84.C: New test.
++
++2008-11-19  Jason Merrill  <jason@redhat.com>
++
++	PR c++/37563
++	* g++.dg/template/pseudodtor5.C: New test.
++
++2008-11-19  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/38171
++	* gfortran.dg/module_equivalence_6.f90: New test.
++
++2008-11-18  Ben Elliston  <bje@rego11.ozlabs.ibm.com>
++
++	Backport from mainline:
++	2008-09-28  Andrew Pinski  <andrew_pinski@playstation.sony.com>
++
++	PR target/37640
++	* gcc.c-torture/compile/sync-3.c: New testcase to check that
++	addresses of non zero offset works.
++
++2008-11-14  Jason Merrill  <jason@redhat.com>
++
++	PR c++/38030
++	* g++.dg/template/lookup8.C: New test.
++
++2008-11-14  Dodji Seketeli  <dodji@redhat.com>
++
++	PR debug/27574
++	* g++.dg/debug/dwarf2/local-var-in-contructor.C: New test.
++
++2008-11-14  Paul Thomas  <pault@gcc.gnu.org>
++
++        PR fortran/37836
++        * gfortran.dg/minmaxval_1.f90: New test.
++
++2008-11-13  Jason Merrill  <jason@redhat.com>
++
++	PR c++/37932
++	* g++.dg/conversion/bitfield11.C: New test.
++
++2008-11-13  Uros Bizjak  <ubizjak@gmail.com>
++
++	Backport from mainline:
++	2008-06-06  Uros Bizjak <ubizjak@gmail.com>
++
++	PR rtl-optimization/36438
++	* gcc.target/i386/pr36438.c
++
++2008-11-12  Jason Merrill  <jason@redhat.com>
++
++	PR c++/38007
++	* g++.dg/conversion/bitfield10.C: New test.
++	* g++.old-deja/g++.mike/enum1.C: Expect warn about assignment.
++	* g++.dg/expr/bitfield9.C: Pass -Wno-overflow.
++
++2008-11-12  Andreas Krebbel  <krebbel1@de.ibm.com>
++
++	* gcc.target/s390/frame-addr1.c: New testcase.
++	* gcc.target/s390/frame-addr2.c: New testcase.
++	* gcc.target/s390/return-addr1.c: New testcase.
++	* gcc.target/s390/return-addr2.c: New testcase.
++
++2008-11-10  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* g++.dg/other/anon5.C: Skip on Solaris.
++
++2008-11-10  Uros Bizjak  <ubizjak@gmail.com>
++
++	Backport from mainline:
++	2008-11-10  Ralph Loader  <suckfish@ihug.co.nz>
++
++	PR middle-end/37807
++	PR middle-end/37809
++	* gcc.target/i386/mmx-8.c: New test.
++
++2008-11-09  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
++
++	Backport from mainline:
++	2008-04-22  Steve Ellcey  <sje@cup.hp.com>
++
++	* gcc.dg/struct/wo_prof_global_var.c: Initialize array.
++	* gcc.dg/struct/wo_prof_malloc_size_var.c: Ditto.
++	* gcc.dg/struct/w_prof_local_var.c: Ditto.
++	* gcc.dg/struct/w_prof_global_var.c: Ditto.
++	* gcc.dg/struct/wo_prof_local_var.c: Ditto.
++
++2008-11-08  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/37597
++	* gfortran.dg/host_assoc_call_5.f90: New test.
++
++2008-11-08  Mikael Morin  <mikael.morin@tele2.fr>
++
++	PR fortran/35820
++	* gfortran.dg/nested_forall_1.f: New test.
++
++2008-11-08  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/37445
++	* gfortran.dg/host_assoc_call_3.f90: New test.
++	* gfortran.dg/host_assoc_call_4.f90: New test.
++	* gfortran.dg/host_assoc_function_4.f90: New test.
++
++2008-11-06  Richard Guenther  <rguenther@suse.de>
++
++	Backport from mainline:
++	2008-09-13  Raksit Ashok <raksit@google.com>
++
++	PR rtl-optimization/37489
++	* g++.dg/opt/cse3.C: New testcase.
++	* gcc.dg/c-torture/pr37969.c: New testcase.
++
++2008-11-05  Jakub Jelinek  <jakub@redhat.com>
++
++	PR c/37924
++	* gcc.c-torture/execute/pr37924.c: New test.
++
++	PR tree-optimization/37879
++	* gcc.dg/pr37879.c: New test.
++
++	PR middle-end/37858
++	* gcc.dg/pr37858.c: New test.
++
++	PR middle-end/37870
++	* gcc.target/i386/pr37870.c: New test.
++
++2008-11-05  Hans-Peter Nilsson  <hp@axis.com>
++
++	PR target/38016
++	* gcc.c-torture/execute/ieee/pr38016.c,
++	gcc.c-torture/execute/ieee/pr38016.c: New test.
++
++2008-11-03  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* gnat.dg/array5.adb New test.
++
++2008-11-01  Hans-Peter Nilsson  <hp@axis.com>
++
++	PR target/37939
++	* gcc.target/cris/biap.c: New test.
++
++2008-11-01  Mikael Morin  <mikael.morin@tele2.fr>
++
++	PR fortran/37903
++	* gfortran.dg/vector_subscript_4.f90: New test.
++
++2008-11-01  Mikael Morin  <mikael.morin@tele2.fr>
++
++	PR fortran/37749
++	* gfortran.dg/vector_subscript__5.f90: New test.
++
++2008-10-28  Jerry DeLisle  <jvdelisle@gcc.gnu.org
++
++	PR libfortran/37707
++	* gfortran.dg/namelist_18.f90: Revise.
++	* gfortran.dg/namelist_55.f90: New test.
++	* gfortran.dg/namelist_56.f90: New test.
++
++2008-10-22  Jakub Jelinek  <jakub@redhat.com>
++
++	PR middle-end/37882
++	* gcc.c-torture/execute/pr37882.c: New test.
++
++2008-10-21  Richard Guenther  <rguenther@suse.de>
++
++	* gcc.dg/tree-ssa/alias-19.c: New testcase.
++
++2008-10-19  Jerry DeLisle  <jvdelisle@gcc.gnu.org
++
++	PR libfortran/37707
++	* gfortran.dg/namelist_54.f90: New test.
++
++2008-10-19  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/37723
++	* gfortran.dg/dependency_22.f90: New test.
++
++2008-10-19  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/37787
++	* gfortran.dg/module_equivalence_5.f90: New test.
++
++2008-10-17  Andrew MacLeod  <amacleod@redhat.com>
++
++	PR tree-optimization/37102
++	* gcc.c-torture/execute/pr37102.c: New Test.
++
++2008-10-11  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/37794
++	* gfortran.dg/used_types_24.f90: New test.
++
++2008-10-11  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/35680
++	* gfortran.dg/transfer_array_intrinsic_5.f90: New test.
++
++2008-10-08  Simon Martin  <simartin@users.sourceforge.net>
++
++	PR c/35437
++	* gcc.dg/struct-parse-2.c: New test.
++	* g++.dg/parse/struct-4.C: New test.
++
++2008-10-07  H.J. Lu  <hongjiu.lu@intel.com>
++
++	Backport from mainline:
++	2008-10-07  H.J. Lu  <hongjiu.lu@intel.com>
++
++	PR middle-end/37731
++	* gcc.dg/torture/pr37731-1.c: New.
++	* gcc.dg/torture/pr37731-2.c: Likewise.
++
++2008-10-07  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* gnat.dg/loop_optimization4.adb: New test.
++	* gnat.dg/loop_optimization4_pkg.ad[sb]: New helper.
++
++2008-10-06  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* gnat.dg/unchecked_convert2.adb: New test.
++
++2008-10-05  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/37706
++	* gfortran.dg/module_equivalence_4.f90: New test.
++
++2008-09-30  Simon Martin  <simartin@users.sourceforge.net>
++
++	PR c++/37555
++	* g++.dg/parse/error32.C: New test.
++
++2008-09-28  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* gnat.dg/conv_decimal.adb: New test.
++
++2008-09-26  Tobias Burnus  <burnus@net-b.de>
++
++	PR fortran/37580
++	* gfortran.dg/pointer_assign_5.f90: New test.
++	* gfortran.dg/pointer_assign_6.f90: New test.
++
++2008-09-26  Tobias Burnus  <burnus@net-b.de>
++
++	PR fortran/37504
++	* gfortran.dg/protected_7.f90: New test.
++
++2008-09-25  Jakub Jelinek  <jakub@redhat.com>
++
++	PR c/37645
++	* gcc.dg/pr37645.c: New test.
++
++2008-09-25  Tobias Burnus  <burnus@net-b.de>
++
++	PR fortran/37626
++	* gfortran.dg/allocatable_function_4.f90: New test.
++
++2008-09-24  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/35945
++	* gfortran.dg/host_assoc_types_2.f90: New test.
++
++	PR fortran/36700
++	* gfortran.dg/host_assoc_call_2.f90: New test.
++
++2008-09-24  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/37583
++	* gfortran.dg/entry_18.f90: New test.
++
++2008-09-23  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* gcc.dg/pragma-init-fini.c: Use dg-warning in lieu of dg-error.
++	* gcc.dg/pragma-align-2.c: Likewise.
++	* gcc.dg/format/cmn-err-1.c: Likewise.
++
++2008-09-23  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/37274
++	* gfortran.dg/used_types_22.f90: New test.
++	* gfortran.dg/used_types_23.f90: New test.
++
++	PR fortran/36374
++	* gfortran.dg/generic_17.f90: New test.
++	* gfortran.dg/ambiguous_specific_2.f90: New test.
++	* gfortran.dg/generic_actual_arg.f90: Add test for case that is
++	not ambiguous.
++
++	PR fortran/36454
++	* gfortran.dg/access_spec_3.f90: New test.
++
++2008-09-20  Richard Guenther  <rguenther@suse.de>
++
++	PR middle-end/37236
++	* gfortran.fortran-torture/compile/pr37236.f: New testcase.
++
++2008-09-19  Richard Guenther  <rguenther@suse.de>
++
++	PR tree-optimization/36343
++	* gcc.c-torture/execute/pr36343.c: New testcase.
++
++2008-09-19  Uros Bizjak  <ubizjak@gmail.com>
++
++	Backport from mainline:
++	2008-09-18  Uros Bizjak  <ubizjak@gmail.com>
++
++	PR rtl-optimization/37544
++	* gcc.dg/pr37544.c: New test.
++
++2008-09-18  Janis Johnson  <janis187@us.ibm.com>
++
++	Backport from mainline:
++	2008-04-08  Janis Johnson  <janis187@us.ibm.com>
++
++	PR target/35620
++	* gcc.dg/dfp/pr35620.c: New test.
++	* gcc.dg/dfp/func-pointer.c: New test.
++	* gcc.dg/dfp/func-deref.c: New test.
++
++	Backport from mainline:
++	2008-04-03  Janis Johnson  <janis187@us.ibm.com>
++
++	PR c/35712
++	* gcc.dg/dfp/constants-zero.c: New test.
++
++2008-09-13  Daniel Kraft  <d@domob.eu>
++
++	PR fortran/35770
++	* gfortran.dg/implicit_12.f90: New test.
++
++2008-09-11  Daniel Kraft  <d@domob.eu>
++
++	PR fortran/36214
++	* gfortran.dg/boz_9.f90: Corrected test.
++	* gfortran.dg/boz_11.f90: New test.
++	* gfortran.dg/boz_12.f90: New test.
++
++2008-09-08  Daniel Kraft  <d@domob.eu>
++
++	PR fortran/37199
++	* gfortran.dg/array_function_2.f90: New test.
++
++2008-09-09  Jakub Jelinek  <jakub@redhat.com>
++
++	PR c++/37389
++	* g++.dg/parse/enum4.C: New test.
++
++2008-09-05  Daniel Kraft  <d@domob.eu>
++
++	PR fortran/35837
++	* gfortran.dg/save_3.f90: New test.
++
++2008-09-04  Daniel Kraft  <d@domob.eu>
++
++	PR fortran/37099
++	* gfortran.dg/string_compare_1.f90: New text.
++	* gfortran.dg/string_compare_2.f90: New text.
++	* gfortran.dg/string_compare_3.f90: New text.
++
++2008-09-07  Richard Guenther  <rguenther@suse.de>
++	    Ira Rosen  <irar@il.ibm.com>
++
++	PR tree-optimization/36630
++	* gcc.dg/vect/pr36630.c: New test.
++
++2008-09-04  Ian Lance Taylor  <iant@google.com>
++
++	* g++.dg/init/const7.C: New test.
++
++2008-09-03  Jakub Jelinek  <jakub@redhat.com>
++
++	PR c++/37348
++	* g++.dg/parse/crash45.C: New test.
++
++2008-08-30  Daniel Kraft  <d@domob.eu>
++
++	PR fortran/37193
++	* gfortran.dg/use_rename_4.f90: New test.
++	* gfortran.dg/use_rename_5.f90: New test.
++
++2008-06-24  Paul Thomas  <pault@gcc.gnu.org>
++
++	PR fortran/36371
++	* gfortran.dg/data_array_5.f90: New test.
++
++2008-09-02  Jakub Jelinek  <jakub@redhat.com>
++
++	PR target/36332
++	* gcc.c-torture/execute/ieee/pr36332.c: New test.
++
++2008-09-01  Jakub Jelinek  <jakub@redhat.com>
++
++	PR middle-end/36449
++	* g++.dg/opt/pr36449.C: New test.
++
++2008-08-31  Jakub Jelinek  <jakub@redhat.com>
++
++	PR target/37168
++	* gcc.target/powerpc/pr37168.c: New test.
++
++2008-08-29  Jakub Jelinek  <jakub@redhat.com>
++
++	PR c/37261
++	* gcc.dg/pr37261.c: New test.
++
++2008-08-28  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
++
++	* gcc.target/powerpc/altivec-volatile.c: New test.
++
++2008-08-28  Dodji Seketeli  <dodji@redhat.com>
++
++	PR c++/36741
++	* g++.dg/other/new-size-type.C: New test.
++
++2008-08-28  Richard Guenther  <rguenther@suse.de>
++
++	PR middle-end/36548
++	PR middle-end/37125
++	* gcc.c-torture/execute/pr37125.c: New testcase.
++
++2008-08-28  Richard Guenther  <rguenther@suse.de>
++
++	PR middle-end/36817
++	* gcc.c-torture/compile/pr36817.c: New testcase.
++
++2008-08-28  Uros Bizjak  <ubizjak@gmail.com>
++
++	PR target/37184
++	* gcc.target/i386/pr37184.c: New test.
++
++	PR target/37191
++	* gcc.target/i386/pr37191.c: New test.
++
++	PR target/37197
++	* gcc.target/i386/pr37197.c: New test.
++
+ 2008-08-27  Release Manager
+ 
+ 	* GCC 4.3.2 released.
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/g++.dg/conversion/bitfield10.C gcc-4.3.2/gcc/testsuite/g++.dg/conversion/bitfield10.C
+--- gcc-4.3.2.orig/gcc/testsuite/g++.dg/conversion/bitfield10.C	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/g++.dg/conversion/bitfield10.C	2008-11-12 14:08:01.000000000 -0800
+@@ -0,0 +1,24 @@
++// PR c++/38007
++// We need to use the conversion function to the declared type of a bitfield,
++// not the lowered bitfield type.
++// { dg-do link }
++
++struct A
++{
++  operator unsigned int() { return 42; }
++  operator unsigned char();
++};
++
++struct B
++{
++  unsigned int b : 8;
++};
++
++int
++main ()
++{
++  A u;
++  unsigned int v = u;
++  B w;
++  w.b = u;
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/g++.dg/conversion/bitfield11.C gcc-4.3.2/gcc/testsuite/g++.dg/conversion/bitfield11.C
+--- gcc-4.3.2.orig/gcc/testsuite/g++.dg/conversion/bitfield11.C	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/g++.dg/conversion/bitfield11.C	2008-11-13 20:16:07.000000000 -0800
+@@ -0,0 +1,8 @@
++// Make sure that digest_init converts to the declared type of the
++// bitfield, not just the lowered type.
++
++enum E { EA, EB };
++
++struct A { E e: 8; };
++
++A a = { 0 };			// { dg-error "invalid conversion" }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/g++.dg/debug/dwarf2/local-var-in-contructor.C gcc-4.3.2/gcc/testsuite/g++.dg/debug/dwarf2/local-var-in-contructor.C
+--- gcc-4.3.2.orig/gcc/testsuite/g++.dg/debug/dwarf2/local-var-in-contructor.C	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/g++.dg/debug/dwarf2/local-var-in-contructor.C	2008-11-14 05:26:59.000000000 -0800
+@@ -0,0 +1,30 @@
++// Contributed by Dodji Seketeli <dodji@redhat.com>
++// Origin PR27574
++// { dg-do compile }
++// { dg-options "-O0 -g" }
++// { dg-final { scan-assembler "problem" } }
++
++void f (int *)
++{
++}
++
++class A
++{
++public:
++ A(int i);
++};
++
++A::A(int i)
++{
++ int *problem = new int(i);
++ f (problem);
++}
++
++int
++main (void)
++{
++  A a (0);
++
++  return 0;
++}
++
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/g++.dg/expr/bitfield9.C gcc-4.3.2/gcc/testsuite/g++.dg/expr/bitfield9.C
+--- gcc-4.3.2.orig/gcc/testsuite/g++.dg/expr/bitfield9.C	2007-07-27 10:13:29.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/g++.dg/expr/bitfield9.C	2008-11-12 14:08:01.000000000 -0800
+@@ -1,5 +1,6 @@
+ // PR c++/32346
+ // { dg-do run }
++// { dg-options "-Wno-overflow" }
+ 
+ extern "C" void abort();
+ 
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/g++.dg/ext/altivec-3.C gcc-4.3.2/gcc/testsuite/g++.dg/ext/altivec-3.C
+--- gcc-4.3.2.orig/gcc/testsuite/g++.dg/ext/altivec-3.C	2006-06-20 16:33:58.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/g++.dg/ext/altivec-3.C	2008-12-02 14:11:55.000000000 -0800
+@@ -120,16 +120,19 @@
+     CHECK_INVARIANT (vec_all_eq (vxi.v, vx_g.v));
+ }
+ 
+-int main(void)
++void main1(void)
+ {
+     CHECK_INVARIANT (sizeof(struct foo) == 8 && sizeof(struct vfoo) == 48);
+ 
+-    altivec_check();
+-
+     bar(i_1, x_g, (short)i_2, (float)d_2, ld_1, (char)i_1, d_3);
+     baz(i_1, v_g, i_1, vx_g, i_1, v2_g, i_1, vx2_g); 
+     quux(i_1, v_g, v_g);
+     baz2(i_1, vx_g);
+-    
++}
++
++int main(void)
++{
++    altivec_check();
++    main1();
+     return 0;
+ }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/g++.dg/ext/vector14.C gcc-4.3.2/gcc/testsuite/g++.dg/ext/vector14.C
+--- gcc-4.3.2.orig/gcc/testsuite/g++.dg/ext/vector14.C	2008-04-28 05:17:27.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/g++.dg/ext/vector14.C	2008-12-02 14:11:55.000000000 -0800
+@@ -1,6 +1,8 @@
+ // PR c++/35758
+ // { dg-do compile }
+ // { dg-options "-msse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
++// Ignore warning on some powerpc-linux configurations.
++// { dg-prune-output "non-standard ABI extension" }
+ 
+ #define vector __attribute__((vector_size(16)))
+ 
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/g++.dg/init/const7.C gcc-4.3.2/gcc/testsuite/g++.dg/init/const7.C
+--- gcc-4.3.2.orig/gcc/testsuite/g++.dg/init/const7.C	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/g++.dg/init/const7.C	2008-09-04 22:35:03.000000000 -0700
+@@ -0,0 +1,13 @@
++// { dg-do compile }
++// { dg-options "-fdump-tree-gimple" }
++
++struct s { int x, y; };
++short offsets[1] = {
++  ((char*) &(((struct s*)16)->y) - (char *)16),
++};
++
++// This ensures that we get a dump whether or not the bug is present.
++void fn() { }
++
++// { dg-final { scan-tree-dump-not "initialization"  "gimple" } }
++// { dg-final { cleanup-tree-dump "gimple" } }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/g++.dg/opt/cse3.C gcc-4.3.2/gcc/testsuite/g++.dg/opt/cse3.C
+--- gcc-4.3.2.orig/gcc/testsuite/g++.dg/opt/cse3.C	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/g++.dg/opt/cse3.C	2008-11-06 07:05:44.000000000 -0800
+@@ -0,0 +1,48 @@
++// This testcase resulted in invalid code generation on x86_64 targets
++// due to a bug in fold_rtx. For a "true" value, fold_rtx represented it
++// as const_true_rtx in floating-point mode, if the FLOAT_STORE_FLAG_VALUE
++// macro is not defined.
++
++// { dg-do run }
++// { dg-options "-O1 -fno-guess-branch-probability -fcse-follow-jumps -fgcse -frerun-cse-after-loop" }
++
++class StatVal {
++
++ public:
++
++  StatVal(double ev, double va)
++    : m(ev),
++      v(va) {}
++
++  StatVal(const StatVal& other)
++    : m(other.m),
++      v(other.v) {}
++
++  StatVal& operator*=(const StatVal& other) {
++    double A = m == 0 ? 1.0 : v / (m * m);
++    double B = other.m == 0 ? 1.0 : other.v / (other.m * other.m);
++    m = m * other.m;
++    v = m * m * (A + B);
++    return *this;
++  }
++
++  double m;
++  double v;
++};
++
++extern "C" void abort (void);
++
++const StatVal two_dot_three(2, 0.3);
++
++int main(int argc, char **argv) {
++
++  StatVal product3(two_dot_three);
++
++  product3 *= two_dot_three;
++
++  if (product3.v > 2.5)
++  {
++    abort();
++  }
++  return 0;
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/g++.dg/opt/pr36449.C gcc-4.3.2/gcc/testsuite/g++.dg/opt/pr36449.C
+--- gcc-4.3.2.orig/gcc/testsuite/g++.dg/opt/pr36449.C	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/g++.dg/opt/pr36449.C	2008-09-01 04:32:18.000000000 -0700
+@@ -0,0 +1,70 @@
++// PR middle-end/36449
++// { dg-do run }
++// { dg-options "-O3" }
++
++extern "C" void exit (int);
++extern "C" void abort ();
++
++struct R
++{
++  short a;
++  short b;
++};
++
++struct S
++{
++  R e;
++  long f;
++  long g;
++};
++
++struct T
++{
++  short c;
++  short d;
++};
++
++struct U
++{
++  long h[0x1ffffff + 1];
++  T i;
++};
++
++U *j;
++
++void __attribute__((noinline))
++bar ()
++{
++  exit (0);
++}
++
++void __attribute__((noinline))
++foo ()
++{
++  S s;
++
++  s.e.a = 36;
++  s.e.b = 38;
++  if (s.e.a == j->i.c && s.e.b == j->i.d)
++    bar ();
++}
++
++int
++main ()
++{
++  try
++    {
++      j = new U;
++    }
++  catch (...)
++    {
++      return 0;
++    }
++  j->i.c = 36;
++  j->i.d = 38;
++  j->h[0] = 1;
++  j->h[1] = 2;
++  j->h[2] = 3;
++  foo ();
++  abort ();
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/g++.dg/opt/reload3.C gcc-4.3.2/gcc/testsuite/g++.dg/opt/reload3.C
+--- gcc-4.3.2.orig/gcc/testsuite/g++.dg/opt/reload3.C	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/g++.dg/opt/reload3.C	2008-11-30 11:21:10.000000000 -0800
+@@ -0,0 +1,39 @@
++// PR target/38287
++// { dg-do run }
++// { dg-options "-O2 -mcpu=v8 -fPIC" { target { { sparc*-*-* } && { ilp32 && fpic } } } }
++
++#include <cstdlib>
++
++class QTime
++{
++public:
++    explicit QTime(int ms = 0) : ds(ms) {}
++    static QTime currentTime() { return QTime(); }
++    QTime addMSecs(int ms) const;
++    int msecs() const { return ds; }
++private:
++    unsigned ds;
++};
++
++static const unsigned MSECS_PER_DAY = 86400000;
++
++QTime QTime::addMSecs(int ms) const
++{
++    QTime t;
++    if ( ms < 0 ) {
++        // % not well-defined for -ve, but / is.
++        int negdays = (MSECS_PER_DAY-ms) / MSECS_PER_DAY;
++        t.ds = ((int)ds + ms + negdays*MSECS_PER_DAY)
++                % MSECS_PER_DAY;
++    } else {
++        t.ds = ((int)ds + ms) % MSECS_PER_DAY;
++    }
++    return t;
++}
++
++int main()
++{
++  if (QTime(1).addMSecs(1).msecs() != 2)
++    abort ();
++  return 0;
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/g++.dg/other/anon5.C gcc-4.3.2/gcc/testsuite/g++.dg/other/anon5.C
+--- gcc-4.3.2.orig/gcc/testsuite/g++.dg/other/anon5.C	2008-03-30 16:23:43.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/g++.dg/other/anon5.C	2008-12-02 14:11:55.000000000 -0800
+@@ -4,7 +4,7 @@
+ // problem is that mips*-elf tests run from KSEG0 (which is in the upper
+ // half of the address range), and the linker compares sign-extended
+ // addresses from .debug_aranges with unextended addresses.
+-// { dg-do link { target { ! { hppa*-*-hpux* mips*-*-elf* } } } }
++// { dg-do link { target { ! { hppa*-*-hpux* *-*-solaris2.* mips*-*-elf* } } } }
+ // { dg-options "-g" }
+ 
+ namespace {
+@@ -16,7 +16,9 @@
+ 
+ const bool &f()
+ {
+-  return c::t;			// { dg-error "undefined" }
++  return c::t;	// { dg-error "undefined" "undefined" { target *-*-* } 0 }
++		// Some targets report the error for the previous line, others
++		// don't give line number information for it, so use line 0.
+ }
+ 
+ int main(void)
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/g++.dg/other/new-size-type.C gcc-4.3.2/gcc/testsuite/g++.dg/other/new-size-type.C
+--- gcc-4.3.2.orig/gcc/testsuite/g++.dg/other/new-size-type.C	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/g++.dg/other/new-size-type.C	2008-08-28 07:49:25.000000000 -0700
+@@ -0,0 +1,10 @@
++// Contributed by Dodji Seketeli <dodji@redhat.com>
++// Origin: PR c++/36741
++
++#include <stddef.h>
++const char*
++foo()
++{
++    return new char[~static_cast<size_t>(0)];// { dg-bogus "large" }
++}
++
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/g++.dg/parse/crash45.C gcc-4.3.2/gcc/testsuite/g++.dg/parse/crash45.C
+--- gcc-4.3.2.orig/gcc/testsuite/g++.dg/parse/crash45.C	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/g++.dg/parse/crash45.C	2008-09-03 13:38:38.000000000 -0700
+@@ -0,0 +1,7 @@
++// PR c++/37348
++// { dg-do compile }
++
++struct A
++{
++  template <class> int f (B);	// { dg-error "was not declared in this scope|cannot be a member template" }
++};
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/g++.dg/parse/enum4.C gcc-4.3.2/gcc/testsuite/g++.dg/parse/enum4.C
+--- gcc-4.3.2.orig/gcc/testsuite/g++.dg/parse/enum4.C	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/g++.dg/parse/enum4.C	2008-09-09 13:23:08.000000000 -0700
+@@ -0,0 +1,10 @@
++// PR c++/37389
++// { dg-do compile }
++// { dg-options "-std=gnu++98" }
++
++enum
++{
++  A = 9223372036854775807ULL * 2 + 1,
++  B = B0,	// { dg-error "was not declared|overflow" }
++  C = C0	// { dg-error "was not declared" }
++};
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/g++.dg/parse/error32.C gcc-4.3.2/gcc/testsuite/g++.dg/parse/error32.C
+--- gcc-4.3.2.orig/gcc/testsuite/g++.dg/parse/error32.C	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/g++.dg/parse/error32.C	2008-09-30 12:56:13.000000000 -0700
+@@ -0,0 +1,12 @@
++/* PR c++/37555 */
++/* { dg-do "compile" } */
++
++struct A {};
++
++typedef void (A::T)(); /* { dg-error "typedef name may not be a nested-name-specifier" } */
++
++void foo()
++{
++  T t;
++  t; /* { dg-error "was not declared" } */
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/g++.dg/parse/struct-4.C gcc-4.3.2/gcc/testsuite/g++.dg/parse/struct-4.C
+--- gcc-4.3.2.orig/gcc/testsuite/g++.dg/parse/struct-4.C	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/g++.dg/parse/struct-4.C	2008-10-07 21:17:27.000000000 -0700
+@@ -0,0 +1,13 @@
++/* PR c/35437 */
++/* { dg-do "compile" } */
++
++struct A
++{
++  int i;
++  struct A a; /* { dg-error "has incomplete type" } */
++};
++
++void foo()
++{
++  struct A b = { 0 };
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/g++.dg/template/crash79.C gcc-4.3.2/gcc/testsuite/g++.dg/template/crash79.C
+--- gcc-4.3.2.orig/gcc/testsuite/g++.dg/template/crash79.C	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/g++.dg/template/crash79.C	2008-11-19 16:05:04.000000000 -0800
+@@ -0,0 +1,16 @@
++// Contributed by Dodji Seketeli <dodji@redhat.com>
++// Origin: PR c++/37142
++// { dg-do compile }
++
++template<typename T, const T a, template <typename U, U u> class W> struct A {};
++
++template<typename T, const T t> struct B {};
++
++int
++main ()
++{
++  A<long, 0, B> a;
++  return 0;
++}
++
++
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/g++.dg/template/crash84.C gcc-4.3.2/gcc/testsuite/g++.dg/template/crash84.C
+--- gcc-4.3.2.orig/gcc/testsuite/g++.dg/template/crash84.C	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/g++.dg/template/crash84.C	2008-11-19 14:36:31.000000000 -0800
+@@ -0,0 +1,19 @@
++// Contributed by Dodji Seketeli <dodji@redhat.com>
++// Origin PR c++/35405
++// { dg-do compile }
++
++template<typename T> struct a
++{
++    template <template <typename> class C, typename X, C<X>* =0>
++    struct b // { dg-error "class C' is not a template|is not a valid type" }
++    {
++    };
++};
++
++void
++foo ()
++{
++    a<int> v; // { dg-message "instantiated from here" }
++}
++
++
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/g++.dg/template/lookup8.C gcc-4.3.2/gcc/testsuite/g++.dg/template/lookup8.C
+--- gcc-4.3.2.orig/gcc/testsuite/g++.dg/template/lookup8.C	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/g++.dg/template/lookup8.C	2008-11-14 14:01:12.000000000 -0800
+@@ -0,0 +1,19 @@
++// PR c++/38030
++// The call to f should be resolved at template definition time.
++// { dg-do link }
++
++struct B { };
++struct D : public B { };
++D d;
++void f (B &) { }
++template < class T >
++void g ()
++{
++  return f (d);
++}
++void f (D &);
++int main ()
++{
++  g<int> ();
++  return 0;
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/g++.dg/template/pseudodtor5.C gcc-4.3.2/gcc/testsuite/g++.dg/template/pseudodtor5.C
+--- gcc-4.3.2.orig/gcc/testsuite/g++.dg/template/pseudodtor5.C	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/g++.dg/template/pseudodtor5.C	2008-11-19 13:00:23.000000000 -0800
+@@ -0,0 +1,23 @@
++// PR c++/37563
++
++struct A {};
++
++template<int> struct Traits
++{
++  typedef void X;
++};
++
++template<> struct Traits<0>
++{
++  typedef A X;
++};
++
++template<int N> struct B
++{
++  typedef typename Traits<N>::X Y;
++
++  void foo(Y y)
++  {
++    y.Y::A::~A();
++  }
++};
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/g++.dg/torture/pr38565.C gcc-4.3.2/gcc/testsuite/g++.dg/torture/pr38565.C
+--- gcc-4.3.2.orig/gcc/testsuite/g++.dg/torture/pr38565.C	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/g++.dg/torture/pr38565.C	2008-12-18 13:55:31.000000000 -0800
+@@ -0,0 +1,9 @@
++// { dg-do compile }
++#define vector __attribute__((vector_size(16) ))
++vector unsigned int f(int a)
++{
++  vector unsigned int mask = a ? (vector unsigned int){ 0x80000000, 0x80000000,
++0x80000000, 0x80000000 } : (vector unsigned int){0};
++  return mask;
++}
++
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/g++.old-deja/g++.mike/enum1.C gcc-4.3.2/gcc/testsuite/g++.old-deja/g++.mike/enum1.C
+--- gcc-4.3.2.orig/gcc/testsuite/g++.old-deja/g++.mike/enum1.C	2003-04-30 19:02:59.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/g++.old-deja/g++.mike/enum1.C	2008-11-12 14:08:01.000000000 -0800
+@@ -8,4 +8,4 @@
+   void setBTK();
+ };
+ 
+-void Type::setBTK() { kind = DTK; }
++void Type::setBTK() { kind = DTK; } // { dg-warning "truncate" }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/compile/complex-6.c gcc-4.3.2/gcc/testsuite/gcc.c-torture/compile/complex-6.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/compile/complex-6.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.c-torture/compile/complex-6.c	2008-10-01 07:30:37.000000000 -0700
+@@ -0,0 +1,17 @@
++/* PR tree-opt/35737 */
++
++long buf[10];
++
++int foo()
++{
++  __complex__ int i = 0;
++
++  if (__builtin_setjmp(buf))
++  {
++    i = 1;
++    bar();
++  }
++
++  return i == 0;
++}
++
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/compile/pr36817.c gcc-4.3.2/gcc/testsuite/gcc.c-torture/compile/pr36817.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/compile/pr36817.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.c-torture/compile/pr36817.c	2008-08-28 07:15:49.000000000 -0700
+@@ -0,0 +1,10 @@
++void xxx()
++{
++  unsigned i;
++  unsigned *p=0;
++  for(i=0; i<4; ++i)
++    *p++=0;
++  for(i=0; i<4; ++i)
++    *p++=0;
++}
++
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/compile/sync-3.c gcc-4.3.2/gcc/testsuite/gcc.c-torture/compile/sync-3.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/compile/sync-3.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.c-torture/compile/sync-3.c	2008-11-20 18:06:22.000000000 -0800
+@@ -0,0 +1,185 @@
++/* Validate that each of the __sync builtins compiles.  This won't 
++   necessarily link, since the target might not support the builtin,
++   so this may result in external library calls.  */
++
++void test_op_ignore (void)
++{
++signed char sc[2];
++unsigned char uc[2];
++signed short ss[2];
++unsigned short us[2];
++signed int si[2];
++unsigned int ui[2];
++signed long sl[2];
++unsigned long ul[2];
++signed long long sll[2];
++unsigned long long ull[2];
++  (void) __sync_fetch_and_add (&sc[1], -1);
++  (void) __sync_fetch_and_add (&uc[1], -1);
++  (void) __sync_fetch_and_add (&ss[1], -1);
++  (void) __sync_fetch_and_add (&us[1], -1);
++  (void) __sync_fetch_and_add (&si[1], -1);
++  (void) __sync_fetch_and_add (&ui[1], -1);
++  (void) __sync_fetch_and_add (&sl[1], -1);
++  (void) __sync_fetch_and_add (&ul[1], -1);
++  (void) __sync_fetch_and_add (&sll[1], -1);
++  (void) __sync_fetch_and_add (&ull[1], -1);
++
++  (void) __sync_fetch_and_sub (&sc[1], -1);
++  (void) __sync_fetch_and_sub (&uc[1], -1);
++  (void) __sync_fetch_and_sub (&ss[1], -1);
++  (void) __sync_fetch_and_sub (&us[1], -1);
++  (void) __sync_fetch_and_sub (&si[1], -1);
++  (void) __sync_fetch_and_sub (&ui[1], -1);
++  (void) __sync_fetch_and_sub (&sl[1], -1);
++  (void) __sync_fetch_and_sub (&ul[1], -1);
++  (void) __sync_fetch_and_sub (&sll[1], -1);
++  (void) __sync_fetch_and_sub (&ull[1], -1);
++
++  (void) __sync_fetch_and_or (&sc[1], -1);
++  (void) __sync_fetch_and_or (&uc[1], -1);
++  (void) __sync_fetch_and_or (&ss[1], -1);
++  (void) __sync_fetch_and_or (&us[1], -1);
++  (void) __sync_fetch_and_or (&si[1], -1);
++  (void) __sync_fetch_and_or (&ui[1], -1);
++  (void) __sync_fetch_and_or (&sl[1], -1);
++  (void) __sync_fetch_and_or (&ul[1], -1);
++  (void) __sync_fetch_and_or (&sll[1], -1);
++  (void) __sync_fetch_and_or (&ull[1], -1);
++
++  (void) __sync_fetch_and_xor (&sc[1], -1);
++  (void) __sync_fetch_and_xor (&uc[1], -1);
++  (void) __sync_fetch_and_xor (&ss[1], -1);
++  (void) __sync_fetch_and_xor (&us[1], -1);
++  (void) __sync_fetch_and_xor (&si[1], -1);
++  (void) __sync_fetch_and_xor (&ui[1], -1);
++  (void) __sync_fetch_and_xor (&sl[1], -1);
++  (void) __sync_fetch_and_xor (&ul[1], -1);
++  (void) __sync_fetch_and_xor (&sll[1], -1);
++  (void) __sync_fetch_and_xor (&ull[1], -1);
++
++  (void) __sync_fetch_and_and (&sc[1], -1);
++  (void) __sync_fetch_and_and (&uc[1], -1);
++  (void) __sync_fetch_and_and (&ss[1], -1);
++  (void) __sync_fetch_and_and (&us[1], -1);
++  (void) __sync_fetch_and_and (&si[1], -1);
++  (void) __sync_fetch_and_and (&ui[1], -1);
++  (void) __sync_fetch_and_and (&sl[1], -1);
++  (void) __sync_fetch_and_and (&ul[1], -1);
++  (void) __sync_fetch_and_and (&sll[1], -1);
++  (void) __sync_fetch_and_and (&ull[1], -1);
++
++  (void) __sync_fetch_and_nand (&sc[1], -1);
++  (void) __sync_fetch_and_nand (&uc[1], -1);
++  (void) __sync_fetch_and_nand (&ss[1], -1);
++  (void) __sync_fetch_and_nand (&us[1], -1);
++  (void) __sync_fetch_and_nand (&si[1], -1);
++  (void) __sync_fetch_and_nand (&ui[1], -1);
++  (void) __sync_fetch_and_nand (&sl[1], -1);
++  (void) __sync_fetch_and_nand (&ul[1], -1);
++  (void) __sync_fetch_and_nand (&sll[1], -1);
++  (void) __sync_fetch_and_nand (&ull[1], -1);
++}
++
++void test_fetch_and_op (void)
++{
++signed char sc[2];
++unsigned char uc[2];
++signed short ss[2];
++unsigned short us[2];
++signed int si[2];
++unsigned int ui[2];
++signed long sl[2];
++unsigned long ul[2];
++signed long long sll[2];
++unsigned long long ull[2];
++  sc[1] = __sync_fetch_and_add (&sc[1], -11);
++  uc[1] = __sync_fetch_and_add (&uc[1], -11);
++  ss[1] = __sync_fetch_and_add (&ss[1], -11);
++  us[1] = __sync_fetch_and_add (&us[1], -11);
++  si[1] = __sync_fetch_and_add (&si[1], -11);
++  ui[1] = __sync_fetch_and_add (&ui[1], -11);
++  sl[1] = __sync_fetch_and_add (&sl[1], -11);
++  ul[1] = __sync_fetch_and_add (&ul[1], -11);
++  sll[1] = __sync_fetch_and_add (&sll[1], -11);
++  ull[1] = __sync_fetch_and_add (&ull[1], -11);
++
++  sc[1] = __sync_fetch_and_sub (&sc[1], -11);
++  uc[1] = __sync_fetch_and_sub (&uc[1], -11);
++  ss[1] = __sync_fetch_and_sub (&ss[1], -11);
++  us[1] = __sync_fetch_and_sub (&us[1], -11);
++  si[1] = __sync_fetch_and_sub (&si[1], -11);
++  ui[1] = __sync_fetch_and_sub (&ui[1], -11);
++  sl[1] = __sync_fetch_and_sub (&sl[1], -11);
++  ul[1] = __sync_fetch_and_sub (&ul[1], -11);
++  sll[1] = __sync_fetch_and_sub (&sll[1], -11);
++  ull[1] = __sync_fetch_and_sub (&ull[1], -11);
++
++  sc[1] = __sync_fetch_and_or (&sc[1], -11);
++  uc[1] = __sync_fetch_and_or (&uc[1], -11);
++  ss[1] = __sync_fetch_and_or (&ss[1], -11);
++  us[1] = __sync_fetch_and_or (&us[1], -11);
++  si[1] = __sync_fetch_and_or (&si[1], -11);
++  ui[1] = __sync_fetch_and_or (&ui[1], -11);
++  sl[1] = __sync_fetch_and_or (&sl[1], -11);
++  ul[1] = __sync_fetch_and_or (&ul[1], -11);
++  sll[1] = __sync_fetch_and_or (&sll[1], -11);
++  ull[1] = __sync_fetch_and_or (&ull[1], -11);
++
++  sc[1] = __sync_fetch_and_xor (&sc[1], -11);
++  uc[1] = __sync_fetch_and_xor (&uc[1], -11);
++  ss[1] = __sync_fetch_and_xor (&ss[1], -11);
++  us[1] = __sync_fetch_and_xor (&us[1], -11);
++  si[1] = __sync_fetch_and_xor (&si[1], -11);
++  ui[1] = __sync_fetch_and_xor (&ui[1], -11);
++  sl[1] = __sync_fetch_and_xor (&sl[1], -11);
++  ul[1] = __sync_fetch_and_xor (&ul[1], -11);
++  sll[1] = __sync_fetch_and_xor (&sll[1], -11);
++  ull[1] = __sync_fetch_and_xor (&ull[1], -11);
++
++  sc[1] = __sync_fetch_and_and (&sc[1], -11);
++  uc[1] = __sync_fetch_and_and (&uc[1], -11);
++  ss[1] = __sync_fetch_and_and (&ss[1], -11);
++  us[1] = __sync_fetch_and_and (&us[1], -11);
++  si[1] = __sync_fetch_and_and (&si[1], -11);
++  ui[1] = __sync_fetch_and_and (&ui[1], -11);
++  sl[1] = __sync_fetch_and_and (&sl[1], -11);
++  ul[1] = __sync_fetch_and_and (&ul[1], -11);
++  sll[1] = __sync_fetch_and_and (&sll[1], -11);
++  ull[1] = __sync_fetch_and_and (&ull[1], -11);
++
++  sc[1] = __sync_fetch_and_nand (&sc[1], -11);
++  uc[1] = __sync_fetch_and_nand (&uc[1], -11);
++  ss[1] = __sync_fetch_and_nand (&ss[1], -11);
++  us[1] = __sync_fetch_and_nand (&us[1], -11);
++  si[1] = __sync_fetch_and_nand (&si[1], -11);
++  ui[1] = __sync_fetch_and_nand (&ui[1], -11);
++  sl[1] = __sync_fetch_and_nand (&sl[1], -11);
++  ul[1] = __sync_fetch_and_nand (&ul[1], -11);
++  sll[1] = __sync_fetch_and_nand (&sll[1], -11);
++  ull[1] = __sync_fetch_and_nand (&ull[1], -11);
++}
++
++void test_lock (void)
++{
++signed char sc[2];
++unsigned char uc[2];
++signed short ss[2];
++unsigned short us[2];
++signed int si[2];
++unsigned int ui[2];
++signed long sl[2];
++unsigned long ul[2];
++signed long long sll[2];
++unsigned long long ull[2];
++  sc[1] = __sync_lock_test_and_set (&sc[1], -1);
++  uc[1] = __sync_lock_test_and_set (&uc[1], -1);
++  ss[1] = __sync_lock_test_and_set (&ss[1], -1);
++  us[1] = __sync_lock_test_and_set (&us[1], -1);
++  si[1] = __sync_lock_test_and_set (&si[1], -1);
++  ui[1] = __sync_lock_test_and_set (&ui[1], -1);
++  sl[1] = __sync_lock_test_and_set (&sl[1], -1);
++  ul[1] = __sync_lock_test_and_set (&ul[1], -1);
++  sll[1] = __sync_lock_test_and_set (&sll[1], -1);
++  ull[1] = __sync_lock_test_and_set (&ull[1], -1);
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/execute/builtins/builtins.exp gcc-4.3.2/gcc/testsuite/gcc.c-torture/execute/builtins/builtins.exp
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/execute/builtins/builtins.exp	2003-05-23 22:58:15.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/gcc.c-torture/execute/builtins/builtins.exp	2008-12-05 12:35:34.000000000 -0800
+@@ -13,8 +13,12 @@
+ # that needs them.  They shouldn't call any external functions in case
+ # those functions were overridden too.
+ 
++load_lib torture-options.exp
+ load_lib c-torture.exp
+ 
++torture-init
++set-torture-options $C_TORTURE_OPTIONS
++
+ set additional_flags ""
+ if [istarget "powerpc-*-darwin*"] {
+    lappend additional_flags "-Wl,-multiply_defined,suppress"
+@@ -28,3 +32,5 @@
+ 				$additional_flags
+     }
+ }
++
++torture-finish
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/execute/execute.exp gcc-4.3.2/gcc/testsuite/gcc.c-torture/execute/execute.exp
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/execute/execute.exp	2007-08-01 09:25:11.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/gcc.c-torture/execute/execute.exp	2008-12-05 12:35:34.000000000 -0800
+@@ -28,8 +28,12 @@
+ }
+ 
+ # load support procs
++load_lib torture-options.exp
+ load_lib c-torture.exp
+ 
++torture-init
++set-torture-options $C_TORTURE_OPTIONS
++
+ #
+ # main test loop
+ #
+@@ -42,3 +46,5 @@
+ 
+     c-torture-execute $src
+ }
++
++torture-finish
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp gcc-4.3.2/gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp	2007-08-01 09:25:11.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp	2008-12-05 12:35:34.000000000 -0800
+@@ -21,6 +21,7 @@
+ 
+ # Load support procs.
+ load_lib gcc-dg.exp
++load_lib torture-options.exp
+ 
+ # These tests come from Torbjorn Granlund's (tege@cygnus.com)
+ # C torture test suite, and other contributors.
+@@ -32,6 +33,9 @@
+     strace $tracelevel
+ }
+ 
++torture-init
++set-torture-options $C_TORTURE_OPTIONS
++
+ set additional_flags ""
+ 
+ # We must use -ffloat-store/-mieee to ensure that excess precision on some
+@@ -70,4 +74,5 @@
+ }
+ 
+ # All done.
++torture-finish
+ gcc_finish
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/execute/ieee/pr36332.c gcc-4.3.2/gcc/testsuite/gcc.c-torture/execute/ieee/pr36332.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/execute/ieee/pr36332.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.c-torture/execute/ieee/pr36332.c	2008-09-02 12:11:55.000000000 -0700
+@@ -0,0 +1,15 @@
++/* PR target/36332 */
++
++int __attribute__((noinline, used))
++foo (long double ld)
++{
++  return ld == __builtin_infl ();
++}
++
++int
++main ()
++{
++  if (foo (__LDBL_MAX__))
++    __builtin_abort ();
++  return 0;
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/execute/ieee/pr38016.c gcc-4.3.2/gcc/testsuite/gcc.c-torture/execute/ieee/pr38016.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/execute/ieee/pr38016.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.c-torture/execute/ieee/pr38016.c	2008-11-05 10:11:15.000000000 -0800
+@@ -0,0 +1 @@
++#include "fp-cmp-8.c"
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/execute/ieee/pr38016.x gcc-4.3.2/gcc/testsuite/gcc.c-torture/execute/ieee/pr38016.x
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/execute/ieee/pr38016.x	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.c-torture/execute/ieee/pr38016.x	2008-11-05 10:11:15.000000000 -0800
+@@ -0,0 +1,2 @@
++lappend additional_flags "-fno-ivopts" "-fno-gcse"
++return 0
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/execute/pr36343.c gcc-4.3.2/gcc/testsuite/gcc.c-torture/execute/pr36343.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/execute/pr36343.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.c-torture/execute/pr36343.c	2008-09-19 08:04:36.000000000 -0700
+@@ -0,0 +1,31 @@
++extern void abort (void);
++
++void __attribute__((noinline))
++bar (int **p)
++{
++  float *q = (float *)p;
++  *q = 0.0;
++}
++
++float __attribute__((noinline))
++foo (int b)
++{
++  int *i = 0;
++  float f = 1.0;
++  int **p;
++  if (b)
++    p = &i;
++  else
++    p = (int **)&f;
++  bar (p);
++  if (b)
++    return **p;
++  return f;
++}
++
++int main()
++{
++  if (foo(0) != 0.0)
++    abort ();
++  return 0;
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/execute/pr37102.c gcc-4.3.2/gcc/testsuite/gcc.c-torture/execute/pr37102.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/execute/pr37102.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.c-torture/execute/pr37102.c	2008-10-17 10:35:58.000000000 -0700
+@@ -0,0 +1,25 @@
++extern void abort (void);
++
++unsigned int a, b = 1, c;
++
++void __attribute__ ((noinline))
++foo (int x)
++{
++  if (x != 5)
++    abort ();
++}
++
++int
++main ()
++{
++  unsigned int d, e;
++  for (d = 1; d < 5; d++)
++    if (c)
++      a = b;
++  a = b;
++  e = a << 1;
++  if (e)
++    e = (e << 1) ^ 1;
++  foo (e);
++  return 0;
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/execute/pr37125.c gcc-4.3.2/gcc/testsuite/gcc.c-torture/execute/pr37125.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/execute/pr37125.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.c-torture/execute/pr37125.c	2008-08-28 07:18:23.000000000 -0700
+@@ -0,0 +1,23 @@
++extern void abort (void);
++
++static inline unsigned int
++mod_rhs(int rhs)
++{
++  if (rhs == 0) return 1;
++  return rhs;
++}
++
++void func_44 (unsigned int p_45);
++void func_44 (unsigned int p_45)
++{
++  if (!((p_45 * -9) % mod_rhs (-9))) {
++      abort();
++  }
++}
++
++int main (void)
++{
++  func_44 (2);
++  return 0;
++}
++
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/execute/pr37882.c gcc-4.3.2/gcc/testsuite/gcc.c-torture/execute/pr37882.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/execute/pr37882.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.c-torture/execute/pr37882.c	2008-10-22 13:08:01.000000000 -0700
+@@ -0,0 +1,16 @@
++/* PR middle-end/37882 */
++
++struct S
++{
++  int a : 21;
++  unsigned char b : 3;
++} s;
++
++int
++main ()
++{
++  s.b = 4;
++  if (s.b > 0 && s.b < 4)
++    __builtin_abort ();
++  return 0;
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/execute/pr37924.c gcc-4.3.2/gcc/testsuite/gcc.c-torture/execute/pr37924.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/execute/pr37924.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.c-torture/execute/pr37924.c	2008-11-05 12:42:43.000000000 -0800
+@@ -0,0 +1,50 @@
++/* PR c/37924 */
++
++extern void abort (void);
++
++signed char a;
++unsigned char b;
++
++int
++test1 (void)
++{
++  int c = -1;
++  return ((unsigned int) (a ^ c)) >> 9;
++}
++
++int
++test2 (void)
++{
++  int c = -1;
++  return ((unsigned int) (b ^ c)) >> 9;
++}
++
++int
++main (void)
++{
++  a = 0;
++  if (test1 () != (-1U >> 9))
++    abort ();
++  a = 0x40;
++  if (test1 () != (-1U >> 9))
++    abort ();
++  a = 0x80;
++  if (test1 () != (a < 0) ? 0 : (-1U >> 9))
++    abort ();
++  a = 0xff;
++  if (test1 () != (a < 0) ? 0 : (-1U >> 9))
++    abort ();
++  b = 0;
++  if (test2 () != (-1U >> 9))
++    abort ();
++  b = 0x40;
++  if (test2 () != (-1U >> 9))
++    abort ();
++  b = 0x80;
++  if (test2 () != (-1U >> 9))
++    abort ();
++  b = 0xff;
++  if (test2 () != (-1U >> 9))
++    abort ();
++  return 0;
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/execute/pr38048-1.c gcc-4.3.2/gcc/testsuite/gcc.c-torture/execute/pr38048-1.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/execute/pr38048-1.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.c-torture/execute/pr38048-1.c	2008-11-20 04:12:01.000000000 -0800
+@@ -0,0 +1,22 @@
++extern void abort(void);
++
++int foo ()
++{
++  int mat[2][1];
++  int (*a)[1] = mat;
++  int det = 0;
++  int i;
++  mat[0][0] = 1;
++  mat[1][0] = 2;
++  for (i = 0; i < 2; ++i)
++    det += a[i][0];
++  return det;
++}
++
++int main()
++{
++  if (foo () != 3)
++    abort ();
++  return 0;
++}
++
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/execute/pr38048-2.c gcc-4.3.2/gcc/testsuite/gcc.c-torture/execute/pr38048-2.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/execute/pr38048-2.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.c-torture/execute/pr38048-2.c	2008-11-20 04:12:01.000000000 -0800
+@@ -0,0 +1,28 @@
++extern void abort (void);
++
++static int inv_J(int a[][2])
++{
++  int i, j;
++  int det = 0.0;
++   for (j=0; j<2; ++j)
++     det += a[j][0] + a[j][1];
++  return det;
++}
++
++int foo()
++{
++  int mat[2][2];
++  mat[0][0] = 1;
++  mat[0][1] = 2;
++  mat[1][0] = 4;
++  mat[1][1] = 8;
++  return inv_J(mat);
++}
++
++int main()
++{
++  if (foo () != 15)
++    abort ();
++  return 0;
++}
++
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/unsorted/unsorted.exp gcc-4.3.2/gcc/testsuite/gcc.c-torture/unsorted/unsorted.exp
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.c-torture/unsorted/unsorted.exp	2007-08-01 09:25:11.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/gcc.c-torture/unsorted/unsorted.exp	2008-12-05 12:35:34.000000000 -0800
+@@ -30,6 +30,10 @@
+ 
+ # load support procs
+ load_lib c-torture.exp
++load_lib torture-options.exp
++
++torture-init
++set-torture-options $C_TORTURE_OPTIONS
+ 
+ #
+ # This loop will run c-torture on any *.c file found in this directory.
+@@ -52,3 +56,5 @@
+ 
+     c-torture $testcase
+ }
++
++torture-finish
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-ref-all-2.c gcc-4.3.2/gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-ref-all-2.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-ref-all-2.c	2008-08-07 02:59:58.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-ref-all-2.c	2008-12-02 14:11:55.000000000 -0800
+@@ -22,3 +22,5 @@
+   return ret;
+ }
+ 
++/* Ignore a warning that is irrelevant to the purpose of this test.  */
++/* { dg-prune-output ".*GCC vector returned by reference.*" } */
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/dfp/constants-zero.c gcc-4.3.2/gcc/testsuite/gcc.dg/dfp/constants-zero.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/dfp/constants-zero.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/dfp/constants-zero.c	2008-09-18 11:33:58.000000000 -0700
+@@ -0,0 +1,159 @@
++/* { dg-options "-std=gnu99 -O0" } */
++
++/* Decimal float values can have significant trailing zeroes.  This is
++   true for zero values as well.  Check that various representations of
++   zero are handled correctly when specified as literal constants.  */
++
++extern void abort (void);
++
++int big_endian;
++
++typedef union U32 {
++  unsigned int i;
++  _Decimal32 d;
++  unsigned char b[4];
++} u32_t;
++
++typedef union U64 {
++  unsigned long long i;
++  _Decimal64 d;
++} u64_t;
++
++typedef union U128 {
++  unsigned long long i[2];
++  _Decimal128 d;
++} u128_t;
++
++int
++compare32 (_Decimal32 d, unsigned int i)
++{
++  u32_t u;
++
++  u.d = d;
++  return (u.i == i);
++}
++
++int
++compare64 (_Decimal64 d, unsigned long long i)
++{
++  u64_t u;
++
++  u.d = d;
++  return (u.i == i);
++}
++
++int
++compare128 (_Decimal64 d, unsigned long long i, unsigned long long j)
++{
++  u128_t u;
++
++  u.d = d;
++  if (big_endian)
++    return (u.i[0] == i && u.i[1] == j);
++  else
++    return (u.i[1] == i && u.i[0] == j);
++}
++
++void
++dpd_tests (void)
++{
++  if (! compare32 (0.DF, 0x22500000U))
++    abort ();
++  if (! compare32 (-0.DF, 0xa2500000U))
++    abort ();
++  if (! compare32 (0.E-4DF, 0x22100000U))
++    abort ();
++  if (! compare32 (0.E-7DF, 0x21e00000U))
++    abort ();
++  if (! compare32 (0.E+3DF, 0x22800000U))
++    abort ();
++
++  if (! compare64 (0.DD, 0x2238000000000000ULL))
++    abort ();
++  if (! compare64 (-0.DD, 0xa238000000000000ULL))
++    abort ();
++  if (! compare64 (0.E-6DD, 0x2220000000000000ULL))
++    abort ();
++  if (! compare64 (0.E-7DD, 0x221c000000000000ULL))
++    abort ();
++  if (! compare64 (0.E+2DD, 0x2240000000000000ULL))
++    abort ();
++
++  if (! compare128 (0.DL, 0x2208000000000000ULL, 0x0000000000000000ULL))
++    abort ();
++  if (! compare128 (-0.DL, 0xa208000000000000ULL, 0x0000000000000000ULL))
++    abort ();
++  if (! compare128 (0.E-3DL, 0x2207400000000000ULL, 0x0000000000000000ULL))
++    abort ();
++  if (! compare128 (0.E-8DL, 0x2206000000000000ULL, 0x0000000000000000ULL))
++    abort ();
++  if (! compare128 (0.E+2DL, 0x2208800000000000ULL, 0x0000000000000000ULL))
++    abort ();
++}
++
++void
++bid_tests (void)
++{
++  if (! compare32 (0.DF, 0x32800000U))
++    abort ();
++  if (! compare32 (-0.DF, 0xb2800000U))
++    abort ();
++  if (! compare32 (0.E-4DF, 0x30800000U))
++    abort ();
++  if (! compare32 (0.E-7DF, 0x2f000000U))
++    abort ();
++  if (! compare32 (0.E+3DF, 0x34000000U))
++    abort ();
++
++  if (! compare64 (0.DD, 0x31c0000000000000ULL))
++    abort ();
++  if (! compare64 (-0.DD, 0xb1c0000000000000ULL))
++    abort ();
++  if (! compare64 (0.E-6DD, 0x3100000000000000ULL))
++    abort ();
++  if (! compare64 (0.E-7DD, 0x30e0000000000000ULL))
++    abort ();
++  if (! compare64 (0.E+2DD, 0x3200000000000000ULL))
++    abort ();
++
++  if (! compare128 (0.DL, 0x3040000000000000ULL, 0x0000000000000000ULL))
++    abort ();
++  if (! compare128 (-0.DL, 0xb040000000000000ULL, 0x0000000000000000ULL))
++    abort ();
++  if (! compare128 (0.E-3DL, 0x303a000000000000ULL, 0x0000000000000000ULL))
++    abort ();
++  if (! compare128 (0.E-8DL, 0x3030000000000000ULL, 0x0000000000000000ULL))
++    abort ();
++  if (! compare128 (0.E+2DL, 0x3044000000000000ULL, 0x0000000000000000ULL))
++    abort ();
++}
++
++int
++main ()
++{
++  u32_t u32;
++  
++  /* These sizes are probably always true for targets that support decimal
++     float types, but check anyway.  Abort so we can fix the test.  */
++  if ((sizeof (_Decimal64) != sizeof (long long))
++      || (sizeof (_Decimal128) != 2 * sizeof (long long))
++      || (sizeof (_Decimal32) != sizeof (_Decimal32)))
++    abort ();
++
++  u32.d = 1.DF;
++
++  if (u32.i == 0x22500001)
++    {
++      big_endian = (u32.b[0] == 0x22);
++      dpd_tests ();
++    }
++  else if (u32.i == 0x32800001)
++    {
++       big_endian = (u32.b[0] == 0x32);
++       bid_tests ();
++    }
++  else
++    abort ();		/* unknown format; test problem  */
++
++  return 0;
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/dfp/convert-dfp-round.c gcc-4.3.2/gcc/testsuite/gcc.dg/dfp/convert-dfp-round.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/dfp/convert-dfp-round.c	2006-01-16 16:09:27.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/dfp/convert-dfp-round.c	2008-12-05 13:08:17.000000000 -0800
+@@ -1,4 +1,5 @@
+ /* { dg-options "-O0 -std=gnu99" } */
++/* { dg-skip-if "test is for emulation" { hard_dfp } { "*" } { "" } } */
+ 
+ /* N1150 5.2: Conversions among decimal floating types and between
+    decimal floating types and generic floating types.
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/dfp/fe-binop.c gcc-4.3.2/gcc/testsuite/gcc.dg/dfp/fe-binop.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/dfp/fe-binop.c	2007-01-29 15:01:35.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/dfp/fe-binop.c	2008-12-05 13:08:17.000000000 -0800
+@@ -1,4 +1,5 @@
+ /* { dg-options "-std=gnu99" } */
++/* { dg-skip-if "test is for emulation" { hard_dfp } { "*" } { "" } } */
+ 
+ /* Touch tests that check for raising appropriate exceptions for binary
+    arithmetic operations on decimal float values.  */
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/dfp/fe-convert-1.c gcc-4.3.2/gcc/testsuite/gcc.dg/dfp/fe-convert-1.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/dfp/fe-convert-1.c	2007-07-24 16:41:15.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/dfp/fe-convert-1.c	2008-12-05 13:08:17.000000000 -0800
+@@ -1,4 +1,5 @@
+ /* { dg-options "-std=gnu99" } */
++/* { dg-skip-if "test is for emulation" { hard_dfp } { "*" } { "" } } */
+ 
+ /* Check that appropriate exceptions are raised for conversions involving
+    decimal float values.  */
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/dfp/func-deref.c gcc-4.3.2/gcc/testsuite/gcc.dg/dfp/func-deref.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/dfp/func-deref.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/dfp/func-deref.c	2008-09-18 11:37:52.000000000 -0700
+@@ -0,0 +1,220 @@
++/* { dg-options "-std=gnu99" } */
++
++/* C99 6.5.2.2 Function calls.
++   Test scalar passing and return values involving decimal floating
++   point types and dereferenced pointers.  */
++
++extern void abort (void);
++static int failcnt;
++
++/* Support compiling the test to report individual failures; default is
++   to abort as soon as a check fails.  */
++#ifdef DBG
++#include <stdio.h>
++#define FAILURE { printf ("failed at line %d\n", __LINE__); failcnt++; }
++#else
++#define FAILURE abort ();
++#endif
++
++/* A handful of functions that return their Nth _Decimal32
++   argument.  */
++
++_Decimal32 __attribute__((noinline))
++arg0_32 (_Decimal32 arg0, _Decimal32 arg1, _Decimal32 arg2,
++	 _Decimal32 arg3, _Decimal32 arg4, _Decimal32 arg5)
++{
++  return arg0;
++}
++
++_Decimal32 __attribute__((noinline))
++arg1_32 (_Decimal32 arg0, _Decimal32 arg1, _Decimal32 arg2,
++	 _Decimal32 arg3, _Decimal32 arg4, _Decimal32 arg5)
++{
++  return arg1;
++}
++	
++_Decimal32 __attribute__((noinline))
++arg2_32 (_Decimal32 arg0, _Decimal32 arg1, _Decimal32 arg2,
++	 _Decimal32 arg3, _Decimal32 arg4, _Decimal32 arg5)
++{
++  return arg2;
++}
++	
++_Decimal32 __attribute__((noinline))
++arg3_32 (_Decimal32 arg0, _Decimal32 arg1, _Decimal32 arg2,
++	 _Decimal32 arg3, _Decimal32 arg4, _Decimal32 arg5)
++{
++  return arg3;
++}
++	
++_Decimal32 __attribute__((noinline))
++arg4_32 (_Decimal32 arg0, _Decimal32 arg1, _Decimal32 arg2,
++	 _Decimal32 arg3, _Decimal32 arg4, _Decimal32 arg5)
++{
++  return arg4;
++}
++	
++_Decimal32 __attribute__((noinline))
++arg5_32 (_Decimal32 arg0, _Decimal32 arg1, _Decimal32 arg2,
++	 _Decimal32 arg3, _Decimal32 arg4, _Decimal32 arg5)
++{
++  return arg5;
++}
++	
++
+
++/* A handful of functions that return their Nth _Decimal64
++   argument.  */
++
++_Decimal64 __attribute__((noinline))
++arg0_64 (_Decimal64 arg0, _Decimal64 arg1, _Decimal64 arg2,
++	 _Decimal64 arg3, _Decimal64 arg4, _Decimal64 arg5)
++{
++  return arg0;
++}
++	
++_Decimal64 __attribute__((noinline))
++arg1_64 (_Decimal64 arg0, _Decimal64 arg1, _Decimal64 arg2,
++	 _Decimal64 arg3, _Decimal64 arg4, _Decimal64 arg5)
++{
++  return arg1;
++}
++	
++_Decimal64 __attribute__((noinline))
++arg2_64 (_Decimal64 arg0, _Decimal64 arg1, _Decimal64 arg2,
++	 _Decimal64 arg3, _Decimal64 arg4, _Decimal64 arg5)
++{
++  return arg2;
++}
++	
++_Decimal64 __attribute__((noinline))
++arg3_64 (_Decimal64 arg0, _Decimal64 arg1, _Decimal64 arg2,
++	 _Decimal64 arg3, _Decimal64 arg4, _Decimal64 arg5)
++{
++  return arg3;
++}
++	
++_Decimal64 __attribute__((noinline))
++arg4_64 (_Decimal64 arg0, _Decimal64 arg1, _Decimal64 arg2,
++	 _Decimal64 arg3, _Decimal64 arg4, _Decimal64 arg5)
++{
++  return arg4;
++}
++	
++_Decimal64 __attribute__((noinline))
++arg5_64 (_Decimal64 arg0, _Decimal64 arg1, _Decimal64 arg2,
++	 _Decimal64 arg3, _Decimal64 arg4, _Decimal64 arg5)
++{
++  return arg5;
++}
++	
++
+
++/* A handful of functions that return their Nth _Decimal128
++   argument.  */
++
++_Decimal128 __attribute__((noinline))
++arg0_128 (_Decimal128 arg0, _Decimal128 arg1, _Decimal128 arg2,
++	 _Decimal128 arg3, _Decimal128 arg4, _Decimal128 arg5)
++{
++  return arg0;
++}
++	
++_Decimal128 __attribute__((noinline))
++arg1_128 (_Decimal128 arg0, _Decimal128 arg1, _Decimal128 arg2,
++	 _Decimal128 arg3, _Decimal128 arg4, _Decimal128 arg5)
++{
++  return arg1;
++}
++	
++_Decimal128 __attribute__((noinline))
++arg2_128 (_Decimal128 arg0, _Decimal128 arg1, _Decimal128 arg2,
++	 _Decimal128 arg3, _Decimal128 arg4, _Decimal128 arg5)
++{
++  return arg2;
++}
++	
++_Decimal128 __attribute__((noinline))
++arg3_128 (_Decimal128 arg0, _Decimal128 arg1, _Decimal128 arg2,
++	 _Decimal128 arg3, _Decimal128 arg4, _Decimal128 arg5)
++{
++  return arg3;
++}
++	
++_Decimal128 __attribute__((noinline))
++arg4_128 (_Decimal128 arg0, _Decimal128 arg1, _Decimal128 arg2,
++	 _Decimal128 arg3, _Decimal128 arg4, _Decimal128 arg5)
++{
++  return arg4;
++}
++	
++_Decimal128 __attribute__((noinline))
++arg5_128 (_Decimal128 arg0, _Decimal128 arg1, _Decimal128 arg2,
++	 _Decimal128 arg3, _Decimal128 arg4, _Decimal128 arg5)
++{
++  return arg5;
++}
++
++
++
+
++_Decimal32 df0 = 0.0df, df1 = 1.0df, df2 = 2.0df,
++	   df3 = 3.0df, df4 = 4.0df, df5 = 5.0df;
++_Decimal32 *pdf0 = &df0, *pdf1 = &df1, *pdf2 = &df2,
++	   *pdf3 = &df3, *pdf4 = &df4, *pdf5 = &df5;
++_Decimal64 dd0 = 0.0dd, dd1 = 1.0dd, dd2 = 2.0dd,
++	   dd3 = 3.0dd, dd4 = 4.0dd, dd5 = 5.0dd;
++_Decimal64 *pdd0 = &dd0, *pdd1 = &dd1, *pdd2 = &dd2,
++	   *pdd3 = &dd3, *pdd4 = &dd4, *pdd5 = &dd5;
++_Decimal128 dl0 = 0.0dl, dl1 = 1.0dl, dl2 = 2.0dl,
++	    dl3 = 3.0dl, dl4 = 4.0dl, dl5 = 5.0dl;
++_Decimal128 *pdl0 = &dl0, *pdl1 = &dl1, *pdl2 = &dl2,
++	    *pdl3 = &dl3, *pdl4 = &dl4, *pdl5 = &dl5;
++
++int
++main ()
++{
++  /* _Decimal32 variants.  */
++  if (arg0_32 (*pdf0, *pdf1, *pdf2, *pdf3, *pdf4, *pdf5) != 0.0df)
++    FAILURE
++  if (arg1_32 (*pdf0, *pdf1, *pdf2, *pdf3, *pdf4, *pdf5) != 1.0df)
++    FAILURE
++  if (arg2_32 (*pdf0, *pdf1, *pdf2, *pdf3, *pdf4, *pdf5) != 2.0df)
++    FAILURE
++  if (arg3_32 (*pdf0, *pdf1, *pdf2, *pdf3, *pdf4, *pdf5) != 3.0df)
++    FAILURE
++  if (arg4_32 (*pdf0, *pdf1, *pdf2, *pdf3, *pdf4, *pdf5) != 4.0df)
++    FAILURE
++  if (arg5_32 (*pdf0, *pdf1, *pdf2, *pdf3, *pdf4, *pdf5) != 5.0df)
++    FAILURE
++
++  /* _Decimal64 variants.  */
++  if (arg0_64 (*pdd0, *pdd1, *pdd2, *pdd3, *pdd4, *pdd5) != 0.0dd)
++    FAILURE
++  if (arg1_64 (*pdd0, *pdd1, *pdd2, *pdd3, *pdd4, *pdd5) != 1.0dd)
++    FAILURE
++  if (arg2_64 (*pdd0, *pdd1, *pdd2, *pdd3, *pdd4, *pdd5) != 2.0dd)
++    FAILURE
++  if (arg3_64 (*pdd0, *pdd1, *pdd2, *pdd3, *pdd4, *pdd5) != 3.0dd)
++    FAILURE
++  if (arg4_64 (*pdd0, *pdd1, *pdd2, *pdd3, *pdd4, *pdd5) != 4.0dd)
++    FAILURE
++  if (arg5_64 (*pdd0, *pdd1, *pdd2, *pdd3, *pdd4, *pdd5) != 5.0dd)
++    FAILURE
++
++  /* _Decimal128 variants.  */
++  if (arg0_128 (*pdl0, *pdl1, *pdl2, *pdl3, *pdl4, *pdl5) != 0.0dl)
++    FAILURE
++  if (arg1_128 (*pdl0, *pdl1, *pdl2, *pdl3, *pdl4, *pdl5) != 1.0dl)
++    FAILURE
++  if (arg2_128 (*pdl0, *pdl1, *pdl2, *pdl3, *pdl4, *pdl5) != 2.0dl)
++    FAILURE
++  if (arg3_128 (*pdl0, *pdl1, *pdl2, *pdl3, *pdl4, *pdl5) != 3.0dl)
++    FAILURE
++  if (arg4_128 (*pdl0, *pdl1, *pdl2, *pdl3, *pdl4, *pdl5) != 4.0dl)
++    FAILURE
++  if (arg5_128 (*pdl0, *pdl1, *pdl2, *pdl3, *pdl4, *pdl5) != 5.0dl)
++    FAILURE
++
++  if (failcnt != 0)
++    abort ();
++
++  return 0;
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/dfp/func-pointer.c gcc-4.3.2/gcc/testsuite/gcc.dg/dfp/func-pointer.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/dfp/func-pointer.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/dfp/func-pointer.c	2008-09-18 11:37:52.000000000 -0700
+@@ -0,0 +1,220 @@
++/* { dg-options "-std=gnu99" } */
++
++/* C99 6.5.2.2 Function calls.
++   Test pointer argument passing and return values involving decimal floating
++   point types.  */
++
++extern void abort (void);
++static int failcnt;
++
++/* Support compiling the test to report individual failures; default is
++   to abort as soon as a check fails.  */
++#ifdef DBG
++#include <stdio.h>
++#define FAILURE { printf ("failed at line %d\n", __LINE__); failcnt++; }
++#else
++#define FAILURE abort ();
++#endif
++
++/* A handful of functions that return their Nth pointer to Decimal32
++   argument.  */
++
++_Decimal32 *
++arg0_32 (_Decimal32 *arg0, _Decimal32 *arg1, _Decimal32 *arg2,
++	 _Decimal32 *arg3, _Decimal32 *arg4, _Decimal32 *arg5)
++{
++  return arg0;
++}
++
++_Decimal32 *
++arg1_32 (_Decimal32 *arg0, _Decimal32 *arg1, _Decimal32 *arg2,
++	 _Decimal32 *arg3, _Decimal32 *arg4, _Decimal32 *arg5)
++{
++  return arg1;
++}
++	
++_Decimal32 *
++arg2_32 (_Decimal32 *arg0, _Decimal32 *arg1, _Decimal32 *arg2,
++	 _Decimal32 *arg3, _Decimal32 *arg4, _Decimal32 *arg5)
++{
++  return arg2;
++}
++	
++_Decimal32 *
++arg3_32 (_Decimal32 *arg0, _Decimal32 *arg1, _Decimal32 *arg2,
++	 _Decimal32 *arg3, _Decimal32 *arg4, _Decimal32 *arg5)
++{
++  return arg3;
++}
++	
++_Decimal32 *
++arg4_32 (_Decimal32 *arg0, _Decimal32 *arg1, _Decimal32 *arg2,
++	 _Decimal32 *arg3, _Decimal32 *arg4, _Decimal32 *arg5)
++{
++  return arg4;
++}
++	
++_Decimal32 *
++arg5_32 (_Decimal32 *arg0, _Decimal32 *arg1, _Decimal32 *arg2,
++	 _Decimal32 *arg3, _Decimal32 *arg4, _Decimal32 *arg5)
++{
++  return arg5;
++}
++	
++
+
++/* A handful of functions that return their Nth pointer to _Decimal64
++   argument.  */
++
++_Decimal64 *
++arg0_64 (_Decimal64 *arg0, _Decimal64 *arg1, _Decimal64 *arg2,
++	 _Decimal64 *arg3, _Decimal64 *arg4, _Decimal64 *arg5)
++{
++  return arg0;
++}
++	
++_Decimal64 *
++arg1_64 (_Decimal64 *arg0, _Decimal64 *arg1, _Decimal64 *arg2,
++	 _Decimal64 *arg3, _Decimal64 *arg4, _Decimal64 *arg5)
++{
++  return arg1;
++}
++	
++_Decimal64 *
++arg2_64 (_Decimal64 *arg0, _Decimal64 *arg1, _Decimal64 *arg2,
++	 _Decimal64 *arg3, _Decimal64 *arg4, _Decimal64 *arg5)
++{
++  return arg2;
++}
++	
++_Decimal64 *
++arg3_64 (_Decimal64 *arg0, _Decimal64 *arg1, _Decimal64 *arg2,
++	 _Decimal64 *arg3, _Decimal64 *arg4, _Decimal64 *arg5)
++{
++  return arg3;
++}
++	
++_Decimal64 *
++arg4_64 (_Decimal64 *arg0, _Decimal64 *arg1, _Decimal64 *arg2,
++	 _Decimal64 *arg3, _Decimal64 *arg4, _Decimal64 *arg5)
++{
++  return arg4;
++}
++	
++_Decimal64 *
++arg5_64 (_Decimal64 *arg0, _Decimal64 *arg1, _Decimal64 *arg2,
++	 _Decimal64 *arg3, _Decimal64 *arg4, _Decimal64 *arg5)
++{
++  return arg5;
++}
++	
++
+
++/* A handful of functions that return their Nth _Decimal128
++   argument.  */
++
++_Decimal128 *
++arg0_128 (_Decimal128 *arg0, _Decimal128 *arg1, _Decimal128 *arg2,
++	  _Decimal128 *arg3, _Decimal128 *arg4, _Decimal128 *arg5)
++{
++  return arg0;
++}
++	
++_Decimal128 *
++arg1_128 (_Decimal128 *arg0, _Decimal128 *arg1, _Decimal128 *arg2,
++	  _Decimal128 *arg3, _Decimal128 *arg4, _Decimal128 *arg5)
++{
++  return arg1;
++}
++	
++_Decimal128 *
++arg2_128 (_Decimal128 *arg0, _Decimal128 *arg1, _Decimal128 *arg2,
++	  _Decimal128 *arg3, _Decimal128 *arg4, _Decimal128 *arg5)
++{
++  return arg2;
++}
++	
++_Decimal128 *
++arg3_128 (_Decimal128 *arg0, _Decimal128 *arg1, _Decimal128 *arg2,
++	  _Decimal128 *arg3, _Decimal128 *arg4, _Decimal128 *arg5)
++{
++  return arg3;
++}
++	
++_Decimal128 *
++arg4_128 (_Decimal128 *arg0, _Decimal128 *arg1, _Decimal128 *arg2,
++	  _Decimal128 *arg3, _Decimal128 *arg4, _Decimal128 *arg5)
++{
++  return arg4;
++}
++	
++_Decimal128 *
++arg5_128 (_Decimal128 *arg0, _Decimal128 *arg1, _Decimal128 *arg2,
++	  _Decimal128 *arg3, _Decimal128 *arg4, _Decimal128 *arg5)
++{
++  return arg5;
++}
++
++
++
+
++_Decimal32 df0 = 0.0df, df1 = 1.0df, df2 = 2.0df,
++	   df3 = 3.0df, df4 = 4.0df, df5 = 5.0df;
++_Decimal32 *pdf0 = &df0, *pdf1 = &df1, *pdf2 = &df2,
++	   *pdf3 = &df3, *pdf4 = &df4, *pdf5 = &df5;
++_Decimal64 dd0 = 0.0dd, dd1 = 1.0dd, dd2 = 2.0dd,
++	   dd3 = 3.0dd, dd4 = 4.0dd, dd5 = 5.0dd;
++_Decimal64 *pdd0 = &dd0, *pdd1 = &dd1, *pdd2 = &dd2,
++	   *pdd3 = &dd3, *pdd4 = &dd4, *pdd5 = &dd5;
++_Decimal128 dl0 = 0.0dl, dl1 = 1.0dl, dl2 = 2.0dl,
++	    dl3 = 3.0dl, dl4 = 4.0dl, dl5 = 5.0dl;
++_Decimal128 *pdl0 = &dl0, *pdl1 = &dl1, *pdl2 = &dl2,
++	    *pdl3 = &dl3, *pdl4 = &dl4, *pdl5 = &dl5;
++
++int
++main ()
++{
++  /* _Decimal32 variants.  */
++  if (*arg0_32 (pdf0, pdf1, pdf2, pdf3, pdf4, pdf5) != 0.0df)
++    FAILURE
++  if (*arg1_32 (pdf0, pdf1, pdf2, pdf3, pdf4, pdf5) != 1.0df)
++    FAILURE
++  if (*arg2_32 (pdf0, pdf1, pdf2, pdf3, pdf4, pdf5) != 2.0df)
++    FAILURE
++  if (*arg3_32 (pdf0, pdf1, pdf2, pdf3, pdf4, pdf5) != 3.0df)
++    FAILURE
++  if (*arg4_32 (pdf0, pdf1, pdf2, pdf3, pdf4, pdf5) != 4.0df)
++    FAILURE
++  if (*arg5_32 (pdf0, pdf1, pdf2, pdf3, pdf4, pdf5) != 5.0df)
++    FAILURE
++
++  /* _Decimal64 variants.  */
++  if (*arg0_64 (pdd0, pdd1, pdd2, pdd3, pdd4, pdd5) != 0.0dd)
++    FAILURE
++  if (*arg1_64 (pdd0, pdd1, pdd2, pdd3, pdd4, pdd5) != 1.0dd)
++    FAILURE
++  if (*arg2_64 (pdd0, pdd1, pdd2, pdd3, pdd4, pdd5) != 2.0dd)
++    FAILURE
++  if (*arg3_64 (pdd0, pdd1, pdd2, pdd3, pdd4, pdd5) != 3.0dd)
++    FAILURE
++  if (*arg4_64 (pdd0, pdd1, pdd2, pdd3, pdd4, pdd5) != 4.0dd)
++    FAILURE
++  if (*arg5_64 (pdd0, pdd1, pdd2, pdd3, pdd4, pdd5) != 5.0dd)
++    FAILURE
++
++  /* _Decimal128 variants.  */
++  if (*arg0_128 (pdl0, pdl1, pdl2, pdl3, pdl4, pdl5) != 0.0dl)
++    FAILURE
++  if (*arg1_128 (pdl0, pdl1, pdl2, pdl3, pdl4, pdl5) != 1.0dl)
++    FAILURE
++  if (*arg2_128 (pdl0, pdl1, pdl2, pdl3, pdl4, pdl5) != 2.0dl)
++    FAILURE
++  if (*arg3_128 (pdl0, pdl1, pdl2, pdl3, pdl4, pdl5) != 3.0dl)
++    FAILURE
++  if (*arg4_128 (pdl0, pdl1, pdl2, pdl3, pdl4, pdl5) != 4.0dl)
++    FAILURE
++  if (*arg5_128 (pdl0, pdl1, pdl2, pdl3, pdl4, pdl5) != 5.0dl)
++    FAILURE
++
++  if (failcnt != 0)
++    abort ();
++
++  return 0;
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/dfp/pr35620.c gcc-4.3.2/gcc/testsuite/gcc.dg/dfp/pr35620.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/dfp/pr35620.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/dfp/pr35620.c	2008-09-18 11:37:52.000000000 -0700
+@@ -0,0 +1,23 @@
++/* { dg-do compile } */
++/* { dg-options "-std=gnu99 -O2" } */
++
++extern void foo (_Decimal32);
++_Decimal32 *p;
++
++extern int i;
++union { _Decimal32 a; int b; } u;
++
++void
++blatz (void)
++{
++  _Decimal32 d;
++  u.b = i;
++  d = u.a;
++  foo (d);
++}
++
++void
++bar (void)
++{
++  foo (*p);
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/format/cmn-err-1.c gcc-4.3.2/gcc/testsuite/gcc.dg/format/cmn-err-1.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/format/cmn-err-1.c	2005-06-08 09:28:39.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/format/cmn-err-1.c	2008-09-23 02:43:21.000000000 -0700
+@@ -27,12 +27,12 @@
+   cmn_err_func (0, "%p", string);
+   cmn_err_func (0, "%16b", i, "\01Foo");
+ 
+-  cmn_err_func (0, "%i", i);		/* { dg-error "unknown|too many" } */
+-  cmn_err_func (0, "%d", l);		/* { dg-error "expects type" } */
+-  cmn_err_func (0, "%b");		/* { dg-error "too few" } */
+-  cmn_err_func (0, "%b", i);		/* { dg-error "too few" } */
+-  cmn_err_func (0, "%b", i, i);		/* { dg-error "expects type" } */
+-  cmn_err_func (0, "%b", string, i);	/* { dg-error "expects type" } */
+-  cmn_err_func (0, "%p", 3);            /* { dg-error "expects type" } */
++  cmn_err_func (0, "%i", i);		/* { dg-warning "unknown|too many" } */
++  cmn_err_func (0, "%d", l);		/* { dg-warning "expects type" } */
++  cmn_err_func (0, "%b");		/* { dg-warning "too few" } */
++  cmn_err_func (0, "%b", i);		/* { dg-warning "too few" } */
++  cmn_err_func (0, "%b", i, i);		/* { dg-warning "expects type" } */
++  cmn_err_func (0, "%b", string, i);	/* { dg-warning "expects type" } */
++  cmn_err_func (0, "%p", 3);		/* { dg-warning "expects type" } */
+   return 0;
+ }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/format/format.exp gcc-4.3.2/gcc/testsuite/gcc.dg/format/format.exp
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/format/format.exp	2007-08-01 09:25:11.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/format/format.exp	2008-12-05 12:35:34.000000000 -0800
+@@ -17,47 +17,18 @@
+ # Don't run this directory with any default CFLAGS, but run tests with
+ # and without -DWIDE.
+ 
+-if [info exists TORTURE_OPTIONS] {
+-    set old_TORTURE_OPTIONS $TORTURE_OPTIONS
+-} elseif [info exists old_TORTURE_OPTIONS] {
+-    unset old_TORTURE_OPTIONS
+-}
+-if [info exists torture_with_loops] {
+-    set old_torture_with_loops $torture_with_loops
+-} elseif [info exists old_torture_with_loops] {
+-    unset old_torture_with_loops
+-}
+-if [info exists torture_without_loops] {
+-    set old_torture_without_loops $torture_without_loops
+-} elseif [info exists old_torture_without_loops] {
+-    unset old_torture_without_loops
+-}
+-set TORTURE_OPTIONS [list { } { -DWIDE } ]
+-set torture_with_loops [list { } { -DWIDE } ]
+-set torture_without_loops [list { } { -DWIDE } ]
+-
+ # Need to copy the format.h header.
+ if [is_remote host] {
+     remote_download host $srcdir/$subdir/format.h
+ }
+ 
+ load_lib gcc-dg.exp
++load_lib torture-options.exp
++
++torture-init
++set-torture-options [list { } { -DWIDE } ]
+ 
+ dg-init
+ gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] ""
+-if [info exists old_TORTURE_OPTIONS] {
+-    set TORTURE_OPTIONS $old_TORTURE_OPTIONS
+-} else {
+-    unset TORTURE_OPTIONS
+-}
+-if [info exists old_torture_with_loops] {
+-    set torture_with_loops $old_torture_with_loops
+-} else {
+-    unset torture_with_loops
+-}
+-if [info exists old_torture_without_loops] {
+-    set torture_without_loops $old_torture_without_loops
+-} else {
+-    unset torture_without_loops
+-}
++torture-finish
+ dg-finish
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/pch/pch.exp gcc-4.3.2/gcc/testsuite/gcc.dg/pch/pch.exp
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/pch/pch.exp	2007-08-01 09:25:11.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/pch/pch.exp	2008-12-05 12:35:34.000000000 -0800
+@@ -20,9 +20,12 @@
+ # Load support procs.
+ load_lib gcc-dg.exp
+ load_lib dg-pch.exp
++load_lib torture-options.exp
+ 
+ # Initialize `dg'.
+ dg-init
++torture-init
++set-torture-options $DG_TORTURE_OPTIONS
+ 
+ set old_dg_do_what_default "${dg-do-what-default}"
+ 
+@@ -56,4 +59,5 @@
+ set dg-do-what-default "$old_dg_do_what_default"
+ 
+ # All done.
++torture-finish
+ dg-finish
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/pr34856.c gcc-4.3.2/gcc/testsuite/gcc.dg/pr34856.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/pr34856.c	2008-01-25 02:25:21.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/pr34856.c	2008-12-02 14:11:55.000000000 -0800
+@@ -1,6 +1,8 @@
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ /* { dg-options "-O2 -msse2" { target { i?86-*-* x86_64-*-* } } } */
++/* { dg-options "-O2 -w" { target { powerpc*-*-linux* } } } */
++/* { dg-options "-O2 -maltivec" { target { powerpc*-*-linux* && powerpc_altivec_ok } } } */
+ 
+ typedef unsigned __attribute__ ((__mode__ (__pointer__))) uintptr_t;
+ 
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/pr37261.c gcc-4.3.2/gcc/testsuite/gcc.dg/pr37261.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/pr37261.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/pr37261.c	2008-08-29 12:08:18.000000000 -0700
+@@ -0,0 +1,15 @@
++/* PR c/37261 */
++/* { dg-do compile } */
++/* { dg-options "-O2 -fdump-tree-optimized" } */
++
++unsigned
++foo (int x)
++{
++  unsigned a = ((x & 1) | 2) & 0x80000000;	/* { dg-bogus "integer overflow in expression" } */
++  unsigned b = ((x & 2) | 2) & 0x80000000;	/* { dg-bogus "integer overflow in expression" } */
++  unsigned c = ((x & 4) | 2) & 0x80000000;	/* { dg-bogus "integer overflow in expression" } */
++  return a + b + c;
++}
++
++/* { dg-final { scan-tree-dump "return 0" "optimized" } } */
++/* { dg-final { cleanup-tree-dump "optimized" } } */
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/pr37544.c gcc-4.3.2/gcc/testsuite/gcc.dg/pr37544.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/pr37544.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/pr37544.c	2008-09-19 01:01:07.000000000 -0700
+@@ -0,0 +1,39 @@
++/* { dg-do run } */
++/* { dg-options "-O2" } */
++/* { dg-options "-O2 -msse2 -mtune=core2 -mfpmath=387" { target { i?86-*-* x86_64-*-* } } } */
++
++#ifdef __i386__
++#include "cpuid.h"
++#endif
++
++extern void abort (void);
++
++int main(void)
++{
++  double arr[1000];
++  double a, b;
++
++  int i;
++
++#ifdef __i386__
++  unsigned int eax, ebx, ecx, edx;
++ 
++  if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
++    return 0;
++
++  /* Run SSE2 test only if host has SSE2 support.  */
++  if (!(edx & bit_SSE2))
++    return 0;
++#endif
++
++  for (i = 0; i < 1000; i++)
++    arr[i] = 4294967296.0 + (double)i;
++
++  a = arr[0];
++  b = (unsigned int)((unsigned long long int)a % 4294967296ULL);
++
++  if (b >= 4294967296.0)
++    abort ();
++
++  return 0;
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/pr37645.c gcc-4.3.2/gcc/testsuite/gcc.dg/pr37645.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/pr37645.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/pr37645.c	2008-09-25 22:23:48.000000000 -0700
+@@ -0,0 +1,5 @@
++/* PR c/37645 */
++/* { dg-do compile } */
++
++typedef int T __attribute__((__weakref__ ("U")));	/* { dg-warning "attribute ignored" } */
++void foo (int i __attribute__((__weakref__ ("j"))));	/* { dg-warning "attribute ignored" } */
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/pr37858.c gcc-4.3.2/gcc/testsuite/gcc.dg/pr37858.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/pr37858.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/pr37858.c	2008-11-05 12:38:46.000000000 -0800
+@@ -0,0 +1,11 @@
++/* PR middle-end/37858 */
++/* { dg-do compile } */
++/* { dg-options "-O2 -fdump-ipa-early_local_cleanups -dv" } */
++
++int
++main (void)
++{
++  return 0;
++}
++
++/* { dg-final { cleanup-ipa-dump "early_local_cleanups" } } */
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/pr37879.c gcc-4.3.2/gcc/testsuite/gcc.dg/pr37879.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/pr37879.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/pr37879.c	2008-11-05 12:39:50.000000000 -0800
+@@ -0,0 +1,28 @@
++/* PR tree-optimization/37879 */
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++
++static inline void bar (int) __attribute__ ((noreturn));
++void baz () __attribute__ ((noreturn));
++
++inline int
++foo (int i)
++{
++  return i;
++}
++
++int i = 23;
++static inline void
++bar (int j)
++{
++  if (j)
++    asm ("");
++}		/* { dg-warning "does return" } */
++
++void
++baz ()
++{
++  int j;
++  bar (foo (j = i++));
++  asm ("");
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/pragma-align-2.c gcc-4.3.2/gcc/testsuite/gcc.dg/pragma-align-2.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/pragma-align-2.c	2004-11-23 15:25:40.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/pragma-align-2.c	2008-09-23 02:43:21.000000000 -0700
+@@ -19,15 +19,15 @@
+ 
+ #pragma align 8(not_defined)
+ 
+-#pragma align 9(odd_align)	/* { dg-error "invalid alignment" } */
+-#pragma align 256(high_align)	/* { dg-error "invalid alignment" } */
+-#pragma align -1(neg_align)	/* { dg-error "malformed" } */
+-#pragma align bad_align		/* { dg-error "malformed" } */
+-#pragma align 1(bad_align	/* { dg-error "malformed" } */
++#pragma align 9(odd_align)	/* { dg-warning "invalid alignment" } */
++#pragma align 256(high_align)	/* { dg-warning "invalid alignment" } */
++#pragma align -1(neg_align)	/* { dg-warning "malformed" } */
++#pragma align bad_align		/* { dg-warning "malformed" } */
++#pragma align 1(bad_align	/* { dg-warning "malformed" } */
+ 
+ int x, x1, x2, x4, x8, y8, z8, x16, x32, x64, x128, y128, z128;
+ 
+-#pragma align 16(x)		/* { dg-error "must appear before" } */
++#pragma align 16(x)		/* { dg-warning "must appear before" } */
+ 
+ int
+ main ()
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/pragma-init-fini.c gcc-4.3.2/gcc/testsuite/gcc.dg/pragma-init-fini.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/pragma-init-fini.c	2004-07-25 11:08:52.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/pragma-init-fini.c	2008-09-23 02:43:21.000000000 -0700
+@@ -4,13 +4,13 @@
+ 
+ extern void abort ();
+ 
+-#pragma init		/* { dg-error "malformed" } */
+-#pragma init ()		/* { dg-error "malformed" } */
+-#pragma init init_func	/* { dg-error "malformed" } */
+-
+-#pragma fini		/* { dg-error "malformed" } */
+-#pragma fini ()		/* { dg-error "malformed" } */
+-#pragma fini fini_func	/* { dg-error "malformed" } */
++#pragma init		/* { dg-warning "malformed" } */
++#pragma init ()		/* { dg-warning "malformed" } */
++#pragma init init_func	/* { dg-warning "malformed" } */
++
++#pragma fini		/* { dg-warning "malformed" } */
++#pragma fini ()		/* { dg-warning "malformed" } */
++#pragma fini fini_func	/* { dg-warning "malformed" } */
+ 
+ #pragma init (init_func, init_static_func)
+ 
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/struct/w_prof_global_var.c gcc-4.3.2/gcc/testsuite/gcc.dg/struct/w_prof_global_var.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/struct/w_prof_global_var.c	2007-12-13 05:47:22.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/struct/w_prof_global_var.c	2008-11-09 15:55:27.000000000 -0800
+@@ -15,6 +15,10 @@
+   int i, sum;
+ 
+   p = malloc (N * sizeof (str_t));
++
++  for (i = 0; i < N; i++)
++    p[i].b = i;
++
+   for (i = 0; i < N; i++)
+     p[i].a = p[i].b + 1;
+ 
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/struct/w_prof_local_var.c gcc-4.3.2/gcc/testsuite/gcc.dg/struct/w_prof_local_var.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/struct/w_prof_local_var.c	2007-12-13 05:47:22.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/struct/w_prof_local_var.c	2008-11-09 15:55:27.000000000 -0800
+@@ -13,6 +13,10 @@
+   int i, sum;
+ 
+   str_t * p = malloc (N * sizeof (str_t));
++
++  for (i = 0; i < N; i++)
++    p[i].b = i;
++
+   for (i = 0; i < N; i++)
+     p[i].a = p[i].b + 1;
+ 
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/struct/wo_prof_global_var.c gcc-4.3.2/gcc/testsuite/gcc.dg/struct/wo_prof_global_var.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/struct/wo_prof_global_var.c	2007-12-13 05:47:22.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/struct/wo_prof_global_var.c	2008-11-09 15:55:27.000000000 -0800
+@@ -18,6 +18,10 @@
+   int i, sum;
+ 
+   p = malloc (N * sizeof (str_t));
++
++  for (i = 0; i < N; i++)
++    p[i].b = i;
++
+   for (i = 0; i < N; i++)
+     p[i].a = p[i].b + 1;
+ 
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/struct/wo_prof_local_var.c gcc-4.3.2/gcc/testsuite/gcc.dg/struct/wo_prof_local_var.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/struct/wo_prof_local_var.c	2007-12-13 05:47:22.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/struct/wo_prof_local_var.c	2008-11-09 15:55:27.000000000 -0800
+@@ -16,6 +16,10 @@
+   int i, sum;
+ 
+   str_t * p = malloc (N * sizeof (str_t));
++
++  for (i = 0; i < N; i++)
++    p[i].b = i;
++
+   for (i = 0; i < N; i++)
+     p[i].a = p[i].b + 1;
+ 
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/struct/wo_prof_malloc_size_var.c gcc-4.3.2/gcc/testsuite/gcc.dg/struct/wo_prof_malloc_size_var.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/struct/wo_prof_malloc_size_var.c	2008-01-24 23:47:46.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/struct/wo_prof_malloc_size_var.c	2008-11-09 15:55:27.000000000 -0800
+@@ -22,6 +22,9 @@
+     return 0;
+ 
+   for (i = 0; i < N; i++)
++    p[i].b = i;
++
++  for (i = 0; i < N; i++)
+     p[i].a = p[i].b + 1;
+ 
+   for (i = 0; i < N; i++)
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/struct-parse-2.c gcc-4.3.2/gcc/testsuite/gcc.dg/struct-parse-2.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/struct-parse-2.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/struct-parse-2.c	2008-10-07 21:17:27.000000000 -0700
+@@ -0,0 +1,13 @@
++/* PR c/35437 */
++/* { dg-do "compile" } */
++
++struct A
++{
++  int i;
++  struct A a; /* { dg-error "has incomplete type" } */
++};
++
++void foo()
++{
++  struct A b = { 0 };
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/torture/builtin-modf-1.c gcc-4.3.2/gcc/testsuite/gcc.dg/torture/builtin-modf-1.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/torture/builtin-modf-1.c	2008-07-02 08:37:17.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/torture/builtin-modf-1.c	2008-12-02 14:11:55.000000000 -0800
+@@ -7,7 +7,7 @@
+ 
+ /* { dg-do link } */
+ /* { dg-options "-fno-finite-math-only" { target sh*-*-* } } */
+-/* { dg-options "-funsafe-math-optimizations -fsigned-zeros -fno-associative-math" { target powerpc-*-darwin* } } */
++/* { dg-options "-funsafe-math-optimizations -fsigned-zeros -fno-associative-math" { target powerpc-*-darwin* powerpc*-*-linux* } } */
+ 
+ extern void link_error(int);
+ 
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/torture/pr37731-1.c gcc-4.3.2/gcc/testsuite/gcc.dg/torture/pr37731-1.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/torture/pr37731-1.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/torture/pr37731-1.c	2008-10-07 11:48:59.000000000 -0700
+@@ -0,0 +1,17 @@
++/* { dg-do run } */
++
++extern void abort ();
++
++unsigned long long xh = 1;
++
++int
++main ()
++{
++  unsigned long long yh = 0xffffffffull;
++  unsigned long long z = xh * yh;
++
++  if (z != yh)
++    abort ();
++
++  return 0;
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/torture/pr37731-2.c gcc-4.3.2/gcc/testsuite/gcc.dg/torture/pr37731-2.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/torture/pr37731-2.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/torture/pr37731-2.c	2008-10-07 11:48:59.000000000 -0700
+@@ -0,0 +1,17 @@
++/* { dg-do run } */
++
++extern void abort ();
++
++long long xh = 1;
++
++int
++main ()
++{
++  long long yh = 0xffffffffll;
++  long long z = xh * yh;
++
++  if (z != yh)
++    abort ();
++
++  return 0;
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/torture/pr37868.c gcc-4.3.2/gcc/testsuite/gcc.dg/torture/pr37868.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/torture/pr37868.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/torture/pr37868.c	2008-12-03 03:18:51.000000000 -0800
+@@ -0,0 +1,29 @@
++/* { dg-do run } */
++/* { dg-options "-fno-strict-aliasing" } */
++/* { dg-skip-if "unaligned access" { sparc*-*-* } "*" "" } */
++
++extern void abort (void);
++
++struct X {
++  unsigned char pad : 4;
++  unsigned int a : 32;
++  unsigned int b : 24;
++  unsigned int c : 6;
++} __attribute__((packed));
++
++int main (void)
++{
++  struct X x;
++  unsigned int bad_bits;
++
++  x.pad = -1;
++  x.a = -1;
++  x.b = -1;
++  x.c = -1;
++
++  bad_bits = ((unsigned int)-1) ^ *(1+(unsigned int *) &x);
++  if (bad_bits != 0)
++    abort ();
++  return 0;
++}
++
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/torture/pr37969.c gcc-4.3.2/gcc/testsuite/gcc.dg/torture/pr37969.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/torture/pr37969.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/torture/pr37969.c	2008-11-06 07:05:44.000000000 -0800
+@@ -0,0 +1,20 @@
++/* { dg-do compile } */
++/* { dg-options "-funswitch-loops" } */
++
++void foo(double);
++void CreateDefaultTexture(double mnMinimum, double mnMaximum,
++			  unsigned short nCreateWhat)
++{
++  double d = 0.0;
++  for(;;)
++    {
++      if(nCreateWhat & (0x0001)
++	 && mnMinimum != 0.0)
++	d = mnMinimum;
++      if(nCreateWhat & (0x0002)
++	 && mnMaximum != 0.0)
++	d = mnMaximum;
++      foo(d);
++    }
++}
++
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/torture/pta-ptrarith-1.c gcc-4.3.2/gcc/testsuite/gcc.dg/torture/pta-ptrarith-1.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/torture/pta-ptrarith-1.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/torture/pta-ptrarith-1.c	2008-11-20 04:12:01.000000000 -0800
+@@ -0,0 +1,29 @@
++/* { dg-do run } */
++
++struct Foo {
++  int *p;
++};
++
++void __attribute__((noinline))
++foo (void *p)
++{
++  struct Foo *f = (struct Foo *)p - 1;
++  *f->p = 0;
++}
++
++int bar (void)
++{
++  struct Foo f;
++  int i = 1;
++  f.p = &i;
++  foo (&f + 1);
++  return i;
++}
++extern void abort (void);
++int main()
++{
++  if (bar () != 0)
++    abort ();
++  return 0;
++}
++
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/torture/pta-ptrarith-2.c gcc-4.3.2/gcc/testsuite/gcc.dg/torture/pta-ptrarith-2.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/torture/pta-ptrarith-2.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/torture/pta-ptrarith-2.c	2008-11-20 04:12:01.000000000 -0800
+@@ -0,0 +1,36 @@
++/* { dg-do run } */
++/* { dg-options "-fdump-tree-salias" } */
++/* { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
++
++struct Foo {
++  int **p;
++  int **q;
++};
++
++int __attribute__((noinline))
++bar (void)
++{
++  struct Foo f;
++  int j, i = 1;
++  char *p;
++  int *x = &i;
++  int *y = &j;
++  f.p = &y;
++  f.q = &x;
++  p = (char *)&f;
++  for (j = 0; j < sizeof (int *); ++j)
++    p++;
++  return ***(int ***)p;
++}
++extern void abort (void);
++int main()
++{
++  if (bar () != 1)
++    abort ();
++  return 0;
++}
++
++/* In theory = { i } is the correct solution.  But it's not easy to scan
++   for that reliably, so just use what we create now.  */
++/* { dg-final { scan-tree-dump "= { i j }" "salias" } } */
++/* { dg-final { cleanup-tree-dump "salias" } } */
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/tree-ssa/alias-19.c gcc-4.3.2/gcc/testsuite/gcc.dg/tree-ssa/alias-19.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/tree-ssa/alias-19.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/tree-ssa/alias-19.c	2008-10-21 05:16:49.000000000 -0700
+@@ -0,0 +1,31 @@
++/* { dg-do run } */
++/* { dg-options "-O2 -fdump-tree-salias-vops" } */
++
++const static int a;
++
++int __attribute__((noinline))
++foo(int i)
++{
++  const int *q;
++  int b;
++  if (i)
++    q = &a;
++  else
++    q = &b;
++  b = 1;
++  /* We should not prune a from the points-to set of q.  */
++  return *q;
++}
++
++extern void abort (void);
++int main()
++{
++  if (foo(1) != 0)
++    abort ();
++  return 0;
++}
++
++/* { dg-final { scan-tree-dump "q_. = { a b }" "salias" } } */
++/* { dg-final { scan-tree-dump "q_., name memory tag: NMT.., is dereferenced, points-to vars: { a b }" "salias" } } */
++/* { dg-final { scan-tree-dump "# VUSE <a_.\\\(D\\\), b_.>" "salias" } } */
++/* { dg-final { cleanup-tree-dump "salias" } } */
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/union-4.c gcc-4.3.2/gcc/testsuite/gcc.dg/union-4.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/union-4.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/union-4.c	2008-12-04 03:46:44.000000000 -0800
+@@ -0,0 +1,23 @@
++/* { dg-do compile } */
++/* { dg-options "-O -fdump-rtl-cse1" } */
++
++extern void abort(void);
++
++typedef unsigned int uint32;
++typedef unsigned long long uint64;
++
++typedef union {
++  uint32 i32;
++  uint64 i64;
++} u64;
++
++void foo(void)
++{
++  u64 data;
++  data.i64 = 1;
++  if (data.i32 != 1)
++    abort ();
++}
++
++/* { dg-final { scan-rtl-dump-not "abort" "cse1" { target i?86-*-* } } } */
++/* { dg-final { cleanup-rtl-dump "cse1" } } */
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/union-5.c gcc-4.3.2/gcc/testsuite/gcc.dg/union-5.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/union-5.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/union-5.c	2008-12-05 00:51:31.000000000 -0800
+@@ -0,0 +1,46 @@
++/* { dg-do run { target i?86-*-* x86_64-*-* } } */
++/* { dg-options "-O -fgcse -fno-split-wide-types" } */
++
++extern void abort(void);
++
++typedef unsigned short int uint16_t;
++typedef unsigned int uint32_t;
++typedef unsigned long long uint64_t;
++
++typedef struct
++{
++  uint16_t thread;
++  uint16_t phase;
++} s32;
++
++typedef union
++{
++  uint32_t i;
++  s32 s;
++} u32;
++
++typedef union
++{
++  uint64_t i;
++  u32 u;
++} u64;
++
++static __attribute__((noinline))
++void foo(int val)
++{
++  u64 data;
++  uint32_t thread;
++
++  data.u.i = 0x10000L;
++  thread = data.u.s.thread;
++  if (val)
++    abort ();
++  if (thread)
++    abort ();
++}
++
++int main(void)
++{
++  foo (0);
++  return 0;
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/var-expand3.c gcc-4.3.2/gcc/testsuite/gcc.dg/var-expand3.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/var-expand3.c	2007-04-22 01:46:58.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/var-expand3.c	2008-12-02 14:11:55.000000000 -0800
+@@ -1,4 +1,4 @@
+-/* { dg-do run { target { powerpc*-*-* && powerpc_altivec_ok } } }} */
++/* { dg-do run { target { powerpc*-*-* && vmx_hw } } }} */
+ /* { dg-options "-O2 -funroll-loops -ffast-math -fvariable-expansion-in-unroller -maltivec -dL" } */
+ 
+ #include "altivec.h"
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/vect/pr33953.c gcc-4.3.2/gcc/testsuite/gcc.dg/vect/pr33953.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/vect/pr33953.c	2007-11-12 01:32:13.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/vect/pr33953.c	2008-12-03 10:10:00.000000000 -0800
+@@ -28,8 +28,10 @@
+    }
+ }
+ 
+-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"  } } */
+-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect"  } } */
++/* Both of the dump scans fail for powerpc, where they were fixed on
++   mainline with r133051.  */
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_align || powerpc*-*-* } } } } */
++/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { xfail { vect_no_align || powerpc*-*-* } } } } */
+ /* { dg-final { cleanup-tree-dump "vect" } } */
+ 
+ 
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.dg/vect/pr36630.c gcc-4.3.2/gcc/testsuite/gcc.dg/vect/pr36630.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.dg/vect/pr36630.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.dg/vect/pr36630.c	2008-09-07 00:14:03.000000000 -0700
+@@ -0,0 +1,17 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target vect_int } */
++
++void
++foo (unsigned char *x, short y)
++{
++  short i;
++
++  i = 2;
++  while (i < y)
++    {
++      x[i - 1] = x[i];
++      i = i + 1;
++    }
++}
++/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
++/* { dg-final { cleanup-tree-dump "vect" } } */
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.misc-tests/dectest.exp gcc-4.3.2/gcc/testsuite/gcc.misc-tests/dectest.exp
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.misc-tests/dectest.exp	2007-08-01 09:25:11.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/gcc.misc-tests/dectest.exp	2008-12-05 12:35:34.000000000 -0800
+@@ -20,7 +20,7 @@
+ #
+ # Contributed by Ben Elliston <bje@au.ibm.com>.
+ 
+-set TORTURE_OPTIONS [list {} -O1 -O2 -O3 -Os -msoft-float]
++set DEC_TORTURE_OPTIONS [list {} -O1 -O2 -O3 -Os -msoft-float]
+ 
+ proc target-specific-flags {} {
+   set result "-frounding-math "
+@@ -30,6 +30,7 @@
+ # Load support procs (borrow these from c-torture).
+ load_lib c-torture.exp
+ load_lib target-supports.exp
++load_lib torture-options.exp
+ 
+ # Skip these tests for targets that don't support this extension.
+ if { ![check_effective_target_dfp] } {
+@@ -516,6 +517,11 @@
+     return
+ }
+ 
++torture-init
++set-torture-options $DEC_TORTURE_OPTIONS
++
+ note "Using tests in $testdir"
+ dfp-run-tests [lsort [glob -nocomplain $testdir/*.decTest]]
+ unset testdir
++
++torture-finish
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.misc-tests/i386-prefetch.exp gcc-4.3.2/gcc/testsuite/gcc.misc-tests/i386-prefetch.exp
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.misc-tests/i386-prefetch.exp	2007-08-01 09:25:11.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/gcc.misc-tests/i386-prefetch.exp	2008-12-05 12:35:34.000000000 -0800
+@@ -84,32 +84,24 @@
+ 
+ # Load support procs.
+ load_lib gcc-dg.exp
++load_lib torture-options.exp
+ 
+ # Initialize harness.
+ dg-init
++torture-init
+ 
+-# Save these.  They are needed if testsuite loops over multiple ABIs
+-set saved_torture_with_loops $torture_with_loops
+-set saved_torture_without_loops $torture_without_loops
+-
+-set torture_with_loops $PREFETCH_NONE
+-set torture_without_loops $PREFETCH_NONE
++set-torture-options $PREFETCH_NONE
+ gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/i386-pf-none-*.c]] ""
+ 
+-set torture_with_loops $PREFETCH_SSE
+-set torture_without_loops $PREFETCH_SSE
++set-torture-options $PREFETCH_SSE
+ gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/i386-pf-sse-*.c]] ""
+ 
+-set torture_with_loops $PREFETCH_3DNOW
+-set torture_without_loops $PREFETCH_3DNOW
++set-torture-options $PREFETCH_3DNOW
+ gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/i386-pf-3dnow-*.c]] ""
+ 
+-set torture_with_loops $PREFETCH_ATHLON
+-set torture_without_loops $PREFETCH_ATHLON
++set-torture-options $PREFETCH_ATHLON
+ gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/i386-pf-athlon-*.c]] ""
+ 
+-set torture_with_loops $saved_torture_with_loops
+-set torture_without_loops $saved_torture_without_loops
+-
++torture-finish
+ dg-finish
+ 
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.target/cris/biap.c gcc-4.3.2/gcc/testsuite/gcc.target/cris/biap.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.target/cris/biap.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.target/cris/biap.c	2008-11-01 15:28:28.000000000 -0700
+@@ -0,0 +1,11 @@
++/* Make sure ADDI is combined and emitted successfully.
++   See also PR37939.  */
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++/* { dg-final { scan-assembler "addi" } } */
++/* { dg-final { scan-assembler-not "lsl" } } */
++
++int xyzzy (int r10, int r11)
++{
++  return r11 * 4 + r10;
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.target/i386/math-torture/math-torture.exp gcc-4.3.2/gcc/testsuite/gcc.target/i386/math-torture/math-torture.exp
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.target/i386/math-torture/math-torture.exp	2006-11-14 14:01:08.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.target/i386/math-torture/math-torture.exp	2008-12-05 12:35:34.000000000 -0800
+@@ -5,7 +5,7 @@
+   return
+ }
+ 
+-set TORTURE_OPTIONS [list \
++set MATH_TORTURE_OPTIONS [list \
+         { -O0 } \
+         { -O0 -mfpmath=387 } \
+         { -O0 -msse -mno-sse2 -mfpmath=sse } \
+@@ -29,8 +29,14 @@
+         { -O2 -msse -mno-sse2 -mfpmath=sse,387 -ffast-math } \
+         { -O2 -msse -msse2 -mfpmath=sse,387 -ffast-math } \
+ ]
++
+ load_lib gcc-dg.exp
++load_lib torture-options.exp
++
++torture-init
++set-torture-options $MATH_TORTURE_OPTIONS
+ 
+ dg-init
+ gcc-dg-runtest [lsort [glob $srcdir/$subdir/*.c]] ""
++torture-finish
+ dg-finish
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.target/i386/mmx-8.c gcc-4.3.2/gcc/testsuite/gcc.target/i386/mmx-8.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.target/i386/mmx-8.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.target/i386/mmx-8.c	2008-11-10 02:43:35.000000000 -0800
+@@ -0,0 +1,137 @@
++/* PR middle-end/37809 */
++
++/* { dg-do run } */
++/* { dg-options "-O2 -mmmx" } */
++
++#include <mmintrin.h>
++
++#include "mmx-check.h"
++
++// Various tests of cases where it is incorrect to optimise vectors as if they
++// were integers of the same width.
++
++extern void abort (void);
++
++void __attribute__ ((noinline))
++Sshift()
++{
++    volatile __m64 y = (__m64) 0xffffffffll;
++    __m64 x = y & (__m64) 0xffffffffll;
++    x = _m_psradi (x, 1);
++    x &= (__m64) 0x80000000ll;
++    if (0 == (long long) x)
++        abort();
++}
++
++#define SHIFTU(F,B,S,T)                         \
++    void F()                                    \
++    {                                           \
++        volatile __m64 y = (__m64) 0ll;         \
++        __m64 x = y | (__m64) (1llu << B);      \
++        if (S > 0)                              \
++            x = _m_pslldi (x, S);               \
++        else                                    \
++            x = _m_psrldi (x, -S);              \
++        if (T > 0)                              \
++            x = _m_pslldi (x, T);               \
++        else                                    \
++            x = _m_psrldi (x, -T);              \
++        x &= (__m64) (1llu << (B + S + T));     \
++        if ((long long) x)                      \
++            abort();                            \
++    }
++
++SHIFTU (shiftU1, 31, 1, -1)
++SHIFTU (shiftU2, 32, -1, 1)
++SHIFTU (shiftU3, 31, 1, 0)
++SHIFTU (shiftU4, 32, -1, 0)
++
++void __attribute__ ((noinline))
++add_1()
++{
++    volatile long long ONE = 1;
++    long long one = ONE;
++
++    __m64 a = (__m64) one;
++    __m64 b = (__m64) -one;
++    __m64 c = a + b;
++    if (0 == (long long) c)
++        abort();
++}
++
++void __attribute__ ((noinline))
++add_2()
++{
++    volatile long long ONE = 1;
++    long long one = ONE;
++
++    __m64 a = (__m64) one;
++    __m64 b = (__m64) -one;
++    __m64 c = _m_paddd (a, b);
++    if (0 == (long long) c)
++        abort();
++}
++
++void __attribute__ ((noinline))
++mult_1()
++{
++    volatile __m64 y = (__m64) 0ll;
++    __m64 x = y | (__m64) (1ll << 32);
++    x = x * (__m64) 1ll;
++    x &= (__m64) (1ll << 32);
++    if (0 != (long long) x)
++        abort();
++}
++
++void __attribute__ ((noinline))
++mult_2()
++{
++    volatile int foo = 1;
++    unsigned long long one = foo & 1;
++
++    __m64 x = (__m64) (one << 16);
++    x *= x;
++    x &= (__m64) (1ll << 32);
++    if (0 != (long long) x)
++        abort();
++}
++
++void __attribute__ ((noinline))
++mult_3()
++{
++    volatile __m64 y = (__m64) (1ll << 32);
++    __m64 a = y;
++    __m64 b = y * (__m64) 1ll;
++    if (((long long) a) == (long long) b)
++        abort();
++}
++
++void __attribute__ ((noinline))
++div_1()
++{
++    volatile __m64 y = (__m64) 0ll;
++    __m64 x = y | (__m64) (1ull << 32);
++    x |= (__m64) 1ull;
++    x = x / x;
++    if (1ll == (long long) x)
++        abort();
++}
++
++
++void mmx_test (void)
++{
++    Sshift();
++    shiftU1();
++    shiftU2();
++    shiftU3();
++    shiftU4();
++
++    add_1();
++    add_2();
++
++    mult_1();
++    mult_2();
++    mult_3();
++
++    div_1();
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.target/i386/pr36438.c gcc-4.3.2/gcc/testsuite/gcc.target/i386/pr36438.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.target/i386/pr36438.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.target/i386/pr36438.c	2008-11-13 14:40:52.000000000 -0800
+@@ -0,0 +1,20 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -mmmx" } */
++
++#include <mmintrin.h>
++
++extern __m64 SetS16 (unsigned short, unsigned short,
++		     unsigned short, unsigned short);
++
++void
++foo (__m64 * dest)
++{
++  __m64 mask = SetS16 (0x00FF, 0xFF00, 0x0000, 0x00FF);
++
++  mask = _mm_slli_si64 (mask, 8);
++  mask = _mm_slli_si64 (mask, 8);
++
++  *dest = mask;
++
++  _mm_empty ();
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.target/i386/pr37184.c gcc-4.3.2/gcc/testsuite/gcc.target/i386/pr37184.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.target/i386/pr37184.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.target/i386/pr37184.c	2008-08-28 06:31:33.000000000 -0700
+@@ -0,0 +1,24 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target ilp32 } */
++/* { dg-options "-O1" } */
++
++static inline unsigned int
++rshift_u_s (unsigned int left, int right)
++{
++  return left >> right;
++}
++
++unsigned int g_15;
++
++int func_29 (int p_30)
++{
++  unsigned int l_31;
++  unsigned long long int l_35 = 0x7736EAE11771B705LL;
++  unsigned int l_36 = 0xEDB553A8L;
++
++  l_31 = g_15;
++  if ((l_31 <
++       (rshift_u_s ((g_15 - (g_15 >= l_35)), (l_36 <= 1)))) + mod_rhs (1))
++    return 1;
++}
++
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.target/i386/pr37191.c gcc-4.3.2/gcc/testsuite/gcc.target/i386/pr37191.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.target/i386/pr37191.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.target/i386/pr37191.c	2008-08-28 06:31:33.000000000 -0700
+@@ -0,0 +1,43 @@
++/* { dg-do compile } */
++/* { dg-options "-O1 -mmmx" } */
++
++#include <mmintrin.h>
++#include <stddef.h>
++#include <stdint.h>
++
++extern const uint64_t ff_bone;
++
++static inline void transpose4x4(uint8_t *dst, uint8_t *src, ptrdiff_t dst_stride, ptrdiff_t src_stride) {
++    __m64 row0 = _mm_cvtsi32_si64(*(unsigned*)(src + (0 * src_stride)));
++    __m64 row1 = _mm_cvtsi32_si64(*(unsigned*)(src + (1 * src_stride)));
++    __m64 row2 = _mm_cvtsi32_si64(*(unsigned*)(src + (2 * src_stride)));
++    __m64 row3 = _mm_cvtsi32_si64(*(unsigned*)(src + (3 * src_stride)));
++    __m64 tmp0 = _mm_unpacklo_pi8(row0, row1);
++    __m64 tmp1 = _mm_unpacklo_pi8(row2, row3);
++    __m64 row01 = _mm_unpacklo_pi16(tmp0, tmp1);
++    __m64 row23 = _mm_unpackhi_pi16(tmp0, tmp1);
++    *((unsigned*)(dst + (0 * dst_stride))) = _mm_cvtsi64_si32(row01);
++    *((unsigned*)(dst + (1 * dst_stride))) = _mm_cvtsi64_si32(_mm_unpackhi_pi32(row01, row01));
++    *((unsigned*)(dst + (2 * dst_stride))) = _mm_cvtsi64_si32(row23);
++    *((unsigned*)(dst + (3 * dst_stride))) = _mm_cvtsi64_si32(_mm_unpackhi_pi32(row23, row23));
++}
++
++static inline void h264_loop_filter_chroma_intra_mmx2(uint8_t *pix, int stride, int alpha1, int beta1)
++{
++    asm volatile(
++        ""
++        :: "r"(pix-2*stride), "r"(pix), "r"((long)stride),
++           "m"(alpha1), "m"(beta1), "m"(ff_bone)
++    );
++}
++
++void h264_h_loop_filter_chroma_intra_mmx2(uint8_t *pix, int stride, int alpha, int beta)
++{
++
++    uint8_t trans[8*4] __attribute__ ((aligned (8)));
++    transpose4x4(trans, pix-2, 8, stride);
++    transpose4x4(trans+4, pix-2+4*stride, 8, stride);
++    h264_loop_filter_chroma_intra_mmx2(trans+2*8, 8, alpha-1, beta-1);
++    transpose4x4(pix-2, trans, stride, 8);
++    transpose4x4(pix-2+4*stride, trans+4, stride, 8);
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.target/i386/pr37197.c gcc-4.3.2/gcc/testsuite/gcc.target/i386/pr37197.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.target/i386/pr37197.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.target/i386/pr37197.c	2008-08-28 06:31:33.000000000 -0700
+@@ -0,0 +1,7 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -msse4" } */
++
++int testl (unsigned long *a, int b)
++{
++  return b ? 1 : __builtin_parityl (*a);
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.target/i386/pr37870.c gcc-4.3.2/gcc/testsuite/gcc.target/i386/pr37870.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.target/i386/pr37870.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.target/i386/pr37870.c	2008-11-05 12:33:54.000000000 -0800
+@@ -0,0 +1,29 @@
++/* PR middle-end/37870 */
++/* { dg-do run } */
++/* { dg-options "-O2" } */
++
++unsigned int
++foo (long double x)
++{
++  struct { char a[8]; unsigned int b:7; } c;
++  __builtin_memcpy (&c, &x, sizeof (c));
++  return c.b;
++}
++
++unsigned int
++bar (long double x)
++{
++  union { struct { char a[8]; unsigned int b:7; } c; long double d; } u;
++  u.d = x;
++  return u.c.b;
++}
++
++int
++main (void)
++{
++  if (foo (1.245L) != bar (1.245L)
++      || foo (245.67L) != bar (245.67L)
++      || foo (0.00567L) != bar (0.00567L))
++    __builtin_abort ();
++  return 0;
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.target/powerpc/altivec-volatile.c gcc-4.3.2/gcc/testsuite/gcc.target/powerpc/altivec-volatile.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.target/powerpc/altivec-volatile.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.target/powerpc/altivec-volatile.c	2008-08-28 12:26:47.000000000 -0700
+@@ -0,0 +1,13 @@
++/* { dg-do compile { target powerpc*-*-* } } */
++/* { dg-require-effective-target powerpc_altivec_ok } */
++/* { dg-options "-maltivec" } */
++
++/* Check that "volatile" type qualifier is propagated to vector type.  */
++
++#include <altivec.h>
++
++vector float *f (volatile vector float *a)
++{
++  return a;  /* { dg-warning "discards qualifiers" } */
++}
++
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.target/powerpc/ppc-negeq0-1.c gcc-4.3.2/gcc/testsuite/gcc.target/powerpc/ppc-negeq0-1.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.target/powerpc/ppc-negeq0-1.c	2006-05-30 08:32:52.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/gcc.target/powerpc/ppc-negeq0-1.c	2008-12-02 14:11:55.000000000 -0800
+@@ -1,15 +1,15 @@
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ 
+-int foo(int x)
++long foo(long x)
+ {
+   return -(x == 0);
+ }
+ 
+-int bar(int x)
++long bar(long x)
+ {
+-  int t = __builtin_clz(x);
+-  return -(t>>5);
++  long t = __builtin_clzl(x);
++  return -(t>>(sizeof(long) == 8 ? 6 : 5));
+ }
+ 
+-/* { dg-final { scan-assembler-not "cntlzw" } } */
++/* { dg-final { scan-assembler-not "cntlz" } } */
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.target/powerpc/pr37168.c gcc-4.3.2/gcc/testsuite/gcc.target/powerpc/pr37168.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.target/powerpc/pr37168.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.target/powerpc/pr37168.c	2008-08-31 05:26:20.000000000 -0700
+@@ -0,0 +1,14 @@
++/* PR target/37168 */
++/* { dg-do compile { target powerpc*-*-* } } */
++/* { dg-require-effective-target powerpc_altivec_ok } */
++/* { dg-options "-O2 -maltivec" } */
++
++#define C 3.68249351546114573519399405666776E-44f
++#define vector __attribute__ ((altivec (vector__)))
++
++vector float
++foo (vector float a)
++{
++  vector float b = __builtin_vec_madd (b, a, (vector float) { C, C, C, C });
++  return b;
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.target/s390/frame-addr1.c gcc-4.3.2/gcc/testsuite/gcc.target/s390/frame-addr1.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.target/s390/frame-addr1.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.target/s390/frame-addr1.c	2008-11-12 10:06:29.000000000 -0800
+@@ -0,0 +1,53 @@
++/* builtin_frame_address(n) with n>0 has always been troublesome ...
++   especially when the S/390 packed stack layout comes into play.  */
++
++/* { dg-do run } */
++/* { dg-options "-O3 -fno-optimize-sibling-calls -mbackchain -mpacked-stack -msoft-float" } */
++
++#ifdef __s390x__
++/* 64bit: 3 words to be saved: backchain, r14 and r15  */
++#define SAVE_AREA_SIZE 3*8
++#else
++/* 32bit: 4 words to be saved: backchain, r13, r14 and r15  */
++#define SAVE_AREA_SIZE 4*4
++#endif
++extern void abort(void);
++
++#define EXPAND_CHECK(n)						\
++  void __attribute__((noinline))				\
++    foo1_##n (void *p)						\
++  {								\
++    if (p - __builtin_frame_address (n) != SAVE_AREA_SIZE)	\
++      abort ();							\
++  }								\
++  void __attribute__((noinline))				\
++    foo2_##n (void *p)						\
++  {								\
++    if (p - __builtin_frame_address (n) != SAVE_AREA_SIZE)	\
++      abort ();							\
++    foo1_##n (__builtin_frame_address (n));			\
++  }								\
++  void __attribute__((noinline))				\
++    foo3_##n ()							\
++  {								\
++    foo2_##n (__builtin_frame_address (n));			\
++  }								\
++  void __attribute__((noinline))				\
++    foo4_##n ()							\
++  {								\
++    foo3_##n ();						\
++  }
++
++EXPAND_CHECK (0)
++EXPAND_CHECK (1)
++EXPAND_CHECK (2)
++
++int
++main ()
++{
++  foo4_0 ();
++  foo4_1 ();
++  foo4_2 ();
++
++  return 0;
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.target/s390/frame-addr2.c gcc-4.3.2/gcc/testsuite/gcc.target/s390/frame-addr2.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.target/s390/frame-addr2.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.target/s390/frame-addr2.c	2008-11-12 10:06:29.000000000 -0800
+@@ -0,0 +1,50 @@
++/* builtin_frame_address(n) with n>0 has always been troublesome.  */
++
++/* { dg-do run } */
++/* { dg-options "-O3 -fno-optimize-sibling-calls -mbackchain" } */
++
++#ifdef __s390x__
++#define SAVE_AREA_SIZE 160
++#else
++#define SAVE_AREA_SIZE 96
++#endif
++extern void abort(void);
++
++#define EXPAND_CHECK(n)						\
++  void __attribute__((noinline))				\
++    foo1_##n (void *p)						\
++  {								\
++    if (p - __builtin_frame_address (n) != SAVE_AREA_SIZE)	\
++      abort ();							\
++  }								\
++  void __attribute__((noinline))				\
++    foo2_##n (void *p)						\
++  {								\
++    if (p - __builtin_frame_address (n) != SAVE_AREA_SIZE)	\
++      abort ();							\
++    foo1_##n (__builtin_frame_address (n));			\
++  }								\
++  void __attribute__((noinline))				\
++    foo3_##n ()							\
++  {								\
++    foo2_##n (__builtin_frame_address (n));			\
++  }								\
++  void __attribute__((noinline))				\
++    foo4_##n ()							\
++  {								\
++    foo3_##n ();						\
++  }
++
++EXPAND_CHECK (0)
++EXPAND_CHECK (1)
++EXPAND_CHECK (2)
++
++int
++main ()
++{
++  foo4_0 ();
++  foo4_1 ();
++  foo4_2 ();
++
++  return 0;
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.target/s390/return-addr1.c gcc-4.3.2/gcc/testsuite/gcc.target/s390/return-addr1.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.target/s390/return-addr1.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.target/s390/return-addr1.c	2008-11-12 10:06:29.000000000 -0800
+@@ -0,0 +1,46 @@
++/* builtin_return_address(n) with n>0 has always been troublesome ...
++   especially when the S/390 packed stack layout comes into play.  */
++
++/* { dg-do run } */
++/* { dg-options "-O3 -fno-optimize-sibling-calls -mbackchain -mpacked-stack -msoft-float" } */
++
++void *addr1;
++
++extern void abort (void);
++
++void * __attribute__((noinline))
++foo1 ()
++{
++  addr1 = __builtin_return_address (2);
++}
++
++void * __attribute__((noinline))
++foo2 ()
++{
++  foo1 ();
++}
++
++void * __attribute__((noinline))
++foo3 ()
++{
++  foo2 ();
++}
++
++void __attribute__((noinline))
++bar ()
++{
++  void *addr2;
++
++  foo3 ();
++  asm volatile ("basr  %0,0\n\t" : "=d" (addr2));
++  /* basr is two bytes in length.  */
++  if (addr2 - addr1 != 2)
++    abort ();
++}
++
++int
++main ()
++{
++  bar();
++  return 0;
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.target/s390/return-addr2.c gcc-4.3.2/gcc/testsuite/gcc.target/s390/return-addr2.c
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.target/s390/return-addr2.c	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gcc.target/s390/return-addr2.c	2008-11-12 10:06:29.000000000 -0800
+@@ -0,0 +1,45 @@
++/* builtin_return_address(n) with n>0 has always been troublesome.  */
++
++/* { dg-do run } */
++/* { dg-options "-O3 -fno-optimize-sibling-calls -mbackchain" } */
++
++void *addr1;
++
++extern void abort (void);
++
++void * __attribute__((noinline))
++foo1 ()
++{
++  addr1 = __builtin_return_address (2);
++}
++
++void * __attribute__((noinline))
++foo2 ()
++{
++  foo1 ();
++}
++
++void * __attribute__((noinline))
++foo3 ()
++{
++  foo2 ();
++}
++
++void __attribute__((noinline))
++bar ()
++{
++  void *addr2;
++
++  foo3 ();
++  asm volatile ("basr  %0,0\n\t" : "=d" (addr2));
++  /* basr is two bytes in length.  */
++  if (addr2 - addr1 != 2)
++    abort ();
++}
++
++int
++main ()
++{
++  bar();
++  return 0;
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gcc.target/x86_64/abi/abi-x86_64.exp gcc-4.3.2/gcc/testsuite/gcc.target/x86_64/abi/abi-x86_64.exp
+--- gcc-4.3.2.orig/gcc/testsuite/gcc.target/x86_64/abi/abi-x86_64.exp	2007-08-01 09:25:11.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/gcc.target/x86_64/abi/abi-x86_64.exp	2008-12-05 12:35:34.000000000 -0800
+@@ -19,6 +19,7 @@
+ 
+ load_lib c-torture.exp
+ load_lib target-supports.exp
++load_lib torture-options.exp
+ 
+ if { (![istarget x86_64-*-*] && ![istarget i?86-*-*])
+      || ![is-effective-target lp64] } then {
+@@ -26,6 +27,8 @@
+ }
+ 
+ 
++torture-init
++set-torture-options $C_TORTURE_OPTIONS
+ set additional_flags "-W -Wall"
+ 
+ foreach src [lsort [find $srcdir/$subdir test_*.c]] {
+@@ -41,3 +44,5 @@
+ 	}
+     }
+ }
++
++torture-finish
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/access_spec_3.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/access_spec_3.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/access_spec_3.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/access_spec_3.f90	2008-09-22 23:25:39.000000000 -0700
+@@ -0,0 +1,34 @@
++! { dg-do compile }
++!
++! Tests the fix for PR36454, where the PUBLIC declaration for
++! aint and bint was rejected because the access was already set.
++!
++! Contributed by Thomas Orgis <thomas.orgis@awi.de>
++
++module base
++        integer :: baseint
++end module
++
++module a
++        use base, ONLY: aint => baseint
++end module
++
++module b
++        use base, ONLY: bint => baseint
++end module
++
++module c
++        use a
++        use b
++        private
++        public :: aint, bint
++end module
++
++program user
++        use c, ONLY: aint, bint
++
++        aint = 3
++        bint = 8
++        write(*,*) aint
++end program
++! { dg-final { cleanup-modules "base a b c" } }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/alloc_comp_assign_7.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/alloc_comp_assign_7.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/alloc_comp_assign_7.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/alloc_comp_assign_7.f90	2008-11-29 09:51:03.000000000 -0800
+@@ -0,0 +1,40 @@
++! { dg-do run }
++!
++! Test the fix for PR37735, in which gfc gagged in the assignement to
++! 'p'.  The array component 'r' caused an ICE.
++!
++! Contributed by Steven Winfield <saw44@cam.ac.uk>
++!
++module PrettyPix_module
++  implicit none
++  type Spline
++     real, allocatable, dimension(:) ::y2
++  end type Spline
++  type Path
++     type(Spline) :: r(3)
++  end type Path
++  type Scene
++     type(path) :: look_at_path
++  end type Scene
++contains
++  subroutine scene_set_look_at_path(this,p)
++    type(scene), intent(inout) :: this
++    type(path),  intent(in)    :: p
++    this%look_at_path = p
++  end subroutine scene_set_look_at_path
++end module PrettyPix_module
++
++  use PrettyPix_module
++  implicit none
++  integer :: i
++  real :: x(3) = [1.0, 2.0, 3.0]
++  type(scene) :: this
++  type(path)  :: p
++  p = path ([spline([x(1)]),spline([x(2)]),spline([x(3)])])
++  call scene_set_look_at_path(this,p)
++  do i = 1, 3
++    if (this%look_at_path%r(i)%y2(1) .ne. x(i)) call abort
++  end do
++end
++
++! { dg-final { cleanup-modules "PrettyPix_module" } }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/alloc_comp_auto_array_2.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/alloc_comp_auto_array_2.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/alloc_comp_auto_array_2.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/alloc_comp_auto_array_2.f90	2008-11-29 12:42:22.000000000 -0800
+@@ -0,0 +1,40 @@
++! { dg-do run }
++! Tests the fix for PR34820, in which the nullification of the
++! automatic array iregion occurred in the caller, rather than the
++! callee.  Since 'nproc' was not available, an ICE ensued. During
++! the bug fix, it was found that the scalar to array assignment
++! of derived types with allocatable components did not work and
++! the fix of this is tested too.
++!
++! Contributed by Toon Moene <toon@moene.indiv.nluug.nl>
++!
++module grid_io
++  type grid_index_region
++    integer, allocatable::lons(:)
++  end type grid_index_region
++contains
++  subroutine read_grid_header()
++    integer :: npiece = 1
++    type(grid_index_region),allocatable :: iregion(:)
++    allocate (iregion(npiece + 1))
++    call read_iregion(npiece,iregion)
++    if (size(iregion) .ne. npiece + 1) call abort
++    if (.not.allocated (iregion(npiece)%lons)) call abort
++    if (allocated (iregion(npiece+1)%lons)) call abort
++    if (any (iregion(npiece)%lons .ne. [(i, i = 1, npiece)])) call abort
++    deallocate (iregion)
++  end subroutine read_grid_header
++
++  subroutine read_iregion (nproc,iregion)
++    integer,intent(in)::nproc
++    type(grid_index_region), intent(OUT)::iregion(1:nproc)
++    integer :: iarg(nproc)
++    iarg = [(i, i = 1, nproc)]
++    iregion = grid_index_region (iarg) !
++  end subroutine read_iregion
++end module grid_io
++
++  use grid_io
++  call read_grid_header
++end
++! { dg-final { cleanup-tree-dump "grid_io" } }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/alloc_comp_basics_1.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/alloc_comp_basics_1.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/alloc_comp_basics_1.f90	2008-04-19 15:30:03.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/alloc_comp_basics_1.f90	2008-11-29 12:42:22.000000000 -0800
+@@ -139,6 +139,6 @@
+     end subroutine check_alloc2
+ 
+ end program alloc
+-! { dg-final { scan-tree-dump-times "builtin_free" 27 "original" } }
++! { dg-final { scan-tree-dump-times "builtin_free" 21 "original" } }
+ ! { dg-final { cleanup-tree-dump "original" } }
+ ! { dg-final { cleanup-modules "alloc_m" } }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/alloc_comp_constructor_4.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/alloc_comp_constructor_4.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/alloc_comp_constructor_4.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/alloc_comp_constructor_4.f90	2008-11-29 12:42:22.000000000 -0800
+@@ -0,0 +1,16 @@
++! { dg-do run }
++! Tests the fix for PR32795, which was primarily about memory leakage is
++! certain combinations of alloctable components and constructors. This test
++! which appears in comment #2 of the PR has the advantage of a wrong
++! numeric result which is symptomatic.
++!
++! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
++!
++  type :: a
++    integer, allocatable :: i(:)
++  end type a
++  type(a) :: x, y
++  x = a ([1, 2, 3])
++  y = a (x%i(:))  ! used to cause a memory leak and wrong result
++  if (any (x%i .ne. [1, 2, 3])) call abort
++end
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/alloc_comp_constructor_5.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/alloc_comp_constructor_5.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/alloc_comp_constructor_5.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/alloc_comp_constructor_5.f90	2008-11-29 12:42:22.000000000 -0800
+@@ -0,0 +1,29 @@
++! { dg-do run }
++! { dg-options "-fdefault-integer-8" }
++! Tests the fix for PR34143, in which the implicit conversion of yy, with
++! fdefault-integer-8, would cause a segfault at runtime.
++!
++! Contributed by Thomas Koenig <tkoenig@gcc.gnu.org>
++!
++Program test_constructor
++    implicit none
++    type :: thytype
++        integer(4) :: a(2,2)
++    end type thytype
++    type :: mytype
++        integer(4), allocatable :: a(:, :)
++        type(thytype), allocatable :: q(:)
++    end type mytype
++    integer, allocatable :: yy(:,:)
++    type (thytype), allocatable :: bar(:)
++    type (mytype) :: x, y
++    x = mytype(yy, bar)
++    if (allocated (x%a) .or. allocated (x%q)) call abort
++    allocate (yy(2,2))
++    allocate (bar(2))
++    yy = reshape ([10,20,30,40],[2,2])
++    bar = thytype (reshape ([1,2,3,4],[2,2]))
++    ! Check that unallocated allocatables work
++    y = mytype(yy, bar)
++    if (.not.allocated (y%a) .or. .not.allocated (y%q)) call abort
++end program test_constructor
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/alloc_comp_constructor_6.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/alloc_comp_constructor_6.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/alloc_comp_constructor_6.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/alloc_comp_constructor_6.f90	2008-11-29 12:42:22.000000000 -0800
+@@ -0,0 +1,38 @@
++! { dg-do run }
++! { dg-options "-fdefault-integer-8 -O2" }
++! Tests the fix for PR34143, where the implicit type
++! conversion in the derived type constructor would fail,
++! when 'yy' was not allocated.  The testscase is an
++! extract from alloc_comp_constructor.f90.
++!
++! Reported by Thomas Koenig <tkoenig@gcc.gnu.org>
++!
++Program test_constructor
++    implicit none
++    type :: thytype
++        integer(4) :: a(2,2)
++    end type thytype
++    type :: mytype
++        integer(4), allocatable :: a(:, :)
++        type(thytype), allocatable :: q(:)
++    end type mytype
++    integer, allocatable :: yy(:,:)
++    type (thytype), allocatable :: bar(:)
++    call non_alloc
++    call alloc
++contains
++    subroutine non_alloc
++      type (mytype) :: x
++      x = mytype(yy, bar)
++      if (allocated (x%a) .or. allocated (x%q)) call abort
++    end subroutine non_alloc
++    subroutine alloc
++      type (mytype) :: x
++      allocate (yy(2,2))
++      allocate (bar(2))
++      yy = reshape ([10,20,30,40],[2,2])
++      bar = thytype (reshape ([1,2,3,4],[2,2]))
++      x = mytype(yy, bar)
++      if (.not.allocated (x%a) .or. .not.allocated (x%q)) call abort
++    end subroutine alloc
++end program test_constructor
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/allocatable_function_4.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/allocatable_function_4.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/allocatable_function_4.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/allocatable_function_4.f90	2008-09-25 09:18:45.000000000 -0700
+@@ -0,0 +1,56 @@
++! { dg-do compile }
++! { dg-options "-fdump-tree-original" }
++!
++! PR fortran/37626
++! Contributed by Rich Townsend
++!
++! The problem was an ICE when trying to deallocate the
++! result variable "x_unique".
++!
++function unique_A (x, sorted) result (x_unique)
++  implicit none
++  character(*), dimension(:), intent(in)       :: x
++  logical, intent(in), optional                :: sorted
++  character(LEN(x)), dimension(:), allocatable :: x_unique
++
++  logical                                      :: sorted_
++  character(LEN(x)), dimension(SIZE(x))        :: x_sorted
++  integer                                      :: n_x
++  logical, dimension(SIZE(x))                  :: mask
++
++  integer, external                            :: b3ss_index
++
++! Set up sorted_
++
++  if(PRESENT(sorted)) then
++     sorted_ = sorted
++  else
++     sorted_ = .FALSE.
++  endif
++
++! If necessary, sort x
++
++  if(sorted_) then
++     x_sorted = x
++  else
++     x_sorted = x(b3ss_index(x))
++  endif
++
++! Set up the unique array
++
++  n_x = SIZE(x)
++
++  mask = (/.TRUE.,x_sorted(2:n_x) /= x_sorted(1:n_x-1)/)
++
++  allocate(x_unique(COUNT(mask)))
++
++  x_unique = PACK(x_sorted, MASK=mask)
++
++! Finish
++
++  return
++end function unique_A
++
++! { dg-final { scan-tree-dump-times "__builtin_free" 5 "original" } }
++! { dg-final { cleanup-tree-dump "original" } }
++
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/ambiguous_specific_2.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/ambiguous_specific_2.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/ambiguous_specific_2.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/ambiguous_specific_2.f90	2008-09-22 23:25:39.000000000 -0700
+@@ -0,0 +1,42 @@
++! { dg-do compile }
++! Checks the fix for PR33542 does not throw an error if there is no
++! ambiguity in the specific interfaces of foo.
++!
++! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
++!
++MODULE M1
++   INTERFACE FOO
++     MODULE PROCEDURE FOO
++   END INTERFACE
++CONTAINS
++   SUBROUTINE FOO(I)
++     INTEGER, INTENT(IN) :: I
++     WRITE(*,*) 'INTEGER'
++   END SUBROUTINE FOO
++END MODULE M1
++
++MODULE M2
++   INTERFACE FOO
++     MODULE PROCEDURE FOOFOO
++   END INTERFACE
++CONTAINS
++   SUBROUTINE FOOFOO(R)
++     REAL, INTENT(IN) :: R
++     WRITE(*,*) 'REAL'
++   END SUBROUTINE FOOFOO
++END MODULE M2
++
++PROGRAM P
++   USE M1
++   USE M2
++   implicit none
++   external bar
++   CALL FOO(10)
++   CALL FOO(10.)
++   call bar (foo) 
++END PROGRAM P
++
++SUBROUTINE bar (arg)
++  EXTERNAL arg
++END SUBROUTINE bar
++! { dg-final { cleanup-modules "m1 m2" } }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/arithmetic_overflow_1.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/arithmetic_overflow_1.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/arithmetic_overflow_1.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/arithmetic_overflow_1.f90	2008-11-24 11:13:12.000000000 -0800
+@@ -0,0 +1,10 @@
++! { dg-do compile }
++! Fixes PR37787 where the arithmetic overflow was not detected and an ICE ensued.
++!
++! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
++!
++program bug
++  implicit none
++  integer(1) :: a(2) = (/ Z'FF', Z'FF' /) ! { dg-error "Arithmetic overflow" }
++  print*, a
++end program bug
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/array_function_2.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/array_function_2.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/array_function_2.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/array_function_2.f90	2008-09-11 12:13:59.000000000 -0700
+@@ -0,0 +1,32 @@
++! { dg-do run }
++! { dg-options "-fbounds-check" }
++
++! PR fortran/37199
++! We used to produce wrong (segfaulting) code for this one because the
++! temporary array for the function result had wrong bounds.
++
++! Contributed by Gavin Salam <salam@lpthe.jussieu.fr>
++
++program bounds_issue
++  implicit none
++  integer, parameter  :: dp = kind(1.0d0)
++  real(dp), pointer :: pdf0(:,:), dpdf(:,:)
++
++  allocate(pdf0(0:282,-6:7))
++  allocate(dpdf(0:282,-6:7))  ! with dpdf(0:283,-6:7) [illegal] error disappears
++  !write(0,*) lbound(dpdf), ubound(dpdf)
++  dpdf = tmp_PConv(pdf0)
++
++contains
++  function tmp_PConv(q_in) result(Pxq)
++    real(dp),      intent(in) :: q_in(0:,-6:)
++    real(dp)                  :: Pxq(0:ubound(q_in,dim=1),-6:7)
++    Pxq = 0d0
++    !write(0,*) lbound(q_in), ubound(q_in)
++    !write(0,*) lbound(Pxq),  ubound(Pxq)
++    return
++  end function tmp_PConv
++
++end program bounds_issue
++
++! { dg-final { cleanup-modules "bounds_issue" } }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/array_section_2.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/array_section_2.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/array_section_2.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/array_section_2.f90	2008-11-24 13:36:05.000000000 -0800
+@@ -0,0 +1,16 @@
++! { dg-do compile }
++! { dg-options "-fdump-tree-original" }
++!
++! PR38033 - size(a) was not stabilized correctly and so the expression was
++! evaluated twice outside the loop and then within the scalarization loops.
++!
++! Contributed by Thomas Bruel  <tmbdev@gmail.com>
++!
++program test
++   integer, parameter :: n = 100
++   real, pointer :: a(:),temp(:)  ! pointer or allocatable have the same effect
++   allocate(a(n), temp(n))
++   temp(1:size(a)) = a
++end program
++! { dg-final { scan-tree-dump-times "size0" 1 "original" } }
++! { dg-final { cleanup-tree-dump "original" } }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/array_temporaries_3.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/array_temporaries_3.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/array_temporaries_3.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/array_temporaries_3.f90	2008-11-24 13:50:06.000000000 -0800
+@@ -0,0 +1,31 @@
++! { dg-do run }
++! PR38119 - The scalarizer got the loop size wrong
++! for the temporary coming from the call to 'same'.
++!
++! Contributed by Mikael Morin <mikael.morin@tele2.fr>
++! based on a program by Vivek Rao.
++!
++module bar
++  implicit none
++  character(len = 2) :: c(1)
++contains
++  elemental function trim_append (xx,yy) result(xy)
++    character (len = *), intent(in) :: xx,yy
++    character (len = len (xx) + len (yy)) :: xy
++    xy = trim (xx) // trim (yy)
++  end function trim_append
++  function same(xx) result(yy)
++    character (len = *), intent(in) :: xx(:)
++    character (len = len (xx))       :: yy(size (xx))
++    yy = xx
++  end function same
++  subroutine xmain()
++    c =  trim_append(["a"],same(["b"]))  ! The problem occurred here
++  end subroutine xmain
++end module bar
++  use bar
++  call xmain
++  if (c(1) .ne. "ab") call abort
++end
++! { dg-final { cleanup-modules "bar" } }
++
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/boz_11.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/boz_11.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/boz_11.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/boz_11.f90	2008-09-14 02:57:50.000000000 -0700
+@@ -0,0 +1,13 @@
++! { dg-do run }
++
++! PR fortran/36214
++! For BOZ-initialization of floats, the precision used to be wrong sometimes.
++
++implicit none
++   real, parameter :: r = 0.0
++   real(kind=8), parameter :: rd = real (z'00000000&
++                                          &402953FD', 8)
++
++   if (real (z'00000000&
++              &402953FD', 8) /= rd) call abort
++end
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/boz_12.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/boz_12.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/boz_12.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/boz_12.f90	2008-09-14 02:57:50.000000000 -0700
+@@ -0,0 +1,18 @@
++! { dg-do run }
++
++! PR fortran/36214
++! For BOZ-initialization of floats, the precision used to be wrong sometimes.
++
++   implicit none
++   real(4) r
++   real(8) rd
++   complex(8) z
++   rd = &
++    real (b'00000000000000000000000000000000&
++           &01000000001010010101001111111101',8)
++   z  = &
++    cmplx(b'00000000000000000000000000000000&
++           &01000000001010010101001111111101',0,8)
++   r = 0.
++   if (z /= rd) call abort
++   end
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/boz_9.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/boz_9.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/boz_9.f90	2007-12-20 00:13:09.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/boz_9.f90	2008-09-14 02:57:50.000000000 -0700
+@@ -22,13 +22,13 @@
+ 
+ if (r2c /= 13107.0) call abort()
+ if (rc  /= 1.83668190E-41) call abort()
+-if (dc /= 0.30102999566398120) call abort()
++if (dc /= 0.30102999566398120d0) call abort()
+ if (real(z1c) /= 2.94272678E-44 .or. aimag(z1c) /= -4.0) call abort()
+ if (real(z2c) /= 5.0 .or. aimag(z2c) /= 9.48679060E-43) call abort()
+ 
+ if (r2 /= 13107.0) call abort()
+ if (r  /= 1.83668190E-41) call abort()
+-if (d /= 0.30102999566398120) call abort()
++if (d /= 0.30102999566398120d0) call abort()
+ if (real(z1) /= 2.94272678E-44 .or. aimag(z1) /= -4.0) call abort()
+ if (real(z2) /= 5.0 .or. aimag(z2) /= 9.48679060E-43) call abort()
+ 
+@@ -40,7 +40,7 @@
+ 
+ if (r2 /= 13107.0) call abort()
+ if (r  /= 1.83668190E-41) call abort()
+-if (d /= 0.30102999566398120) call abort()
++if (d /= 0.30102999566398120d0) call abort()
+ if (real(z1) /= 2.94272678E-44 .or. aimag(z1) /= -4.0) call abort()
+ if (real(z2) /= 5.0 .or. aimag(z2) /= 9.48679060E-43) call abort()
+ 
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/char_length_14.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/char_length_14.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/char_length_14.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/char_length_14.f90	2008-12-14 08:07:46.000000000 -0800
+@@ -0,0 +1,23 @@
++! { dg-do run }
++! PR35937, in which letting the length of 'c' to kind = 8 would
++! screw up the interface and would cause an ICE. Note that this is
++! actually the example of comment #4.
++!
++! Contributed by Thomas Koenig <tkoenig@gcc.gnu.org>
++!
++program main
++  implicit none
++  if (f5 ('1') .ne. "a") call abort
++  if (len (f5 ('1')) .ne. 1) call abort
++  if (f5 ('4') .ne. "abcd") call abort
++  if (len (f5 ('4')) .ne. 4) call abort
++contains
++  function f5 (c)
++    character(len=1_8) :: c
++    character(len=scan('123456789', c)) :: f5
++    integer :: i
++    do i = 1, len (f5)
++       f5(i:i) = char (i+96)
++    end do
++  end function f5
++end program main
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/data_array_5.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/data_array_5.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/data_array_5.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/data_array_5.f90	2008-09-03 05:25:57.000000000 -0700
+@@ -0,0 +1,14 @@
++! { dg-do compile }
++! Tests the fix for PR36371, in which the locus for the errors pointed to
++! the paramter declaration rather than the data statement.
++!
++! Contributed by Dominique d'Humieres <dominiq@lps.ens.fr>
++!
++program chkdata
++  character(len=3), parameter :: mychar(3) = [ "abc", "def", "ghi" ]
++  integer, parameter :: myint(3) = [1, 2, 3]
++  integer :: c(2)
++  character(4) :: i(2)
++  data c / mychar(1), mychar(3) / ! { dg-error "Incompatible types in assignment" }
++  data i / myint(3), myint(2) /   ! { dg-error "Incompatible types in assignment" }
++end program chkdata
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/dependency_22.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/dependency_22.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/dependency_22.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/dependency_22.f90	2008-10-19 05:56:41.000000000 -0700
+@@ -0,0 +1,28 @@
++! { dg-do run }
++!
++! Test the fix for PR37723 in which the array element reference masked the dependency
++! by inhibiting the test.
++!
++! Contributed by Dick Hendrickson <dick.hendrickson@gmail.com>
++!
++      program try_cg0071
++      type seq
++          integer ia(10)
++      end type
++      TYPE(SEQ) UDA1R
++      type(seq) uda(1)
++
++      do j1 = 1,10
++        uda1r%ia(j1) = j1
++      enddo
++
++      uda = uda1r
++      UDA(1)%IA(1:9) = UDA(1)%IA(9:1:-1)+1
++
++      DO J1 = 1,9
++         if (UDA1R%IA(10-J1)+1 /=  Uda(1)%IA(J1)) call abort()
++      ENDDO
++
++      end
++
++
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/dummy_procedure_3.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/dummy_procedure_3.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/dummy_procedure_3.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/dummy_procedure_3.f90	2008-11-24 11:18:39.000000000 -0800
+@@ -0,0 +1,40 @@
++! { dg-do run }
++! PR37926 - the interface did not transfer the formal
++! argument list for the call to 'asz' in the specification of 'p'.
++!
++! Contributed by Janus Weil  <janus@gcc.gnu.org>
++!
++module m
++contains
++  pure integer function mysize(a)
++    integer,intent(in) :: a(:)
++    mysize = size(a)
++  end function
++end module
++
++program prog
++  use m
++  implicit none
++  character(3) :: str
++  integer :: i(3) = (/1,2,3/)
++  str = p(i,mysize)
++  if (len(str) .ne. 3) call abort
++  if (str .ne. "BCD") call abort
++contains
++  function p(y,asz)
++    implicit none
++    integer :: y(:)
++    interface
++      pure integer function asz(c)
++        integer,intent(in) :: c(:)
++      end function
++    end interface
++    character(asz(y)) p
++    integer i
++    do i=1,asz(y)
++      p(i:i) = achar(iachar('A')+y(i))
++    end do
++  end function
++end
++! { dg-final { cleanup-modules "m" } }
++
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/elemental_dependency_1.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/elemental_dependency_1.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/elemental_dependency_1.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/elemental_dependency_1.f90	2008-11-24 11:13:12.000000000 -0800
+@@ -0,0 +1,83 @@
++! { dg-do run }
++! { dg-options "-fdump-tree-original" }
++!
++! PR fortran/35681
++! Test the use of temporaries in case of elemental subroutines.
++
++PROGRAM main
++  IMPLICIT NONE
++  INTEGER, PARAMETER :: sz = 5
++  INTEGER :: i
++  INTEGER :: a(sz) = (/ (i, i=1,sz) /)
++  INTEGER :: b(sz)
++
++  b = a
++  CALL double(a(sz-b+1), a) ! { dg-warning "might interfere with actual" }
++  ! Don't check the result, as the above is invalid 
++  ! and might produce unexpected results (overlapping vector subscripts).
++
++
++  b = a
++  CALL double (a, a)               ! same range, no temporary
++  IF (ANY(a /= 2*b)) CALL abort
++
++
++  b = a
++  CALL double (a+1, a)             ! same range, no temporary
++  IF (ANY(a /= 2*b+2)) CALL abort 
++
++
++  b = a
++  CALL double ((a(1:sz)), a(1:sz)) ! same range, no temporary
++  IF (ANY(a /= 2*b)) CALL abort
++
++
++  b = a
++  CALL double(a(1:sz-1), a(2:sz)) ! { dg-warning "might interfere with actual" }
++  ! Don't check the result, as the above is invalid, 
++  ! and might produce unexpected results (arguments overlap). 
++
++
++  b = a
++  CALL double((a(1:sz-1)), a(2:sz))     ! paren expression, temporary created
++! { dg-final { scan-tree-dump-times "A\.16\\\[4\\\]" 1 "original" } }
++
++  IF (ANY(a /= (/ b(1), (2*b(i), i=1,sz-1) /))) CALL abort 
++
++
++  b = a
++  CALL double(a(1:sz-1)+1, a(2:sz))     ! op expression, temporary created
++! { dg-final { scan-tree-dump-times "A\.25\\\[4\\\]" 1 "original" } }
++
++  IF (ANY(a /= (/ b(1), (2*b(i)+2, i=1,sz-1) /))) CALL abort 
++
++
++  b = a
++  CALL double(self(a), a) ! same range, no temporary
++  IF (ANY(a /= 2*b)) CALL abort
++
++
++  b = a
++  CALL double(self(a(1:sz-1)), a(2:sz))  ! function expr, temporary created
++! { dg-final { scan-tree-dump-times "A\.37\\\[4\\\]" 1 "original" } }
++
++  IF (ANY(a /= (/ b(1), (2*b(i), i=1,sz-1) /))) CALL abort 
++
++
++CONTAINS
++  ELEMENTAL SUBROUTINE double(a, b)
++    IMPLICIT NONE
++    INTEGER, INTENT(IN) :: a
++    INTEGER, INTENT(OUT) :: b
++    b = 2 * a
++  END SUBROUTINE double
++  ELEMENTAL FUNCTION self(a)
++    IMPLICIT NONE
++    INTEGER, INTENT(IN) :: a
++    INTEGER :: self
++    self = a
++  END FUNCTION self
++END PROGRAM main
++
++! { dg-final { scan-tree-dump-times "_gfortran_internal_unpack" 3 "original" } }
++! { dg-final { cleanup-tree-dump "original" } }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/entry_18.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/entry_18.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/entry_18.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/entry_18.f90	2008-09-24 01:04:26.000000000 -0700
+@@ -0,0 +1,36 @@
++! { dg-do compile }
++! Test fix for PR37583, in which:
++! (i) the reference to glocal prior to the ENTRY caused an internal
++! error and
++! (ii) the need for a RECURSIVE attribute was ignored.
++!
++! Contributed by Arjen Markus <arjen.markus@wldelft.nl>
++!
++module gsub
++contains
++recursive subroutine suba( g )   ! prefix with "RECURSIVE"
++   interface
++       real function g(x)
++       real x
++       end function
++   end interface
++   real :: x, y
++   call mysub( glocala )
++   return
++entry glocala( x, y )
++   y = x
++end subroutine
++subroutine subb( g )
++   interface
++       real function g(x)
++       real x
++       end function
++   end interface
++   real :: x, y
++   call mysub( glocalb ) ! { dg-error "is recursive" }
++   return
++entry glocalb( x, y )
++   y = x
++end subroutine
++end module
++! { dg-final { cleanup-modules "gsub" } }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/generic_17.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/generic_17.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/generic_17.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/generic_17.f90	2008-09-22 23:25:39.000000000 -0700
+@@ -0,0 +1,40 @@
++! { dg-do compile }
++! Test the patch for PR36374 in which the different
++! symbols for 'foobar' would be incorrectly flagged as
++! ambiguous in foo_mod.
++!
++! Contributed by Salvatore Filippone  <sfilippone@uniroma2.it>
++!
++module s_foo_mod
++  type s_foo_type
++    real(kind(1.e0)) :: v
++  end type s_foo_type
++  interface foobar
++    subroutine s_foobar(x)
++      import 
++      type(s_foo_type), intent (inout) :: x
++    end subroutine s_foobar
++  end interface
++end module s_foo_mod
++
++module d_foo_mod
++  type d_foo_type
++    real(kind(1.d0)) :: v
++  end type d_foo_type
++  interface foobar
++    subroutine d_foobar(x)
++      import  
++      type(d_foo_type), intent (inout) :: x
++    end subroutine d_foobar
++  end interface
++end module d_foo_mod
++
++module foo_mod
++  use s_foo_mod
++  use d_foo_mod
++end module foo_mod
++
++subroutine s_foobar(x)  
++  use foo_mod
++end subroutine s_foobar
++! { dg-final { cleanup-modules "s_foo_mod d_foo_mod foo_mod" } }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/generic_actual_arg.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/generic_actual_arg.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/generic_actual_arg.f90	2007-10-23 20:39:03.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/generic_actual_arg.f90	2008-09-22 23:25:39.000000000 -0700
+@@ -2,11 +2,14 @@
+ ! Tests fix for PR20886 in which the passing of a generic procedure as
+ ! an actual argument was not detected.
+ !
++! The second module and the check that CALCULATION2 is a good actual
++! argument was added following the fix for PR26374.
++!
+ ! Contributed by Joost VandeVondele  <jv244@cam.ac.uk> 
+ !
+ MODULE TEST
+ INTERFACE CALCULATION
+-  MODULE PROCEDURE C1,C2
++  MODULE PROCEDURE C1, C2
+ END INTERFACE
+ CONTAINS
+ SUBROUTINE C1(r)
+@@ -16,11 +19,27 @@
+  REAL :: r
+ END SUBROUTINE
+ END MODULE TEST
++
++MODULE TEST2
++INTERFACE CALCULATION2
++  MODULE PROCEDURE CALCULATION2, C3
++END INTERFACE
++CONTAINS
++SUBROUTINE CALCULATION2(r)
++ INTEGER :: r
++END SUBROUTINE
++SUBROUTINE C3(r)
++ REAL :: r
++END SUBROUTINE
++END MODULE TEST2
+     
+ USE TEST
+-CALL F(CALCULATION) ! { dg-error "GENERIC procedure" } 
++USE TEST2
++CALL F(CALCULATION)  ! { dg-error "GENERIC procedure" } 
++
++CALL F(CALCULATION2) ! OK because there is a same name specific 
+ END
+ 
+ SUBROUTINE F()
+ END SUBROUTINE
+-! { dg-final { cleanup-modules "TEST" } }
++! { dg-final { cleanup-modules "TEST TEST2" } }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/host_assoc_call_2.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/host_assoc_call_2.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/host_assoc_call_2.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/host_assoc_call_2.f90	2008-09-24 01:27:27.000000000 -0700
+@@ -0,0 +1,18 @@
++! { dg-do compile }
++! Tests the fix for PR36700, in which the call to the function would
++! cause an ICE.
++!
++! Contributed by <terry@chem.gu.se>
++!
++module Diatoms
++  implicit none
++contains
++  function InitialDiatomicX () result(v4)    ! { dg-error "has a type" }
++    real(kind = 8), dimension(4) :: v4
++    v4 = 1
++  end function InitialDiatomicX
++  subroutine FindDiatomicPeriod
++    call InitialDiatomicX ()    ! { dg-error "which is not consistent with the CALL" }
++  end subroutine FindDiatomicPeriod
++end module Diatoms
++! { dg-final { cleanup-modules "Diatoms" } }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/host_assoc_call_3.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/host_assoc_call_3.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/host_assoc_call_3.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/host_assoc_call_3.f90	2008-11-07 22:19:12.000000000 -0800
+@@ -0,0 +1,44 @@
++! { dg-do compile }
++!
++! PR fortran/37445, in which the contained 'putaline' would be
++! ignored and no specific interface found in the generic version.
++!
++! Contributed by Norman S Clerman < clerman@fuse.net>
++!
++MODULE M1
++  INTERFACE putaline
++    MODULE PROCEDURE S1,S2
++  END INTERFACE
++CONTAINS
++  SUBROUTINE S1(I)
++  END SUBROUTINE
++  SUBROUTINE S2(F)
++  END SUBROUTINE
++END MODULE
++
++MODULE M2
++  USE M1
++CONTAINS
++  SUBROUTINE S3
++    integer :: check = 0
++    CALL putaline()
++    if (check .ne. 1) call abort
++    CALL putaline("xx")
++    if (check .ne. 2) call abort
++!  CALL putaline(1.0) ! => this now causes an error, as it should 
++  CONTAINS
++    SUBROUTINE putaline(x)
++      character, optional :: x
++      if (present(x)) then
++        check = 2
++      else
++        check = 1
++      end if
++    END SUBROUTINE
++  END SUBROUTINE
++END MODULE
++
++  USE M2
++  CALL S3
++END
++! { dg-final { cleanup-modules "M1 M2" } }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/host_assoc_call_4.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/host_assoc_call_4.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/host_assoc_call_4.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/host_assoc_call_4.f90	2008-11-07 22:19:12.000000000 -0800
+@@ -0,0 +1,48 @@
++! { dg-do compile }
++!
++! PR fortran/37445, in which the first version of the fix regressed on the 
++! calls to GetBasicElementData; picking up the local GetBasicElementData instead.
++!
++! Contributed by Norman S Clerman < clerman@fuse.net>
++! and reduced by Tobias Burnus <burnus@gcc.gnu.org>
++!
++MODULE ErrElmnt
++  IMPLICIT NONE
++  TYPE :: TErrorElement
++    integer :: i
++  end type TErrorElement
++contains
++  subroutine GetBasicData ( AnElement, ProcedureName, ErrorNumber,    &
++                            Level, Message, ReturnStat)
++    type (TErrorElement) :: AnElement
++    character (*, 1), optional ::       &
++      ProcedureName
++    integer (4), optional :: ErrorNumber
++    character (*, 1), optional :: Level
++    character (*, 1), optional :: Message
++    integer (4), optional :: ReturnStat
++  end subroutine GetBasicData
++end module ErrElmnt
++
++MODULE ErrorMod
++  USE ErrElmnt, only: GetBasicElementData => GetBasicData , TErrorElement
++  IMPLICIT NONE
++contains
++  subroutine GetBasicData ()
++    integer (4) :: CallingStat, LocalErrorNum
++    character (20, 1) :: LocalErrorMessage
++    character (20, 1) :: LocalProcName
++    character (20, 1) :: Locallevel
++    type (TErrorElement) :: AnElement
++    call GetBasicElementData (AnElement, LocalProcName, LocalErrorNum, LocalLevel, LocalErrorMessage, CallingStat)
++  end subroutine GetBasicData
++  SUBROUTINE WH_ERR ()
++    integer (4) :: ErrorNumber, CallingStat
++    character (20, 1) :: ProcedureName
++    character (20, 1) :: ErrorLevel
++    character (20, 1) :: ErrorMessage
++    type (TErrorElement) :: TargetElement
++    call GetBasicElementData (TargetElement, ProcedureName, ErrorNumber, ErrorLevel, ErrorMessage, CallingStat)
++  end subroutine WH_ERR
++end module ErrorMod
++! { dg-final { cleanup-modules "ErrElmnt ErrorMod" } }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/host_assoc_call_5.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/host_assoc_call_5.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/host_assoc_call_5.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/host_assoc_call_5.f90	2008-11-08 06:17:35.000000000 -0800
+@@ -0,0 +1,21 @@
++! { dg-do compile }
++! Tests the fix for PR37597, where the reference to other_sub would generate
++! Error: Symbol 'other_sub' at (1) has no IMPLICIT type.
++!
++! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
++! from a report on clf by Rich Townsend <rhdt@barvoidtol.udel.edu>
++!
++module foo
++   implicit none
++contains
++   subroutine main_sub ()
++     call internal_sub()
++   contains
++     subroutine internal_sub()
++       call QAG(other_sub)
++     end subroutine internal_sub
++   end subroutine main_sub
++   subroutine other_sub ()
++   end subroutine other_sub
++end module foo
++! { dg-final { cleanup-modules "foo" } }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/host_assoc_function_4.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/host_assoc_function_4.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/host_assoc_function_4.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/host_assoc_function_4.f90	2008-11-07 22:19:12.000000000 -0800
+@@ -0,0 +1,30 @@
++! { dg-do run }
++!
++! PR fortran/37445, in which the contained 's1' would be
++! ignored and the use+host associated version used.
++!
++! Contributed by Norman S Clerman < clerman@fuse.net>
++!
++MODULE M1
++CONTAINS
++  integer function S1 ()
++    s1 = 0
++  END function
++END MODULE
++
++MODULE M2
++  USE M1
++CONTAINS
++  SUBROUTINE S2
++    if (s1 () .ne. 1) call abort
++  CONTAINS
++    integer function S1 ()
++      s1 = 1
++    END function
++  END SUBROUTINE
++END MODULE
++
++  USE M2
++  CALL S2
++END
++! { dg-final { cleanup-modules "M1 M2" } }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/host_assoc_types_2.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/host_assoc_types_2.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/host_assoc_types_2.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/host_assoc_types_2.f90	2008-09-24 01:12:47.000000000 -0700
+@@ -0,0 +1,69 @@
++! { dg-do compile }
++! Tests the fix for PR35945, the host association of overloaded_type_s
++! would be incorrectly blocked by the use associated overloaded_type.
++!
++! Contributed by Jonathan Hogg  <J.Hogg@rl.ac.uk>
++!
++module dtype
++   implicit none
++
++   type overloaded_type
++      double precision :: part
++   end type
++
++   interface overloaded_sub
++      module procedure overloaded_sub_d
++   end interface
++
++contains
++   subroutine overloaded_sub_d(otype)
++      type(overloaded_type), intent(in) :: otype
++
++      print *, "d type = ", otype%part
++   end subroutine
++end module
++
++module stype
++   implicit none
++
++   type overloaded_type
++      real :: part
++   end type
++
++   interface overloaded_sub
++      module procedure overloaded_sub_s
++   end interface
++
++contains
++   subroutine overloaded_sub_s(otype)
++      type(overloaded_type), intent(in) :: otype
++
++      print *, "s type = ", otype%part
++   end subroutine
++end module
++
++program test
++   use stype, overloaded_type_s => overloaded_type
++   use dtype, overloaded_type_d => overloaded_type
++   implicit none
++
++   type(overloaded_type_s) :: sval
++   type(overloaded_type_d) :: dval
++
++   sval%part = 1
++   dval%part = 2
++
++   call fred(sval, dval)
++
++contains
++   subroutine fred(sval, dval)
++      use stype
++
++      type(overloaded_type_s), intent(in) :: sval  ! This caused an error
++      type(overloaded_type_d), intent(in) :: dval
++
++      call overloaded_sub(sval)
++      call overloaded_sub(dval)
++   end subroutine
++end program
++! { dg-final { cleanup-modules "stype dtype" } }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/implicit_12.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/implicit_12.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/implicit_12.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/implicit_12.f90	2008-09-17 04:56:09.000000000 -0700
+@@ -0,0 +1,21 @@
++! { dg-do compile }
++
++! PR fortran/35770
++! Implicit declaration hides type of internal function.
++
++! Contributed by Dick Hendrickson <dick.hendrickson@gmail.com>
++
++IMPLICIT CHARACTER (s)
++REAL :: RDA
++
++RDA = S_REAL_SQRT_I(42) ! { dg-bogus "Can't convert" }
++
++CONTAINS
++
++REAL FUNCTION S_REAL_SQRT_I(I) RESULT (R)
++  IMPLICIT NONE
++  INTEGER :: I
++  R = 0.0
++END FUNCTION S_REAL_SQRT_I
++
++END
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/minmaxval_1.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/minmaxval_1.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/minmaxval_1.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/minmaxval_1.f90	2008-11-13 22:14:46.000000000 -0800
+@@ -0,0 +1,29 @@
++! { dg-do compile }
++! Tests the fix for PR37836 in which the specification expressions for
++! y were not simplified because there was no simplifier for minval and
++! maxval.
++!
++! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
++!
++! nint(exp(3.0)) is equal to 20 :-)
++!
++      function fun4a()
++         integer fun4a
++         real y(minval([25, nint(exp(3.0)), 15]))
++
++        fun4a = size (y, 1)
++       end function fun4a
++
++      function fun4b()
++         integer fun4b
++         real y(maxval([25, nint(exp(3.0)), 15]))
++         save
++
++         fun4b = size (y, 1)
++      end function fun4b
++
++      EXTERNAL fun4a, fun4b
++      integer fun4a, fun4b
++      if (fun4a () .ne. 15) call abort 
++      if (fun4b () .ne. 25) call abort 
++      end
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/module_equivalence_4.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/module_equivalence_4.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/module_equivalence_4.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/module_equivalence_4.f90	2008-10-05 01:41:00.000000000 -0700
+@@ -0,0 +1,29 @@
++! { dg-do compile }
++! This checks the fix for PR37706 in which the equivalence would be
++! inserted into the 'nudata' namespace with the inevitable consequences.
++!
++! Contributed by Lester Petrie <petrielmjr@ornl.gov>
++!
++module data_C 
++    integer, dimension(200) :: l  = (/(201-i, i = 1,200)/)
++    integer :: l0
++    integer :: l24, l27, l28, l29
++    equivalence ( l(1), l0 )
++  end module data_C 
++
++subroutine nudata(nlibe, a, l) 
++  USE data_C, only:  l24, l27, l28, l29
++  implicit none
++  integer  :: nlibe 
++  integer  :: l(*) 
++  real :: a(*)
++  print *, l(1), l(2)
++  return  
++end subroutine nudata
++      
++  integer  :: l_(2) = (/1,2/), nlibe_ = 42
++  real :: a_(2) = (/1.,2./)  
++  call nudata (nlibe_, a_, l_)
++end
++
++! { dg-final { cleanup-modules "data_C" } }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/module_equivalence_5.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/module_equivalence_5.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/module_equivalence_5.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/module_equivalence_5.f90	2008-10-19 00:50:35.000000000 -0700
+@@ -0,0 +1,34 @@
++! { dg-do run }
++!
++! Fixes PR37787 where the EQUIVALENCE between QLA1 and QLA2 wasn't recognized
++! in the dependency checking because the compiler was looking in the wrong name
++! space.
++!
++! Contributed by Dick Hendrickson <dick.hendrickson@gmail.com>
++!
++module stuff
++  integer, parameter :: r4_kv = 4
++contains
++
++  SUBROUTINE CF0004
++!  COPYRIGHT 1999   SPACKMAN & HENDRICKSON, INC.
++    REAL(R4_KV), dimension (10) :: QLA1, QLA2, QLA3, &
++                                   QCA = (/(i, i= 1, 10)/)
++    EQUIVALENCE (QLA1, QLA2)
++    QLA1 = QCA
++    QLA3 = QCA
++    QLA3( 2:10:3) = QCA ( 1:5:2) + 1
++    QLA1( 2:10:3) = QLA2( 1:5:2) + 1  !failed because of dependency
++    if (any (qla1 .ne. qla3)) call abort
++  END SUBROUTINE
++end module
++
++program try_cf004
++  use stuff
++  nf1 = 1
++  nf2 = 2
++  call cf0004
++end
++
++! { dg-final { cleanup-modules "stuff" } }
++
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/module_equivalence_6.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/module_equivalence_6.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/module_equivalence_6.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/module_equivalence_6.f90	2008-11-18 19:46:12.000000000 -0800
+@@ -0,0 +1,22 @@
++! { dg-do compile }
++!
++! Fixes PR38171 a regression caused by the fix for PR37706.
++!
++! Contributed by Scot Breitenfeld <brtnfld@hdfgroup.org>
++!
++MODULE H5GLOBAL
++  IMPLICIT NONE
++  INTEGER :: H5P_flags
++  INTEGER :: H5P_DEFAULT_F
++  EQUIVALENCE(H5P_flags, H5P_DEFAULT_F)
++END MODULE H5GLOBAL
++MODULE HDF5
++  USE H5GLOBAL
++END MODULE HDF5
++PROGRAM fortranlibtest
++  USE HDF5
++  IMPLICIT NONE
++  INTEGER :: ii
++  ii = H5P_DEFAULT_F 
++END PROGRAM fortranlibtest
++! { dg-final { cleanup-modules "H5GLOBAL HD5" } }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/namelist_18.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/namelist_18.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/namelist_18.f90	2005-04-17 13:09:37.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/namelist_18.f90	2008-10-28 21:47:20.000000000 -0700
+@@ -14,7 +14,7 @@
+   read (10, '(a)', iostat = ier) buffer
+   if (ier .ne. 0) call abort ()
+   close (10)
+-  If ((buffer(5:5) /= "f") .or. (buffer(9:9) /= " ")) call abort () 
++  If ((buffer(6:6) /= "f") .or. (buffer(9:9) /= """")) call abort () 
+ 
+   open (10, status = "scratch", delim ="quote")
+   write (10, mynml)
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/namelist_54.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/namelist_54.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/namelist_54.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/namelist_54.f90	2008-10-19 08:30:32.000000000 -0700
+@@ -0,0 +1,15 @@
++! { dg-do run }
++! PR37707 Namelist read of array of derived type incorrect.
++type s
++   integer m
++   integer n
++end type s
++type(s) :: a(3)
++character*80 :: l = ' &namlis a%m=1,2, a%n=5,6, /'
++namelist /namlis/ a
++a%m=[87,88,89]
++a%n=[97,98,99]
++read(l,namlis)
++if (a(1)%m /= 1 .or. a(2)%m /= 2 .or. a(1)%n /= 5 .or. a(2)%n /= 6 .or. &
++  & a(3)%m /= 89 .or. a(3)%n /= 99) call abort
++end
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/namelist_55.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/namelist_55.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/namelist_55.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/namelist_55.f90	2008-10-28 21:47:20.000000000 -0700
+@@ -0,0 +1,50 @@
++! { dg-do run }
++! PR37707 Namelist read of array of derived type incorrect
++! Test case from PR, prepared by Jerry DeLisle  <jvdelisle@gcc.gnu.org>
++TYPE geometry
++   INTEGER :: nlon,nlat,nlev,projection
++   INTEGER :: center,subcenter,process
++   REAL    :: west,south,east,north
++   REAL    :: dlon,dlat
++   REAL    :: polat,polon
++   REAL    :: lonc,latc
++   REAL    :: projlat,projlat2,projlon
++   CHARACTER(LEN=1) :: arakawa ='#'
++   INTEGER :: truncx,truncy   ! Spectral truncation
++   INTEGER :: cie             ! Flag fort CI (0), CIE gridpoint (1)
++                              ! or CIE spectral (-1)
++   INTEGER :: nlat_i,nlon_i   ! I length in Y and X direction
++   INTEGER :: nlat_e ,nlon_e  ! E length in Y and X direction
++   LOGICAL :: do_geo = .true.
++END TYPE geometry
++
++TYPE shortkey
++   INTEGER           :: PPP !  2. Parameter
++   INTEGER           :: NNN ! 12. Gridpoint or spectral field 0 = gridpoint, 1 = spectral
++   INTEGER           :: INTPM
++   CHARACTER(LEN=16) :: name
++END TYPE shortkey
++INTEGER, PARAMETER :: maxl       = 200  ! Maximum number of levels to be read from namelist
++INTEGER, PARAMETER :: max_atmkey = 10   ! Maximum number of extra fields in the
++
++REAL    :: ahalf(maxl),bhalf(maxl)
++TYPE (geometry) :: outgeo ; SAVE outgeo  ! Output geometry
++
++TYPE (shortkey) ::  atmkey(max_atmkey) ; SAVE atmkey
++TYPE (shortkey) :: mlevkey(max_atmkey) ; SAVE mlevkey
++
++character*600 :: l = " &NAMINTERP atmkey%ppp = 076,058,062,079, atmkey%nnn = 000,000,000,000, &
++                     & atmkey%name ='LIQUID_WATER','SOLID_WATER','SNOW','RAIN', OUTGEO%NLEV=10, &
++                     & AHALF=0.,1.,2.,3.,4.,5.,6.,7.,8.,9., BHALF=0.,1.,2.,3.,4.,5.,6.,7.,8.,9., /"
++
++namelist /naminterp/outgeo,ahalf,bhalf,atmkey
++print *, outgeo%nlev
++read(l,nml=naminterp)
++if (outgeo%nlev /= 10) call abort
++if (any(ahalf(1:10) .ne. [0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])) call abort
++if (any(bhalf(1:10) .ne. [0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])) call abort
++if (any(atmkey(1:4)%ppp .ne. [076,058,062,079])) call abort
++if (any(atmkey(1:4)%nnn .ne. [0,0,0,0])) call abort
++if (any(atmkey(1:4)%name .ne. ['LIQUID_WATER','SOLID_WATER ','SNOW        ',&
++                              &'RAIN        '])) call abort
++end
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/namelist_56.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/namelist_56.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/namelist_56.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/namelist_56.f90	2008-10-28 21:47:20.000000000 -0700
+@@ -0,0 +1,21 @@
++! { dg-do run }
++! PR37707 Namelist read of array of derived type incorrect
++! Test case from Tobias Burnus
++  IMPLICIT NONE
++  integer :: j
++  character(len=5) :: str(4)
++  character(len=900) :: nlstr
++  namelist /nml/ str, j
++  str = ''
++  j = -42
++  nlstr = '&nml str = "a", "b", "cde", j = 5 /'
++  read(nlstr,nml)
++  write(99,nml)
++  rewind(99)
++  j = -54
++  str = 'XXXX'
++  read(99,nml)
++  if (j.ne.5) call abort
++  if (any(str.ne.["a    ","b    ","cde  ","     "])) call abort
++  close(99,status="delete")
++end
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/nested_forall_1.f gcc-4.3.2/gcc/testsuite/gfortran.dg/nested_forall_1.f
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/nested_forall_1.f	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/nested_forall_1.f	2008-11-08 00:38:42.000000000 -0800
+@@ -0,0 +1,38 @@
++! { dg-do compile }
++!
++! PR fortran/35820
++! 
++! Memory leak(s) while resolving forall constructs.
++! 
++! Contributed by Dick Hendrickson <dick.hendrickson@gmail.com>
++
++      MODULE TESTS
++      INTEGER,PARAMETER,PUBLIC  ::  I1_KV = KIND(1)
++      INTEGER,PARAMETER,PUBLIC  ::  R1_KV = KIND(1.0)
++      INTEGER, PRIVATE :: J1,J2
++      INTEGER,PARAMETER,PUBLIC  ::  S1 = 10, S2 = 9
++      CONTAINS
++      SUBROUTINE SA0136(RDA,IDA,BDA)
++      REAL(R1_KV) RDA(S1)
++      INTEGER(I1_KV) IDA(S1,S2)
++      INTEGER(I1_KV) ICA(S1,S2)
++      REAL(R1_KV) RCA(S1)
++!  T E S T  S T A T E M E N T S
++      FORALL (J1 = 1:S1)
++        RDA(J1) = RCA(J1) + 1.0_R1_KV
++        FORALL (J2 = 1:S2)
++          IDA(J1,J2) = ICA(J1,J2) + 1
++        END FORALL
++        FORALL (J2 = 1:S2)
++          IDA(J1,J2) = ICA(J1,J2)
++        END FORALL
++      ENDFORALL
++      FORALL (J1 = 1:S1)
++        RDA(J1) = RCA(J1)
++        FORALL (J2 = 1:S2)
++          IDA(J1,J2) = ICA(J1,J2)
++        END FORALL
++      END FORALL
++      END SUBROUTINE
++      END MODULE TESTS
++! { dg-final { cleanup-modules "tests" } }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/pointer_assign_5.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/pointer_assign_5.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/pointer_assign_5.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/pointer_assign_5.f90	2008-09-26 08:22:13.000000000 -0700
+@@ -0,0 +1,9 @@
++! { dg-do compile }
++! PR fortran/37580
++!
++program test
++implicit none
++real, pointer :: ptr1(:), ptr2(:)
++ptr1(1) => ptr2 ! { dg-error "Expected bounds specification" }
++ptr1(1:) => ptr2 ! { dg-error "not yet implemented in gfortran" }
++end program test
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/pointer_assign_6.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/pointer_assign_6.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/pointer_assign_6.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/pointer_assign_6.f90	2008-09-26 08:22:13.000000000 -0700
+@@ -0,0 +1,9 @@
++! { dg-do compile }
++! { dg-options "-std=f95" }
++! PR fortran/37580
++!
++program test
++implicit none
++real, pointer :: ptr1(:), ptr2(:)
++ptr1(1:) => ptr2 ! { dg-error "Fortran 2003: Bounds specification" }
++end program test
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/protected_7.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/protected_7.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/protected_7.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/protected_7.f90	2008-09-26 08:17:25.000000000 -0700
+@@ -0,0 +1,22 @@
++! { dg-do compile }
++! PR fortran/37504
++!
++module m
++  implicit none
++  integer, pointer, protected :: protected_pointer
++  integer, target,  protected :: protected_target
++end module m
++
++program p
++  use m
++  implicit none
++  integer, pointer :: unprotected_pointer
++  ! The next two lines should be rejected; see PR 37513 why
++  ! we get such a strange error message.
++  protected_pointer => unprotected_pointer ! { dg-error "only allowed in specification part" }
++  protected_pointer =  unprotected_pointer ! { dg-error "only allowed in specification part" }
++  unprotected_pointer => protected_target  ! { dg-error "target has PROTECTED attribute" }
++  unprotected_pointer => protected_pointer ! OK
++end program p
++
++! { dg-final { cleanup-modules "m" } }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/pure_formal_proc_2.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/pure_formal_proc_2.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/pure_formal_proc_2.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/pure_formal_proc_2.f90	2008-11-27 14:20:27.000000000 -0800
+@@ -0,0 +1,48 @@
++! { dg-do compile }
++! Tests the fix for PR36526, in which the call to getStrLen would
++! generate an error due to the use of a wrong symbol in interface.c
++!
++! Contributed by BÃ¡lint Aradi <aradi@bccms.uni-bremen.de>
++!
++module TestPure
++  implicit none
++
++  type T1
++    character(10) :: str
++  end type T1
++
++contains
++
++  pure function getT1Len(self) result(t1len)
++    type(T1), pointer :: self
++    integer :: t1len
++
++    t1len = getStrLen(self%str)
++
++  end function getT1Len
++
++
++  pure function getStrLen(str) result(length)
++    character(*), intent(in) :: str
++    integer :: length
++
++    length = len_trim(str)
++
++  end function getStrLen
++
++end module TestPure
++
++
++program Test
++  use TestPure
++  implicit none
++
++  type(T1), pointer :: pT1
++
++  allocate(pT1)
++  pT1%str = "test"
++  write (*,*) getT1Len(pT1)
++  deallocate(pT1)
++
++end program Test
++! { dg-final { cleanup-modules "TestPure" } }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/reshape_pad_1.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/reshape_pad_1.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/reshape_pad_1.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/reshape_pad_1.f90	2008-11-23 07:08:32.000000000 -0800
+@@ -0,0 +1,25 @@
++! { dg-do run }
++! PR 38135 - pad to RESHAPE didn't work correctly when SOURCE
++! was an empty array.
++
++program main
++  implicit none
++  integer, parameter :: N = 3
++  integer(kind=1) :: A1(N,N)
++  integer(kind=1) :: b1(n+1)
++  integer(kind=4) :: A4(n,n)
++  integer(kind=4) :: b4(n+1)
++  character(len=9) :: line
++
++  b1 = (/ 1, 2, 2, 2 /)
++
++  A1(1:N,1:N)=reshape(A1(1:0,1),(/N,N/),b1)
++  write(unit=line,fmt='(100i1)') A1
++  if (line .ne. "122212221") call abort
++
++  b4 = (/ 3, 4, 4, 4 /)
++
++  a4 = reshape(a4(:0,1),(/n,n/),b4)
++  write(unit=line,fmt='(100i1)') a4
++  if (line .ne. "344434443") call abort
++end program main
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/save_3.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/save_3.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/save_3.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/save_3.f90	2008-09-09 02:25:33.000000000 -0700
+@@ -0,0 +1,16 @@
++! { dg-do compile }
++
++! PR fortran/35837
++! We used do have a problem with resolving "save all" and nested namespaces.
++
++! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
++
++module g95bug
++save
++integer :: i=20
++contains
++pure function tell_i() result (answer)
++  integer :: answer
++  answer=i
++end function tell_i
++end module g95bug
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/string_compare_1.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/string_compare_1.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/string_compare_1.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/string_compare_1.f90	2008-09-08 00:55:49.000000000 -0700
+@@ -0,0 +1,25 @@
++! { dg-do run }
++
++! PR fortran/37099
++! Check for correct results when comparing array-section-substrings.
++
++PROGRAM main
++  IMPLICIT NONE
++
++  CHARACTER(*), PARAMETER :: exprs(1) = (/ 'aa' /)
++
++  CHARACTER(*), PARAMETER :: al1 = 'a';
++  CHARACTER(len=LEN (al1)) :: al2 = al1;
++
++  LOGICAL :: tmp(1), tmp2(1)
++
++  tmp = (exprs(1:1)(1:1) == al1)
++  tmp2 = (exprs(1:1)(1:1) == al2)
++
++  PRINT '(L1)', tmp
++  PRINT '(L1)', tmp2
++
++  IF (.NOT. tmp(1) .OR. .NOT. tmp2(1)) THEN
++    CALL abort ()
++  END IF
++END PROGRAM main
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/string_compare_2.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/string_compare_2.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/string_compare_2.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/string_compare_2.f90	2008-09-08 00:55:49.000000000 -0700
+@@ -0,0 +1,37 @@
++! { dg-do run }
++
++! PR fortran/37099
++! Check for correct results when comparing array-section-substrings.
++
++! This is the original test from the PR.
++! Contributed by Dominique d'Humieres <dominiq@lps.ens.fr>
++
++module xparams
++  integer,parameter :: exprbeg=100,exprend=154
++  character(*),dimension(exprbeg:exprend),parameter :: &
++      exprs=(/'nint()  ','log10() ','sqrt()  ','acos()  ','asin()  ',   &
++      'atan()  ','cosh()  ','sinh()  ','tanh()  ','int()   ',           &
++      'cos()   ','sin()   ','tan()   ','exp()   ','log()   ','abs()   ',&
++      'delta() ','step()  ','rect()  ','max(,)  ','min(,)  ','bj0()   ',&
++      'bj1()   ','bjn(,)  ','by0()   ','by1()   ','byn(,)  ','logb(,) ',&
++      'erf()   ','erfc()  ','lgamma()','gamma() ','csch()  ','sech()  ',&
++      'coth()  ','lif(,,) ','gaus()  ','sinc()  ','atan2(,)','mod(,)  ',&
++      'nthrt(,)','ramp()  ','fbi()   ','fbiq()  ','uran(,) ','aif(,,,)',&
++      'sgn()   ','cbrt()  ','fact()  ','somb()  ','bk0()   ','bk1()   ',&
++      'bkn(,)  ','bbi(,,) ','bbiq(,,)'/)
++  logical :: tmp(55,26)
++  character(26) :: al = 'abcdefghijklmnopqrstuvwxyz'
++end
++
++program pack_bug
++  use xparams
++    do i = 1, 1
++      tmp(:,i) = (exprs(:)(1:1)==al(i:i))
++      print '(55L1)', exprs(:)(1:1)=='a'
++      print '(55L1)', tmp(:,i)
++
++      if (any ((exprs(:)(1:1)=='a') .neqv. tmp(:,i))) then
++        call abort ()
++      end if
++    end do
++end
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/string_compare_3.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/string_compare_3.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/string_compare_3.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/string_compare_3.f90	2008-09-08 00:55:49.000000000 -0700
+@@ -0,0 +1,21 @@
++! { dg-do run }
++
++! PR fortran/37099
++! Check for correct results when comparing array-section-substrings.
++
++! This is the test from comment #1 of the PR.
++! Contributed by Dominique d'Humieres <dominiq@lps.ens.fr>
++
++integer, parameter :: n = 10
++integer, parameter :: ilst(n) = (/(i,i=1,n)/)
++character(*), parameter :: c0lst(n) = (/(char(96+i),i=1,n)/)
++character(*), parameter :: c1lst(n) = (/(char(96+i)//'b',i=1,n)/)
++logical :: tmp(n)
++i = 5
++print *, ilst(:) == i
++print *, c0lst(:)(1:1) == char(96+i)
++tmp = c1lst(:)(1:1) == char(96+i)
++print *, tmp
++print *, c1lst(:)(1:1) == 'e'
++if (any(tmp .neqv. (c0lst(:)(1:1) == char(96+i)))) call abort()
++end
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/transfer_array_intrinsic_5.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/transfer_array_intrinsic_5.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/transfer_array_intrinsic_5.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/transfer_array_intrinsic_5.f90	2008-10-11 02:58:38.000000000 -0700
+@@ -0,0 +1,24 @@
++! { dg-do compile }
++! PR35680 - used to ICE because the argument of SIZE, being in a restricted
++! expression, was not checked if it too is restricted or is a variable. Since
++! it is neither, an error should be produced.
++!
++! Contributed by  Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
++!
++program main
++  print *, foo (), bar (), foobar ()
++contains
++  function foo ()
++    integer foo(size (transfer (x, [1])))     ! { dg-error "cannot appear" }
++    real x
++ end function
++  function bar()
++    real x
++    integer bar(size (transfer (x, [1])))     ! { dg-error "cannot appear" }
++ end function
++  function foobar()
++    implicit none
++    integer foobar(size (transfer (x, [1])))  ! { dg-error "cannot appear" }
++    real x
++ end function
++end program
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/use_rename_4.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/use_rename_4.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/use_rename_4.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/use_rename_4.f90	2008-09-03 05:25:57.000000000 -0700
+@@ -0,0 +1,22 @@
++! { dg-do run }
++
++! PR fortran/37193
++! Check fix for problem with re-using the same symbol both renamed and
++! plain.
++
++MODULE m
++  IMPLICIT NONE
++  INTEGER :: i
++END MODULE m
++
++PROGRAM main
++  USE m, ONLY: i, j => i
++  IMPLICIT NONE
++
++  i = 4
++  j = 5
++
++  IF (i /= j) THEN
++    CALL abort ()
++  END IF
++END PROGRAM main
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/use_rename_5.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/use_rename_5.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/use_rename_5.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/use_rename_5.f90	2008-09-03 05:25:57.000000000 -0700
+@@ -0,0 +1,17 @@
++! { dg-do compile }
++
++! PR fortran/37193
++! Check that renamed symbols are not accessiable uner their target name.
++
++MODULE m
++  IMPLICIT NONE
++  INTEGER :: i
++END MODULE m
++
++PROGRAM main
++  USE m, ONLY: j => i
++  IMPLICIT NONE
++
++  i = 4 ! { dg-error "no IMPLICIT type" }
++  j = 5
++END PROGRAM main
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/used_types_22.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/used_types_22.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/used_types_22.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/used_types_22.f90	2008-09-22 23:25:39.000000000 -0700
+@@ -0,0 +1,294 @@
++! { dg-do compile }
++! Tests the fix for PR37274 a regression in which the derived type,
++! 'vector' of the function results contained in 'class_motion' is
++! private and is incorrectly detected to be ambiguous in 'smooth_mesh'.
++!
++! Contributed by Salvatore Filippone  <sfilippone@uniroma2.it>
++!
++module class_vector
++
++  implicit none
++
++  private ! Default
++  public :: vector                                  
++  public :: vector_ 
++
++  type vector
++     private
++     real(kind(1.d0)) :: x
++     real(kind(1.d0)) :: y
++     real(kind(1.d0)) :: z
++  end type vector
++
++contains
++  ! ----- Constructors -----
++
++  ! Public default constructor
++  elemental function vector_(x,y,z)
++    type(vector) :: vector_
++    real(kind(1.d0)), intent(in) :: x, y, z
++
++    vector_ = vector(x,y,z)
++
++  end function vector_
++
++end module class_vector
++
++module class_dimensions
++
++  implicit none
++
++  private ! Default
++  public :: dimensions
++
++  type dimensions
++     private
++     integer :: l
++     integer :: m
++     integer :: t
++     integer :: theta
++  end type dimensions
++
++
++end module class_dimensions
++
++module tools_math
++
++  implicit none
++
++
++  interface lin_interp
++     function lin_interp_s(f1,f2,fac)
++       real(kind(1.d0)) :: lin_interp_s
++       real(kind(1.d0)), intent(in) :: f1, f2
++       real(kind(1.d0)), intent(in) :: fac
++     end function lin_interp_s
++
++     function lin_interp_v(f1,f2,fac)
++       use class_vector
++       type(vector) :: lin_interp_v
++       type(vector),     intent(in) :: f1, f2
++       real(kind(1.d0)), intent(in) :: fac
++     end function lin_interp_v
++  end interface
++
++
++  interface pwl_deriv
++     subroutine pwl_deriv_x_s(dydx,x,y_data,x_data)
++       real(kind(1.d0)), intent(out) :: dydx
++       real(kind(1.d0)), intent(in) :: x
++       real(kind(1.d0)), intent(in) :: y_data(:)
++       real(kind(1.d0)), intent(in) :: x_data(:)
++     end subroutine pwl_deriv_x_s
++
++     subroutine pwl_deriv_x_v(dydx,x,y_data,x_data)
++       real(kind(1.d0)), intent(out) :: dydx(:)
++       real(kind(1.d0)), intent(in) :: x
++       real(kind(1.d0)), intent(in) :: y_data(:,:)
++       real(kind(1.d0)), intent(in) :: x_data(:)
++     end subroutine pwl_deriv_x_v
++
++     subroutine pwl_deriv_x_vec(dydx,x,y_data,x_data)
++       use class_vector
++       type(vector), intent(out) :: dydx
++       real(kind(1.d0)), intent(in) :: x
++       type(vector), intent(in) :: y_data(:)
++       real(kind(1.d0)), intent(in) :: x_data(:)
++     end subroutine pwl_deriv_x_vec
++  end interface
++
++end module tools_math
++
++module class_motion
++
++  use class_vector
++ 
++  implicit none
++  
++  private 
++  public :: motion 
++  public :: get_displacement, get_velocity
++
++  type motion
++     private
++     integer :: surface_motion
++     integer :: vertex_motion
++     !
++     integer :: iml
++     real(kind(1.d0)), allocatable :: law_x(:) 
++     type(vector), allocatable :: law_y(:)  
++  end type motion
++
++contains
++
++
++  function get_displacement(mot,x1,x2)
++    use tools_math
++
++    type(vector) :: get_displacement
++    type(motion), intent(in) :: mot
++    real(kind(1.d0)), intent(in) :: x1, x2
++    !
++    integer :: i1, i2, i3, i4
++    type(vector) :: p1, p2, v_A, v_B, v_C, v_D
++    type(vector) :: i_trap_1, i_trap_2, i_trap_3
++
++    get_displacement = vector_(0.d0,0.d0,0.d0)
++    
++  end function get_displacement
++
++
++  function get_velocity(mot,x)
++    use tools_math
++
++    type(vector) :: get_velocity
++    type(motion), intent(in) :: mot
++    real(kind(1.d0)), intent(in) :: x
++    !
++    type(vector) :: v
++    
++    get_velocity = vector_(0.d0,0.d0,0.d0)
++    
++  end function get_velocity
++  
++  
++
++end module class_motion
++
++module class_bc_math
++  
++  implicit none
++
++  private 
++  public :: bc_math                           
++
++  type bc_math
++     private
++     integer :: id
++     integer :: nbf
++     real(kind(1.d0)), allocatable :: a(:) 
++     real(kind(1.d0)), allocatable :: b(:) 
++     real(kind(1.d0)), allocatable :: c(:) 
++  end type bc_math
++
++  
++end module class_bc_math
++
++module class_bc
++
++  use class_bc_math
++  use class_motion
++
++  implicit none
++
++  private 
++  public :: bc_poly                          
++  public :: get_abc, &
++       &    get_displacement, get_velocity  
++
++  type bc_poly
++     private
++     integer :: id
++     type(motion) :: mot
++     type(bc_math), pointer :: math => null()
++  end type bc_poly
++
++
++  interface get_displacement
++     module procedure get_displacement, get_bc_motion_displacement
++  end interface
++
++  interface get_velocity
++     module procedure get_velocity, get_bc_motion_velocity
++  end interface
++
++  interface get_abc
++     module procedure get_abc_s, get_abc_v
++  end interface
++  
++contains
++
++
++  subroutine get_abc_s(bc,dim,id,a,b,c)
++    use class_dimensions
++    
++    type(bc_poly), intent(in) :: bc
++    type(dimensions), intent(in) :: dim
++    integer, intent(out) :: id
++    real(kind(1.d0)), intent(inout) :: a(:)
++    real(kind(1.d0)), intent(inout) :: b(:)
++    real(kind(1.d0)), intent(inout) :: c(:)
++    
++    
++  end subroutine get_abc_s
++
++
++  subroutine get_abc_v(bc,dim,id,a,b,c)
++    use class_dimensions
++    use class_vector
++
++    type(bc_poly), intent(in) :: bc
++    type(dimensions), intent(in) :: dim
++    integer, intent(out) :: id
++    real(kind(1.d0)), intent(inout) :: a(:)
++    real(kind(1.d0)), intent(inout) :: b(:)
++    type(vector),     intent(inout) :: c(:)
++
++    
++  end subroutine get_abc_v
++
++
++
++  function get_bc_motion_displacement(bc,x1,x2)result(res)
++    use class_vector
++    type(vector) :: res
++    type(bc_poly), intent(in) :: bc
++    real(kind(1.d0)), intent(in) :: x1, x2
++    
++    res = get_displacement(bc%mot,x1,x2)
++
++  end function get_bc_motion_displacement
++
++
++  function get_bc_motion_velocity(bc,x)result(res)
++    use class_vector
++    type(vector) :: res
++    type(bc_poly), intent(in) :: bc
++    real(kind(1.d0)), intent(in) :: x
++
++    res = get_velocity(bc%mot,x)
++
++  end function get_bc_motion_velocity
++
++
++end module class_bc
++
++module tools_mesh_basics
++  
++  implicit none
++  
++  interface
++     function geom_tet_center(v1,v2,v3,v4)
++       use class_vector
++       type(vector) :: geom_tet_center
++       type(vector), intent(in) :: v1, v2, v3, v4
++     end function geom_tet_center
++  end interface
++
++
++end module tools_mesh_basics
++
++
++subroutine smooth_mesh
++
++  use class_bc
++  use class_vector
++  use tools_mesh_basics
++
++  implicit none
++
++  type(vector) :: new_pos  ! the new vertex position, after smoothing
++
++end subroutine smooth_mesh
++! { dg-final { cleanup-modules "class_vector class_dimensions tools_math" } }
++! { dg-final { cleanup-modules "class_motion class_bc_math class_bc tools_mesh_basics" } }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/used_types_23.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/used_types_23.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/used_types_23.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/used_types_23.f90	2008-09-22 23:25:39.000000000 -0700
+@@ -0,0 +1,29 @@
++! { dg-do compile }
++! Tests the fix for PR37274 comment 4 in which the use associated 'vector' was
++! passed up from the interface to the module 'tools_math'.
++!
++! Contributed by Mikael Morin  <mikael.morin@tele2.fr>
++!
++module class_vector
++  implicit none
++  type vector
++  end type vector
++end module class_vector
++
++module tools_math
++  implicit none
++  interface lin_interp
++     function lin_interp_v()
++       use class_vector
++       type(vector) :: lin_interp_v
++     end function lin_interp_v
++  end interface
++end module tools_math
++
++module smooth_mesh
++  use tools_math
++  implicit none
++  type(vector ) :: new_pos  ! { dg-error "used before it is defined" }
++end module smooth_mesh
++
++! { dg-final { cleanup-modules "class_vector tools_math smooth_mesh" } }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/used_types_24.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/used_types_24.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/used_types_24.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/used_types_24.f90	2008-10-11 05:36:13.000000000 -0700
+@@ -0,0 +1,33 @@
++! { dg-do compile }
++! Tests the fix for PR37794 a regression where a bit of redundant code caused an ICE.
++!
++! Contributed by Jonathan Hogg  <J.Hogg@rl.ac.uk>
++!
++module m1
++  implicit none
++
++  type of01_data_private
++    real :: foo
++  end type of01_data_private
++
++  type of01_data
++    type (of01_data_private) :: private
++  end type of01_data
++end module m1
++
++module m2
++  implicit none
++
++  type of01_data_private
++    integer :: youngest
++  end type of01_data_private
++end module m2
++
++module test_mod
++  use m1, of01_rdata => of01_data
++  use m2, of01_idata => of01_data ! { dg-error "not found in module" }
++
++  implicit none
++end module test_mod
++
++! { dg-final { cleanup-modules "m1 m2 test_mod" } }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/vector_subscript_4.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/vector_subscript_4.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/vector_subscript_4.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/vector_subscript_4.f90	2008-11-01 12:45:41.000000000 -0700
+@@ -0,0 +1,13 @@
++! { dg-do compile }
++! { dg-options "-fdump-tree-original" }
++!
++! Test the fix for PR37903, in which the temporary for the vector index
++! got the wrong size.
++!
++! Contributed by Mikael Morin <mikael.morin@tele2.fr>
++!
++     integer :: i(-1:1) = 1, j(3) = 1, k(3)
++      k = j((/1,1,1/)+i)
++      end
++! { dg-final { scan-tree-dump-times "A\.3\\\[3\\\]" 1 "original" } }
++! { dg-final { cleanup-tree-dump "original" } }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/vector_subscript_5.f90 gcc-4.3.2/gcc/testsuite/gfortran.dg/vector_subscript_5.f90
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.dg/vector_subscript_5.f90	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.dg/vector_subscript_5.f90	2008-11-01 12:45:41.000000000 -0700
+@@ -0,0 +1,26 @@
++! { dg-do run }
++!
++! Test the fix for PR37749 in which the expression in line 13 would cause an ICE
++! because the upper value of the loop range was not set.
++!
++! Contributed by Jakub Jelinek <jakub@gcc.gnu.org>
++!
++subroutine subr (m, n, a, b, c, d, p)
++  implicit none
++  integer m, n
++  real a(m,n), b(m,n), c(n,n), d(m,n)
++  integer p(n)
++  d = a(:,p) - matmul(b, c)
++end subroutine
++
++  implicit none
++  integer i
++  real a(3,2), b(3,2), c(2,2), d(3,2)
++  integer p(2)
++  a = reshape ((/(i, i = 1, 6)/), (/3, 2/))
++  b = 1
++  c = 2
++  p = 2
++  call subr (3, 2, a, b, c, d, p)
++  if (any (d .ne. reshape ((/(mod (i + 2, 3), i = 1, 6)/), (/3, 2/)))) call abort
++end
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.fortran-torture/compile/compile.exp gcc-4.3.2/gcc/testsuite/gfortran.fortran-torture/compile/compile.exp
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.fortran-torture/compile/compile.exp	2007-08-01 09:25:11.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/gfortran.fortran-torture/compile/compile.exp	2008-12-05 12:35:34.000000000 -0800
+@@ -23,6 +23,10 @@
+ 
+ # load support procs
+ load_lib fortran-torture.exp
++load_lib torture-options.exp
++
++torture-init
++set-torture-options [get-fortran-torture-options]
+ 
+ foreach testcase [lsort [glob -nocomplain $srcdir/$subdir/*.f]] {
+     # If we're only testing specific files and this isn't one of them, skip it.
+@@ -59,3 +63,5 @@
+     }
+     fortran-torture $testcase
+ }
++
++torture-finish
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.fortran-torture/compile/pr37236.f gcc-4.3.2/gcc/testsuite/gfortran.fortran-torture/compile/pr37236.f
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.fortran-torture/compile/pr37236.f	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gfortran.fortran-torture/compile/pr37236.f	2008-09-20 08:40:15.000000000 -0700
+@@ -0,0 +1,82 @@
++C
++      SUBROUTINE FFTRC  (A,N,X,IWK,WK)
++C                                  SPECIFICATIONS FOR ARGUMENTS
++      INTEGER            N,IWK(1)
++      REAL*8             A(N),WK(1)
++      COMPLEX*16         X(1)
++C                                  SPECIFICATIONS FOR LOCAL VARIABLES
++      INTEGER            ND2P1,ND2,I,MTWO,M,IMAX,ND4,NP2,K,NMK,J
++      REAL*8             RPI,ZERO,ONE,HALF,THETA,TP,G(2),B(2),Z(2),AI,
++     1                   AR
++      COMPLEX*16         XIMAG,ALPH,BETA,GAM,S1,ZD
++      EQUIVALENCE        (GAM,G(1)),(ALPH,B(1)),(Z(1),AR),(Z(2),AI),
++     1                   (ZD,Z(1))
++      DATA               ZERO/0.0D0/,HALF/0.5D0/,ONE/1.0D0/,IMAX/24/
++      DATA               RPI/3.141592653589793D0/
++C                                  FIRST EXECUTABLE STATEMENT
++      IF (N .NE. 2) GO TO 5
++C                                  N EQUAL TO 2
++      ZD = DCMPLX(A(1),A(2))
++      THETA = AR
++      TP = AI
++      X(2) = DCMPLX(THETA-TP,ZERO)
++      X(1) = DCMPLX(THETA+TP,ZERO)
++      GO TO 9005
++    5 CONTINUE
++C                                  N GREATER THAN 2
++      ND2 = N/2
++      ND2P1 = ND2+1
++C                                  MOVE A TO X
++      J = 1
++      DO 6 I=1,ND2
++         X(I) = DCMPLX(A(J),A(J+1))
++         J = J+2
++    6 CONTINUE
++C                                  COMPUTE THE CENTER COEFFICIENT
++      GAM = DCMPLX(ZERO,ZERO)
++      DO 10 I=1,ND2
++         GAM = GAM + X(I)
++   10 CONTINUE
++      TP = G(1)-G(2)
++      GAM = DCMPLX(TP,ZERO)
++C                                  DETERMINE THE SMALLEST M SUCH THAT
++C                                  N IS LESS THAN OR EQUAL TO 2**M
++      MTWO = 2
++      M = 1
++      DO 15 I=1,IMAX
++         IF (ND2 .LE. MTWO) GO TO 20
++         MTWO = MTWO+MTWO
++         M = M+1
++   15 CONTINUE
++   20 IF (ND2 .EQ. MTWO) GO TO 25
++C                                  N IS NOT A POWER OF TWO, CALL FFTCC
++      CALL FFTCC (X,ND2,IWK,WK)
++      GO TO 30
++C                                  N IS A POWER OF TWO, CALL FFT2C
++   25 CALL FFT2C (X,M,IWK)
++   30 ALPH = X(1)
++      X(1) = B(1) + B(2)
++      ND4 = (ND2+1)/2
++      IF (ND4 .LT. 2) GO TO 40
++      NP2 = ND2 + 2
++      THETA = RPI/ND2
++      TP = THETA
++      XIMAG = DCMPLX(ZERO,ONE)
++C                                  DECOMPOSE THE COMPLEX VECTOR X
++C                                  INTO THE COMPONENTS OF THE TRANSFORM
++C                                  OF THE INPUT DATA.
++      DO 35 K = 2,ND4
++         NMK = NP2 - K
++         S1 = DCONJG(X(NMK))
++         ALPH = X(K) + S1
++         BETA = XIMAG*(S1-X(K))
++         S1 = DCMPLX(DCOS(THETA),DSIN(THETA))
++         X(K) = (ALPH+BETA*S1)*HALF
++         X(NMK) = DCONJG(ALPH-BETA*S1)*HALF
++         THETA = THETA + TP
++   35 CONTINUE
++   40 CONTINUE
++      X(ND2P1) = GAM
++ 9005 RETURN
++      END
++
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gfortran.fortran-torture/execute/execute.exp gcc-4.3.2/gcc/testsuite/gfortran.fortran-torture/execute/execute.exp
+--- gcc-4.3.2.orig/gcc/testsuite/gfortran.fortran-torture/execute/execute.exp	2007-08-01 09:25:11.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/gfortran.fortran-torture/execute/execute.exp	2008-12-05 12:35:34.000000000 -0800
+@@ -27,6 +27,10 @@
+ 
+ # load support procs
+ load_lib fortran-torture.exp
++load_lib torture-options.exp
++
++torture-init
++set-torture-options [get-fortran-torture-options]
+ 
+ foreach testcase [lsort [glob -nocomplain $srcdir/$subdir/*.f]] {
+     # If we're only testing specific files and this isn't one of them, skip it.
+@@ -63,3 +67,5 @@
+     }
+     fortran-torture-execute $testcase
+ }
++
++torture-finish
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gnat.dg/array5.adb gcc-4.3.2/gcc/testsuite/gnat.dg/array5.adb
+--- gcc-4.3.2.orig/gcc/testsuite/gnat.dg/array5.adb	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gnat.dg/array5.adb	2008-11-03 11:57:41.000000000 -0800
+@@ -0,0 +1,34 @@
++-- { dg-do run }
++-- { dg-options "-O" }
++
++procedure Array5 is
++
++    type myint is range 0 .. 100_000;
++    Bla : constant myint := 359;
++
++    type my_array is array (1 .. 2) of myint;
++
++    type item is record
++       Length  : Integer;
++       Content : my_array;
++    end record;
++
++    procedure create_item (M : out item) is
++    begin
++      M.Length := 1;
++      M.Content := (others => Bla);
++    end;
++
++    Var : item;
++
++begin
++    create_item (Var);
++
++    if Var.Length = 1
++     and then Var.Content (1) = Bla
++    then
++      null;
++    else
++      raise Program_Error;
++    end if;
++end;
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gnat.dg/conv_decimal.adb gcc-4.3.2/gcc/testsuite/gnat.dg/conv_decimal.adb
+--- gcc-4.3.2.orig/gcc/testsuite/gnat.dg/conv_decimal.adb	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gnat.dg/conv_decimal.adb	2008-09-28 08:13:52.000000000 -0700
+@@ -0,0 +1,34 @@
++-- PR middle-end/36575
++-- reporter: Laurent Guerby <laurent@guerby.net>
++-- { dg-do run }
++
++procedure Conv_Decimal is
++
++  type Unsigned_Over_8 is mod 2**8+2;
++  type Signed_Over_8 is range -200 .. 200;
++
++  procedure Assert(Truth: Boolean) is
++  begin
++    if not Truth then
++      raise Program_Error;
++    end if;
++  end;
++
++  type Decim is delta 0.1 digits 5;
++
++  Halfway  : Decim := 2.5;
++  Neg_Half : Decim := -2.5;
++
++  Big      : Unsigned_Over_8;
++  Also_Big : Signed_Over_8;
++
++begin
++  Big := Unsigned_Over_8 (Halfway); -- Rounds up by 4.6(33).
++  Assert(Big = 3);
++
++  Also_Big := Signed_Over_8 (Halfway); -- Rounds up by 4.6(33).
++  Assert(Also_Big = 3);
++
++  Also_Big := Signed_Over_8 (Neg_Half); -- Rounds down by 4.6(33).
++  Assert(Also_Big = -3);
++end;
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gnat.dg/loop_optimization4.adb gcc-4.3.2/gcc/testsuite/gnat.dg/loop_optimization4.adb
+--- gcc-4.3.2.orig/gcc/testsuite/gnat.dg/loop_optimization4.adb	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gnat.dg/loop_optimization4.adb	2008-10-07 10:33:28.000000000 -0700
+@@ -0,0 +1,9 @@
++-- { dg-do run }
++-- { dg-options "-O2" }
++
++with Loop_Optimization4_Pkg; use Loop_Optimization4_Pkg;
++
++procedure Loop_Optimization4 is
++begin
++  Add ("Nothing");
++end;
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gnat.dg/loop_optimization4_pkg.adb gcc-4.3.2/gcc/testsuite/gnat.dg/loop_optimization4_pkg.adb
+--- gcc-4.3.2.orig/gcc/testsuite/gnat.dg/loop_optimization4_pkg.adb	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gnat.dg/loop_optimization4_pkg.adb	2008-10-07 10:33:28.000000000 -0700
+@@ -0,0 +1,17 @@
++package body Loop_Optimization4_Pkg is
++
++   procedure Add (Phrase : String) is
++   begin
++      if Debug_Buffer_Len = Max_Debug_Buffer_Len then
++         return;
++      end if;
++      for I in Phrase'Range loop
++         Debug_Buffer_Len := Debug_Buffer_Len + 1;
++         Debug_Buffer (Debug_Buffer_Len) := Phrase (I);
++         if Debug_Buffer_Len = Max_Debug_Buffer_Len then
++            exit;
++         end if;
++      end loop;
++   end Add;
++
++end Loop_Optimization4_Pkg;
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gnat.dg/loop_optimization4_pkg.ads gcc-4.3.2/gcc/testsuite/gnat.dg/loop_optimization4_pkg.ads
+--- gcc-4.3.2.orig/gcc/testsuite/gnat.dg/loop_optimization4_pkg.ads	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gnat.dg/loop_optimization4_pkg.ads	2008-10-07 10:33:28.000000000 -0700
+@@ -0,0 +1,9 @@
++package Loop_Optimization4_Pkg is
++
++   Max_Debug_Buffer_Len : Natural := 8 * 1024;
++   Debug_Buffer : String (1 .. Max_Debug_Buffer_Len);
++   Debug_Buffer_Len : Natural range 0 .. Max_Debug_Buffer_Len;
++
++   procedure Add (Phrase : String);
++
++end Loop_Optimization4_Pkg;
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/gnat.dg/unchecked_convert2.adb gcc-4.3.2/gcc/testsuite/gnat.dg/unchecked_convert2.adb
+--- gcc-4.3.2.orig/gcc/testsuite/gnat.dg/unchecked_convert2.adb	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/gnat.dg/unchecked_convert2.adb	2008-10-06 00:10:31.000000000 -0700
+@@ -0,0 +1,34 @@
++-- { dg-do run }
++
++with Ada.Unchecked_Conversion;
++with Ada.Streams; use Ada.Streams;
++with Ada.Text_IO; use Ada.Text_IO;
++
++procedure Unchecked_Convert2 is
++
++   subtype Day_Number is Integer range 0 .. 31;
++
++   subtype Byte_Array_Of_Integer is Stream_Element_Array
++     (1 .. Integer'Size / Stream_Element_Array'Component_Size);
++
++   function To_Byte_Array is
++      new Ada.Unchecked_Conversion (Integer, Byte_Array_Of_Integer);
++
++   Day_Now : Day_Number;
++   Pragma Volatile (Day_Now);
++
++   Arr : Stream_Element_Array (1 .. 12) := (others => 16#ff#);
++
++   procedure Test (Arr : Stream_Element_Array) is
++   begin
++      if Arr(5) /= 0 or Arr(6) /= 0 or Arr(7) /= 0 or Arr(8) /= 0 then
++         raise Program_Error;
++      end if;
++   end;
++
++begin
++   Day_Now := 0;
++   Arr (5 .. 8) := To_Byte_Array (Day_Now);
++   Test (Arr);
++   Arr (1) := 16#ff#;
++end Unchecked_Convert2;
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/lib/c-torture.exp gcc-4.3.2/gcc/testsuite/lib/c-torture.exp
+--- gcc-4.3.2.orig/gcc/testsuite/lib/c-torture.exp	2007-08-01 09:25:11.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/lib/c-torture.exp	2008-12-05 12:35:34.000000000 -0800
+@@ -22,7 +22,9 @@
+ # The default option list can be overridden by
+ # TORTURE_OPTIONS="{ { list1 } ... { listN } }"
+ 
+-if ![info exists TORTURE_OPTIONS] {
++if [info exists TORTURE_OPTIONS] {
++    set C_TORTURE_OPTIONS $TORTURE_OPTIONS
++} else {
+     # It is theoretically beneficial to group all of the O2/O3 options together,
+     # as in many cases the compiler will generate identical executables for
+     # all of them--and the c-torture testsuite will skip testing identical
+@@ -30,7 +32,7 @@
+     # Also note that -finline-functions is explicitly included in one of the
+     # items below, even though -O3 is also specified, because some ports may
+     # choose to disable inlining functions by default, even when optimizing.
+-    set TORTURE_OPTIONS [list \
++    set C_TORTURE_OPTIONS [list \
+ 	{ -O0 } \
+ 	{ -O1 } \
+ 	{ -O2 } \
+@@ -55,17 +57,6 @@
+     set_ld_library_path_env_vars
+ }
+ 
+-# Split TORTURE_OPTIONS into two choices: one for testcases with loops and
+-# one for testcases without loops.
+-
+-set torture_with_loops $TORTURE_OPTIONS
+-set torture_without_loops ""
+-foreach option $TORTURE_OPTIONS {
+-    if ![string match "*loop*" $option] {
+-	lappend torture_without_loops $option
+-    }
+-}
+-
+ #
+ # c-torture-compile -- runs the Tege C-torture test
+ #
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/lib/fortran-torture.exp gcc-4.3.2/gcc/testsuite/lib/fortran-torture.exp
+--- gcc-4.3.2.orig/gcc/testsuite/lib/fortran-torture.exp	2007-10-21 02:07:13.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/lib/fortran-torture.exp	2008-12-08 14:10:06.000000000 -0800
+@@ -22,10 +22,16 @@
+ 
+ load_lib target-supports.exp
+ 
++# Return the list of options to use for fortran torture tests.
+ # The default option list can be overridden by
+ # TORTURE_OPTIONS="{ { list1 } ... { listN } }"
++proc get-fortran-torture-options { } {
++    global TORTURE_OPTIONS
++
++    if [info exists TORTURE_OPTIONS] {
++	return $TORTURE_OPTIONS
++    }
+ 
+-if ![info exists TORTURE_OPTIONS] {
+     # determine if host supports vectorization, and the necessary set
+     # of options, based on code from testsuite/vect/vect.exp
+ 
+@@ -38,7 +44,8 @@
+ 	set test_tree_vectorize 1
+     } elseif { [istarget  "spu-*-*"] } {
+ 	set test_tree_vectorize 1
+-    } elseif { [istarget "i?86-*-*"] || [istarget "x86_64-*-*"] } {
++    } elseif { ( [istarget "i?86-*-*"] || [istarget "x86_64-*-*"] )
++	       && [check_sse2_hw_available] } {
+ 	lappend vectorizer_options "-msse2"
+ 	set test_tree_vectorize 1
+     } elseif { [istarget "mips*-*-*"]
+@@ -46,7 +53,8 @@
+ 	       && [check_effective_target_nomips16] } {
+ 	lappend vectorizer_options "-mpaired-single"
+ 	set test_tree_vectorize 1
+-    } elseif [istarget "sparc*-*-*"] {
++    } elseif { [istarget "sparc*-*-*"]
++	       && [check_effective_target_ultrasparc_hw] } {
+ 	lappend vectorizer_options "-mcpu=ultrasparc" "-mvis"
+ 	set test_tree_vectorize 1
+     } elseif { [istarget "alpha*-*-*"]
+@@ -59,17 +67,22 @@
+ 	set test_tree_vectorize 0
+     }
+ 
+-    set TORTURE_OPTIONS [list \
+-	{ -O0 } { -O1 } { -O2 } \
++    set options {}
++
++    lappend options \
++	{ -O0 } \
++	{ -O1 } \
++	{ -O2 } \
+ 	{ -O2 -fomit-frame-pointer -finline-functions } \
+ 	{ -O2 -fomit-frame-pointer -finline-functions -funroll-loops } \
+ 	{ -O2 -fbounds-check } \
+ 	{ -O3 -g } \
+-	{ -Os }]
+-
++	{ -Os }
+     if { $test_tree_vectorize } {
+-	lappend TORTURE_OPTIONS $vectorizer_options
++	lappend options $vectorizer_options
+     }
++
++    return $options
+ }
+ 
+ 
+@@ -174,7 +187,7 @@
+     global srcdir tmpdir
+     global tool
+     global compiler_conditional_xfail_data
+-    global TORTURE_OPTIONS
++    global torture_with_loops
+ 
+     # Check for alternate driver.
+     set additional_flags ""
+@@ -188,7 +201,7 @@
+     }
+ 
+     # Setup the options for the testcase run.
+-    set option_list $TORTURE_OPTIONS
++    set option_list $torture_with_loops
+     set executable $tmpdir/[file tail [file rootname $src].x]
+     regsub "(?q)$srcdir/" $src "" testcase
+ 
+@@ -348,7 +361,7 @@
+ proc fortran-torture { args } {
+     global srcdir subdir
+     global compiler_conditional_xfail_data
+-    global TORTURE_OPTIONS
++    global torture_with_loops
+ 
+     set src [lindex $args 0]
+     if { [llength $args] > 1 } {
+@@ -373,7 +386,7 @@
+     }
+    
+     # loop through all the options
+-    set option_list $TORTURE_OPTIONS
++    set option_list $torture_with_loops
+     foreach option $option_list {
+ 
+ 	# torture_compile_xfail is set by the .x script (if present)
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/lib/g++.exp gcc-4.3.2/gcc/testsuite/lib/g++.exp
+--- gcc-4.3.2.orig/gcc/testsuite/lib/g++.exp	2007-09-06 09:24:05.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/lib/g++.exp	2008-12-02 09:44:08.000000000 -0800
+@@ -24,6 +24,7 @@
+ #
+ load_lib prune.exp
+ load_lib gcc-defs.exp
++load_lib timeout.exp
+ load_lib target-libpath.exp
+ 
+ #
+@@ -275,6 +276,7 @@
+     lappend options "additional_flags=[libio_include_flags]"
+     lappend options "additional_flags=-fno-show-column"
+     lappend options "compiler=$GXX_UNDER_TEST"
++    lappend options "timeout=[timeout_value]"
+ 
+     set options [concat $gpp_compile_options $options]
+ 
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/lib/gcc-dg.exp gcc-4.3.2/gcc/testsuite/lib/gcc-dg.exp
+--- gcc-4.3.2.orig/gcc/testsuite/lib/gcc-dg.exp	2007-08-29 22:23:02.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/lib/gcc-dg.exp	2008-12-05 12:35:34.000000000 -0800
+@@ -23,15 +23,20 @@
+ load_lib scanrtl.exp
+ load_lib scantree.exp
+ load_lib scanipa.exp
++load_lib timeout.exp
++load_lib timeout-dg.exp
+ load_lib prune.exp
+ load_lib libgloss.exp
+ load_lib target-libpath.exp
++load_lib torture-options.exp
+ 
+ # We set LC_ALL and LANG to C so that we get the same error messages as expected.
+ setenv LC_ALL C
+ setenv LANG C
+ 
+-if ![info exists TORTURE_OPTIONS] {
++if [info exists TORTURE_OPTIONS] {
++    set DG_TORTURE_OPTIONS $TORTURE_OPTIONS
++} else {
+     # It is theoretically beneficial to group all of the O2/O3 options together,
+     # as in many cases the compiler will generate identical executables for
+     # all of them--and the c-torture testsuite will skip testing identical
+@@ -39,7 +44,7 @@
+     # Also note that -finline-functions is explicitly included in one of the
+     # items below, even though -O3 is also specified, because some ports may
+     # choose to disable inlining functions by default, even when optimizing.
+-    set TORTURE_OPTIONS [list \
++    set DG_TORTURE_OPTIONS [list \
+ 	{ -O0 } \
+ 	{ -O1 } \
+ 	{ -O2 } \
+@@ -64,17 +69,6 @@
+     set_ld_library_path_env_vars
+ }
+ 
+-# Split TORTURE_OPTIONS into two choices: one for testcases with loops and
+-# one for testcases without loops.
+-
+-set torture_with_loops $TORTURE_OPTIONS
+-set torture_without_loops ""
+-foreach option $TORTURE_OPTIONS {
+-    if ![string match "*loop*" $option] {
+-	lappend torture_without_loops $option
+-    }
+-}
+-
+ # Define gcc callbacks for dg.exp.
+ 
+ proc gcc-dg-test-1 { target_compile prog do_what extra_tool_flags } {
+@@ -238,7 +232,17 @@
+ proc gcc-dg-runtest { testcases default-extra-flags } {
+     global runtests
+ 
++    # Some callers set torture options themselves; don't override those.
++    set existing_torture_options [torture-options-exist]
++    if { $existing_torture_options == 0 } {
++	global DG_TORTURE_OPTIONS
++	torture-init
++	set-torture-options $DG_TORTURE_OPTIONS
++    }
++    dump-torture-options
++
+     foreach test $testcases {
++	global torture_with_loops torture_without_loops
+ 	# If we're only testing specific files and this isn't one of
+ 	# them, skip it.
+ 	if ![runtest_file_p $runtests $test] {
+@@ -247,7 +251,6 @@
+ 
+ 	# Look for a loop within the source code - if we don't find one,
+ 	# don't pass -funroll[-all]-loops.
+-	global torture_with_loops torture_without_loops
+ 	if [expr [search_for $test "for*("]+[search_for $test "while*("]] {
+ 	    set option_list $torture_with_loops
+ 	} else {
+@@ -261,6 +264,10 @@
+ 	    dg-test $test $flags ${default-extra-flags}
+ 	}
+     }
++
++    if { $existing_torture_options == 0 } {
++	torture-finish
++    }
+ }
+ 
+ proc gcc-dg-debug-runtest { target_compile trivial opt_opts testcases } {
+@@ -553,12 +560,14 @@
+ 	    if [info exists compiler_conditional_xfail_data] {
+ 		unset compiler_conditional_xfail_data
+ 	    }
++	    unset_timeout_vars
+ 	    error $errmsg $saved_info
+ 	}
+ 	set additional_files ""
+ 	set additional_sources ""
+ 	set additional_prunes ""
+ 	set shouldfail 0
++	unset_timeout_vars
+ 	if [info exists compiler_conditional_xfail_data] {
+ 	    unset compiler_conditional_xfail_data
+ 	}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/lib/gcc.exp gcc-4.3.2/gcc/testsuite/lib/gcc.exp
+--- gcc-4.3.2.orig/gcc/testsuite/lib/gcc.exp	2007-08-01 09:25:11.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/lib/gcc.exp	2008-12-02 09:44:08.000000000 -0800
+@@ -29,6 +29,7 @@
+ load_lib libgloss.exp
+ load_lib prune.exp
+ load_lib gcc-defs.exp
++load_lib timeout.exp
+ 
+ #
+ # GCC_UNDER_TEST is the compiler under test.
+@@ -147,9 +148,7 @@
+     if [info exists TOOL_OPTIONS] {
+ 	set options [concat "{additional_flags=$TOOL_OPTIONS}" $options]
+     }
+-    if [target_info exists gcc,timeout] {
+-	lappend options "timeout=[target_info gcc,timeout]"
+-    }
++    lappend options "timeout=[timeout_value]"
+     lappend options "additional_flags=-fno-show-column"
+     lappend options "compiler=$GCC_UNDER_TEST"
+     set options [dg-additional-files-options $options $source]
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/lib/gfortran-dg.exp gcc-4.3.2/gcc/testsuite/lib/gfortran-dg.exp
+--- gcc-4.3.2.orig/gcc/testsuite/lib/gfortran-dg.exp	2007-08-01 09:25:11.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/lib/gfortran-dg.exp	2008-12-05 12:35:34.000000000 -0800
+@@ -15,6 +15,7 @@
+ # <http://www.gnu.org/licenses/>.
+ 
+ load_lib gcc-dg.exp
++load_lib torture-options.exp
+ 
+ # Define gfortran callbacks for dg.exp.
+ 
+@@ -82,7 +83,10 @@
+ # as c-torture does.
+ proc gfortran-dg-runtest { testcases default-extra-flags } {
+     global runtests
+-    global TORTURE_OPTIONS
++    global DG_TORTURE_OPTIONS torture_with_loops
++
++    torture-init
++    set-torture-options $DG_TORTURE_OPTIONS
+ 
+     foreach test $testcases {
+ 	# If we're only testing specific files and this isn't one of
+@@ -94,7 +98,7 @@
+ 	# look if this is dg-do-run test, in which case
+ 	# we cycle through the option list, otherwise we don't
+ 	if [expr [search_for $test "dg-do run"]] {
+-	    set option_list $TORTURE_OPTIONS
++	    set option_list $torture_with_loops
+ 	} else {
+ 	    set option_list [list { -O } ]
+ 	}
+@@ -106,4 +110,6 @@
+ 	    dg-test $test $flags ${default-extra-flags}
+ 	}
+     }
++
++    torture-finish
+ }
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/lib/gfortran.exp gcc-4.3.2/gcc/testsuite/lib/gfortran.exp
+--- gcc-4.3.2.orig/gcc/testsuite/lib/gfortran.exp	2007-08-01 09:25:11.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/lib/gfortran.exp	2008-12-02 09:44:08.000000000 -0800
+@@ -24,6 +24,7 @@
+ #
+ load_lib prune.exp
+ load_lib gcc-defs.exp
++load_lib timeout.exp
+ load_lib target-libpath.exp
+ 
+ #
+@@ -193,6 +194,7 @@
+     }
+ 
+     lappend options "compiler=$GFORTRAN_UNDER_TEST"
++    lappend options "timeout=[timeout_value]"
+ 
+     set options [concat "$ALWAYS_GFORTRANFLAGS" $options]
+     set options [dg-additional-files-options $options $source]
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/lib/gnat.exp gcc-4.3.2/gcc/testsuite/lib/gnat.exp
+--- gcc-4.3.2.orig/gcc/testsuite/lib/gnat.exp	2007-08-01 09:25:11.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/lib/gnat.exp	2008-12-02 09:44:08.000000000 -0800
+@@ -27,6 +27,7 @@
+ load_lib libgloss.exp
+ load_lib prune.exp
+ load_lib gcc-defs.exp
++load_lib timeout.exp
+ 
+ #
+ # GNAT_UNDER_TEST is the compiler under test.
+@@ -131,6 +132,7 @@
+     set ld_library_path ".:${gnat_libgcc_s_path}"
+     lappend options "compiler=$GNAT_UNDER_TEST -q -f"
+     lappend options "incdir=${rootme}/ada/rts"
++    lappend options "timeout=[timeout_value]"
+ 
+     if { [target_info needs_status_wrapper]!="" && [info exists gluefile] } {
+ 	lappend options "libs=${gluefile}"
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/lib/obj-c++.exp gcc-4.3.2/gcc/testsuite/lib/obj-c++.exp
+--- gcc-4.3.2.orig/gcc/testsuite/lib/obj-c++.exp	2007-08-01 09:25:11.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/lib/obj-c++.exp	2008-12-02 09:44:08.000000000 -0800
+@@ -23,6 +23,7 @@
+ #
+ load_lib prune.exp
+ load_lib gcc-defs.exp
++load_lib timeout.exp
+ load_lib target-libpath.exp
+ 
+ #
+@@ -324,6 +325,7 @@
+ 
+     lappend options "additional_flags=[libio_include_flags]"
+     lappend options "compiler=$OBJCXX_UNDER_TEST";
++    lappend options "timeout=[timeout_value]"
+ 
+     set options [concat $gpp_compile_options $options]
+ 
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/lib/objc-torture.exp gcc-4.3.2/gcc/testsuite/lib/objc-torture.exp
+--- gcc-4.3.2.orig/gcc/testsuite/lib/objc-torture.exp	2007-08-01 09:25:11.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/lib/objc-torture.exp	2008-12-05 12:35:34.000000000 -0800
+@@ -18,9 +18,6 @@
+ 
+ load_lib file-format.exp
+ 
+-# The default option list can be overridden by
+-# TORTURE_OPTIONS="{ { list1 } ... { listN } }"
+-
+ if ![info exists OBJC_RUNTIME_OPTIONS] {
+   set OBJC_RUNTIME_OPTIONS ""
+   foreach type {-fgnu-runtime -fnext-runtime} {
+@@ -39,7 +36,12 @@
+ verbose -log "Using the following runtimes: $OBJC_RUNTIME_OPTIONS"
+ 
+ 
+-if ![info exists TORTURE_OPTIONS] {
++# The default option list can be overridden by
++# TORTURE_OPTIONS="{ { list1 } ... { listN } }"
++
++if [info exists TORTURE_OPTIONS] {
++    set OBJC_TORTURE_OPTIONS $TORTURE_OPTIONS
++} else {
+     # It is theoretically beneficial to group all of the O2/O3 options together,
+     # as in many cases the compiler will generate identical executables for
+     # all of them--and the objc-torture testsuite will skip testing identical
+@@ -47,7 +49,7 @@
+     # Also note that -finline-functions is explicitly included in one of the
+     # items below, even though -O3 is also specified, because some ports may
+     # choose to disable inlining functions by default, even when optimizing.
+-    set TORTURE_OPTIONS [list \
++    set OBJC_TORTURE_OPTIONS [list \
+ 	" -O0 " \
+ 	" -O1 " \
+ 	" -O2 " \
+@@ -58,23 +60,6 @@
+ 	" -Os " ]
+ }
+ 
+-
+-# Split TORTURE_OPTIONS into two choices: one for testcases with loops and
+-# one for testcases without loops. Add in the objc runtime options also.
+-
+-set torture_with_loops ""
+-set torture_without_loops ""
+-foreach objc_option $OBJC_RUNTIME_OPTIONS {
+-  foreach option $TORTURE_OPTIONS {
+-  
+-    if ![string match "*loop*" $option] {
+-	lappend torture_without_loops "$option $objc_option"
+-    }
+-    lappend torture_with_loops "$option $objc_option"
+-  }
+-}
+-
+-
+ #
+ # objc-torture-compile -- runs the Tege OBJC-torture test
+ #
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/lib/objc.exp gcc-4.3.2/gcc/testsuite/lib/objc.exp
+--- gcc-4.3.2.orig/gcc/testsuite/lib/objc.exp	2007-12-29 07:14:16.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/lib/objc.exp	2008-12-02 09:44:08.000000000 -0800
+@@ -28,6 +28,7 @@
+ load_lib libgloss.exp
+ load_lib prune.exp
+ load_lib gcc-defs.exp
++load_lib timeout.exp
+ load_lib target-libpath.exp
+ 
+ #
+@@ -193,6 +194,7 @@
+ 	set source [concat "-x objective-c-header" $source]
+     }
+     lappend options "compiler=$OBJC_UNDER_TEST"
++    lappend options "timeout=[timeout_value]"
+ 
+     set_ld_library_path_env_vars
+ 
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/lib/target-supports.exp gcc-4.3.2/gcc/testsuite/lib/target-supports.exp
+--- gcc-4.3.2.orig/gcc/testsuite/lib/target-supports.exp	2008-07-25 08:51:03.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/lib/target-supports.exp	2008-12-05 13:08:17.000000000 -0800
+@@ -2325,3 +2325,12 @@
+ 	    $contents [add_options_for_c99_runtime ""]
+     }]
+ }
++
++# Return 1 if current options generate DFP instructions, 0 otherwise.
++
++proc check_effective_target_hard_dfp {} {
++    return [check_no_messages_and_pattern hard_dfp "!adddd3" assembly {
++	_Decimal64 x, y, z;
++	void foo (void) { z = x + y; }
++    }]
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/lib/timeout-dg.exp gcc-4.3.2/gcc/testsuite/lib/timeout-dg.exp
+--- gcc-4.3.2.orig/gcc/testsuite/lib/timeout-dg.exp	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/lib/timeout-dg.exp	2008-12-02 09:44:08.000000000 -0800
+@@ -0,0 +1,49 @@
++# Copyright (C) 2008 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with GCC; see the file COPYING3.  If not see
++# <http://www.gnu.org/licenses/>.
++
++#
++# dg-timeout -- Set the timout limit, in seconds, for a particular test
++#
++
++proc dg-timeout { args } {
++    global individual_timeout
++
++    set args [lreplace $args 0 0]
++    if { [llength $args] > 1 } {
++	if { [dg-process-target [lindex $args 1]] == "S" } {
++	    set individual_timeout [lindex $args 0]
++	}
++    } else {
++	set individual_timeout [lindex $args 0]
++    }
++}
++
++#
++# dg-timeout-factor -- Scale the timeout limit for a particular test
++#
++
++proc dg-timeout-factor { args } {
++    global timeout_factor
++
++    set args [lreplace $args 0 0]
++    if { [llength $args] > 1 } {
++	if { [dg-process-target [lindex $args 1]] == "S" } {
++	    set timeout_factor [lindex $args 0]
++	}
++    } else {
++	set timeout_factor [lindex $args 0]
++    }
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/lib/timeout.exp gcc-4.3.2/gcc/testsuite/lib/timeout.exp
+--- gcc-4.3.2.orig/gcc/testsuite/lib/timeout.exp	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/lib/timeout.exp	2008-12-02 09:44:08.000000000 -0800
+@@ -0,0 +1,81 @@
++# Copyright (C) 2008 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with GCC; see the file COPYING3.  If not see
++# <http://www.gnu.org/licenses/>.
++
++#
++# unset_timeout_vars -- Unset variables used for timeouts
++#
++
++proc unset_timeout_vars { args } {
++    global individual_timeout
++    global timeout_factor
++
++    if [info exists individual_timeout] {
++	unset individual_timeout
++    }
++    if [info exists timeout_factor] {
++	unset timeout_factor
++    }
++}
++
++#
++# timeout_value -- Return the integer timeout value to use for this test
++#
++
++proc timeout_value { args } {
++    global tool_timeout
++    global individual_timeout
++    global timeout_factor
++
++    # Find the current timeout limit, in seconds.
++    if [info exists individual_timeout] {
++	set val $individual_timeout
++    } elseif [info exists tool_timeout] {
++	set val $tool_timeout
++    } elseif [target_info exists gcc,timeout] {
++	set val [target_info gcc,timeout]
++    } else {
++	# This is really, REALLY ugly, but this is the default from
++	# remote.exp deep within DejaGnu.
++	set val 300
++    }
++
++    # If the test specified a timeout factor, adjust by that.
++    if [info exists timeout_factor] {
++	set val [expr int([expr $val * $timeout_factor])]
++    }
++
++    return $val
++}
++
++#
++# standard_wait -- Set the timeout value used by DejaGnu
++#
++
++# Override standard_wait from DejaGnu to use timeout value specified by
++# by the user or by the target board, possibly multiplied by a factor
++# for a particular test.
++
++if { [info procs standard_wait] != [list] \
++     && [info procs saved_standard_wait] == [list] } {
++    rename standard_wait saved_standard_wait
++    proc standard_wait { dest timeout } {
++	set val [timeout_value]
++	if { $val != 0 } {
++	    set timeout $val
++	}
++	saved_standard_wait $dest $timeout
++    }
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/lib/torture-options.exp gcc-4.3.2/gcc/testsuite/lib/torture-options.exp
+--- gcc-4.3.2.orig/gcc/testsuite/lib/torture-options.exp	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/gcc/testsuite/lib/torture-options.exp	2008-12-05 12:35:34.000000000 -0800
+@@ -0,0 +1,112 @@
++# Copyright (C) 2008 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with GCC; see the file COPYING3.  If not see
++# <http://www.gnu.org/licenses/>.
++
++# Prepare to use a new set of torture options. 
++#
++# Letting options leak from one set of tests to another can be confusing.
++# Make sure variables are not set at the time we're called, because that
++# would mean they were set without being cleared.
++proc torture-init { args } {
++    global torture_without_loops global_with_loops
++
++    if [info exists torture_without_loops] {
++	error "torture-init: torture_without_loops is not empty as expected"
++    }
++    if [info exists torture_with_loops] {
++	error "torture-init: torture_with_loops is not empty as expected"
++    }
++}
++
++# Return 1 if torture options have already been set, 0 otherwise.
++proc torture-options-exist { args } {
++    global torture_with_loops
++    return [info exists torture_with_loops]
++}
++
++# Return 1 if compiler option ARG only affects loops, 0 otherwise.
++proc contains-loop-option-p { arg } {
++    switch -glob -- $arg {
++      "*loop*"		{ return 1 }
++      default		{ return 0 }
++    }
++}
++
++# Set torture options variables for tests with and without loops.
++#
++# Argument 0 is the list to use as torture options
++# Argument 1 is the list to combine with the torture options.
++proc set-torture-options { args } {
++    global torture_with_loops torture_without_loops
++
++    set torture_list [lindex $args 0]
++
++    if { [llength $args] != 1 } {
++	set other_list [lindex $args 1]
++    } else {
++	set other_list [list {}]
++    }
++
++    set torture_with_loops ""
++    set torture_without_loops ""
++    foreach torture_opts $torture_list {
++	foreach other_opts $other_list {
++	    # Remove trailing space[s] to match previous output.
++	    set torture_opts [string trimright $torture_opts]
++	    if ![contains-loop-option-p $torture_opts] {
++		lappend torture_without_loops "$torture_opts $other_opts"
++	    }
++	    lappend torture_with_loops "$torture_opts $other_opts"
++	}
++    }
++}
++
++# Finish up after using a set of torture options.
++#
++# Letting options leak from one set of tests to another can be confusing.
++# Make sure variables are set at the time we're called, and then unset
++# them to prevent interference with other sets of tests.
++proc torture-finish { args } {
++    global torture_without_loops torture_with_loops
++
++    if [info exists torture_without_loops] {
++	unset torture_without_loops
++    } else {
++	error "torture-finish: torture_without_loops is not defined"
++    }
++
++    if [info exists torture_with_loops] {
++	unset torture_with_loops
++    } else {
++	error "torture-finish: torture_with_loops is not defined"
++    }
++}
++
++# Useful for debugging .exp files.
++proc dump-torture-options { args } {
++    global torture_without_loops torture_with_loops
++
++    if [info exists torture_without_loops] {
++	verbose "torture_without_loops = \"${torture_without_loops}\"" 1
++    } else {
++	verbose "torture_without_loops is not defined" 1
++    }
++
++    if [info exists torture_with_loops] {
++	verbose "torture_with_loops = \"${torture_with_loops}\"" 1
++    } else {
++	verbose "torture_with_loops is not defined" 1
++    }
++}
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/objc/compile/compile.exp gcc-4.3.2/gcc/testsuite/objc/compile/compile.exp
+--- gcc-4.3.2.orig/gcc/testsuite/objc/compile/compile.exp	2007-08-01 09:25:11.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/objc/compile/compile.exp	2008-12-05 12:35:34.000000000 -0800
+@@ -23,6 +23,10 @@
+ 
+ # load support procs
+ load_lib objc-torture.exp
++load_lib torture-options.exp
++
++torture-init
++set-torture-options $OBJC_TORTURE_OPTIONS $OBJC_RUNTIME_OPTIONS
+ 
+ #
+ # main test loop
+@@ -36,3 +40,5 @@
+ 
+     objc-torture $src
+ }
++
++torture-finish
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/objc/execute/exceptions/exceptions.exp gcc-4.3.2/gcc/testsuite/objc/execute/exceptions/exceptions.exp
+--- gcc-4.3.2.orig/gcc/testsuite/objc/execute/exceptions/exceptions.exp	2007-08-01 09:25:11.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/objc/execute/exceptions/exceptions.exp	2008-12-05 12:35:34.000000000 -0800
+@@ -27,6 +27,10 @@
+ 
+ # load support procs
+ load_lib objc-torture.exp
++load_lib torture-options.exp
++
++torture-init
++set-torture-options $OBJC_TORTURE_OPTIONS $OBJC_RUNTIME_OPTIONS
+ 
+ #
+ # main test loop
+@@ -40,3 +44,5 @@
+ 
+     objc-torture-execute $src $additional_flags
+ }
++
++torture-finish
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/objc/execute/execute.exp gcc-4.3.2/gcc/testsuite/objc/execute/execute.exp
+--- gcc-4.3.2.orig/gcc/testsuite/objc/execute/execute.exp	2007-08-01 09:25:11.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/objc/execute/execute.exp	2008-12-05 12:35:34.000000000 -0800
+@@ -24,6 +24,10 @@
+ 
+ # load support procs
+ load_lib objc-torture.exp
++load_lib torture-options.exp
++
++torture-init
++set-torture-options $OBJC_TORTURE_OPTIONS $OBJC_RUNTIME_OPTIONS
+ 
+ #
+ # main test loop
+@@ -37,3 +41,5 @@
+ 
+     objc-torture-execute $src
+ }
++
++torture-finish
+diff -Naur gcc-4.3.2.orig/gcc/testsuite/objc.dg/pch/pch.exp gcc-4.3.2/gcc/testsuite/objc.dg/pch/pch.exp
+--- gcc-4.3.2.orig/gcc/testsuite/objc.dg/pch/pch.exp	2007-08-01 09:25:11.000000000 -0700
++++ gcc-4.3.2/gcc/testsuite/objc.dg/pch/pch.exp	2008-12-05 12:35:34.000000000 -0800
+@@ -20,10 +20,14 @@
+ # Load support procs.
+ load_lib objc-dg.exp
+ load_lib dg-pch.exp
++load_lib torture-options.exp
+ 
+ # Initialize `dg'.
+ dg-init
+ 
++torture-init
++set-torture-options $DG_TORTURE_OPTIONS
++
+ set old_dg_do_what_default "${dg-do-what-default}"
+ 
+ # Main loop.
+@@ -40,4 +44,5 @@
+ set dg-do-what-default "$old_dg_do_what_default"
+ 
+ # All done.
++torture-finish
+ dg-finish
+diff -Naur gcc-4.3.2.orig/gcc/tree-chrec.c gcc-4.3.2/gcc/tree-chrec.c
+--- gcc-4.3.2.orig/gcc/tree-chrec.c	2007-11-13 10:23:03.000000000 -0800
++++ gcc-4.3.2/gcc/tree-chrec.c	2008-08-28 07:15:49.000000000 -0700
+@@ -579,8 +579,7 @@
+       /* "{a, +, b} (x)"  ->  "a + b*x".  */
+       x = chrec_convert_rhs (type, x, NULL_TREE);
+       res = chrec_fold_multiply (TREE_TYPE (x), CHREC_RIGHT (chrec), x);
+-      if (!integer_zerop (CHREC_LEFT (chrec)))
+-	res = chrec_fold_plus (type, CHREC_LEFT (chrec), res);
++      res = chrec_fold_plus (type, CHREC_LEFT (chrec), res);
+     }
+   
+   else if (TREE_CODE (chrec) != POLYNOMIAL_CHREC)
+diff -Naur gcc-4.3.2.orig/gcc/tree-complex.c gcc-4.3.2/gcc/tree-complex.c
+--- gcc-4.3.2.orig/gcc/tree-complex.c	2008-02-17 07:06:53.000000000 -0800
++++ gcc-4.3.2/gcc/tree-complex.c	2008-10-01 07:30:37.000000000 -0700
+@@ -515,7 +515,8 @@
+   /* If we've nothing assigned, and the value we're given is already stable,
+      then install that as the value for this SSA_NAME.  This preemptively
+      copy-propagates the value, which avoids unnecessary memory allocation.  */
+-  else if (is_gimple_min_invariant (value))
++  else if (is_gimple_min_invariant (value)
++	   && !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (ssa_name))
+     {
+       VEC_replace (tree, complex_ssa_name_components, ssa_name_index, value);
+       return NULL;
+diff -Naur gcc-4.3.2.orig/gcc/tree-outof-ssa.c gcc-4.3.2/gcc/tree-outof-ssa.c
+--- gcc-4.3.2.orig/gcc/tree-outof-ssa.c	2008-01-06 07:24:10.000000000 -0800
++++ gcc-4.3.2/gcc/tree-outof-ssa.c	2008-10-17 10:35:58.000000000 -0700
+@@ -606,25 +606,64 @@
+ }
+ 
+ 
+-/* Remove any PHI node which is a virtual PHI.  */
++/* Remove each argument from PHI.  If an arg was the last use of an SSA_NAME, 
++   check to see if this allows another PHI node to be removed.  */
+ 
+ static void
+-eliminate_virtual_phis (void)
++remove_tree_phi_args (tree phi)
++{
++  use_operand_p arg_p;
++  ssa_op_iter iter;
++
++  if (dump_file && (dump_flags & TDF_DETAILS))
++    {
++      fprintf (dump_file, "Removing Dead PHI definition: ");
++      print_generic_stmt (dump_file, phi, TDF_SLIM);
++    }
++
++  FOR_EACH_PHI_ARG (arg_p, phi, iter, SSA_OP_USE)
++    {
++      tree arg = USE_FROM_PTR (arg_p);
++      if (TREE_CODE (arg) == SSA_NAME)
++        {
++	  /* Remove the reference to the existing argument.  */
++	  SET_USE (arg_p, NULL_TREE);
++	  if (has_zero_uses (arg))
++	    {
++	      tree stmt = SSA_NAME_DEF_STMT (arg);
++
++	      /* Also remove the def if it is a PHI node.  */
++	      if (TREE_CODE (stmt) == PHI_NODE)
++		{
++		  remove_tree_phi_args (stmt);
++		  remove_phi_node (stmt, NULL_TREE, true);
++		}
++	    }
++	}
++    }
++}
++
++
++/* Remove any PHI node which is a virtual PHI, or a PHI with no uses.  */
++
++static void
++eliminate_useless_phis (void)
+ {
+   basic_block bb;
+-  tree phi, next;
++  tree result, next, phi;
+ 
+   FOR_EACH_BB (bb)
+     {
+-      for (phi = phi_nodes (bb); phi; phi = next)
++      for (phi = phi_nodes (bb); phi; phi = next) 
+         {
+ 	  next = PHI_CHAIN (phi);
+-	  if (!is_gimple_reg (SSA_NAME_VAR (PHI_RESULT (phi))))
++	  result = PHI_RESULT (phi);
++	  if (!is_gimple_reg (SSA_NAME_VAR (result)))
+ 	    {
+ #ifdef ENABLE_CHECKING
+ 	      int i;
+-	      /* There should be no arguments of this PHI which are in
+-		 the partition list, or we get incorrect results.  */
++	      /* There should be no arguments which are not virtual, or the
++	         results will be incorrect.  */
+ 	      for (i = 0; i < PHI_NUM_ARGS (phi); i++)
+ 	        {
+ 		  tree arg = PHI_ARG_DEF (phi, i);
+@@ -639,7 +678,16 @@
+ 		    }
+ 		}
+ #endif
+-	      remove_phi_node (phi, NULL_TREE, true);
++	      remove_phi_node (phi, NULL_TREE , true);
++	    }
++          else
++	    {
++	      /* Also remove real PHIs with no uses.  */
++	      if (has_zero_uses (result))
++	        {
++		  remove_tree_phi_args (phi);
++		  remove_phi_node (phi, NULL_TREE, true);
++		}
+ 	    }
+ 	}
+     }
+@@ -1449,7 +1497,9 @@
+      copies into the loop itself.  */
+   insert_backedge_copies ();
+ 
+-  eliminate_virtual_phis ();
++
++  /* Eliminate PHIs which are of no use, such as virtual or dead phis.  */
++  eliminate_useless_phis ();
+ 
+   if (dump_file && (dump_flags & TDF_DETAILS))
+     dump_tree_cfg (dump_file, dump_flags & ~TDF_DETAILS);
+diff -Naur gcc-4.3.2.orig/gcc/tree-sra.c gcc-4.3.2/gcc/tree-sra.c
+--- gcc-4.3.2.orig/gcc/tree-sra.c	2008-02-12 10:35:05.000000000 -0800
++++ gcc-4.3.2/gcc/tree-sra.c	2008-12-07 13:39:57.000000000 -0800
+@@ -2919,8 +2919,13 @@
+     }
+   else if (TREE_CODE (fld->element) == INTEGER_CST)
+     {
++      tree domain_type = TYPE_DOMAIN (TREE_TYPE (fld->parent->element));
+       flen = fold_convert (bitsizetype, TYPE_SIZE (fld->type));
+       fpos = fold_convert (bitsizetype, fld->element);
++      if (domain_type && TYPE_MIN_VALUE (domain_type))
++	fpos = size_binop (MINUS_EXPR, fpos,
++			   fold_convert (bitsizetype,
++			   		 TYPE_MIN_VALUE (domain_type)));
+       fpos = size_binop (MULT_EXPR, flen, fpos);
+     }
+   else
+@@ -3221,12 +3226,20 @@
+       if (!elt->use_block_copy)
+ 	{
+ 	  tree type = TREE_TYPE (bfexpr);
+-	  tree var, vpos;
++	  tree var = make_rename_temp (type, "SR"), tmp, st = NULL, vpos;
+ 
+-	  if (!TYPE_UNSIGNED (type))
+-	    type = unsigned_type_for (type);
++	  GIMPLE_STMT_OPERAND (stmt, 1) = var;
++	  update = true;
+ 
+-	  var = make_rename_temp (type, "SR");
++	  if (!TYPE_UNSIGNED (type))
++	    {
++	      type = unsigned_type_for (type);
++	      tmp = make_rename_temp (type, "SR");
++	      st = build_gimple_modify_stmt (var,
++					     fold_convert (TREE_TYPE (var),
++							   tmp));
++	      var = tmp;
++	    }
+ 
+ 	  append_to_statement_list (build_gimple_modify_stmt
+ 				    (var, build_int_cst_wide (type, 0, 0)),
+@@ -3243,8 +3256,8 @@
+ 	  sra_explode_bitfield_assignment
+ 	    (var, vpos, true, &list, blen, bpos, elt);
+ 
+-	  GIMPLE_STMT_OPERAND (stmt, 1) = var;
+-	  update = true;
++	  if (st)
++	    append_to_statement_list (st, &list);
+ 	}
+       else
+ 	sra_sync_for_bitfield_assignment
+diff -Naur gcc-4.3.2.orig/gcc/tree-ssa-alias-warnings.c gcc-4.3.2/gcc/tree-ssa-alias-warnings.c
+--- gcc-4.3.2.orig/gcc/tree-ssa-alias-warnings.c	2008-08-07 02:59:58.000000000 -0700
++++ gcc-4.3.2/gcc/tree-ssa-alias-warnings.c	2008-10-22 04:33:04.000000000 -0700
+@@ -896,7 +896,7 @@
+     return true;
+ 
+   /* This would probably cause too many false positives.  */
+-  if (pi->value_escapes_p || pi->pt_anything)
++  if (pi->value_escapes_p || pi->pt_anything || pi->pt_global_mem)
+     return true;
+ 
+   return false;
+diff -Naur gcc-4.3.2.orig/gcc/tree-ssa-alias.c gcc-4.3.2/gcc/tree-ssa-alias.c
+--- gcc-4.3.2.orig/gcc/tree-ssa-alias.c	2008-06-23 03:10:38.000000000 -0700
++++ gcc-4.3.2/gcc/tree-ssa-alias.c	2008-10-19 10:08:15.000000000 -0700
+@@ -2946,16 +2946,6 @@
+       return false;
+     }
+ 
+-  /* If either MEM or VAR is a read-only global and the other one
+-     isn't, then PTR cannot point to VAR.  */
+-  if ((unmodifiable_var_p (mem) && !unmodifiable_var_p (var))
+-      || (unmodifiable_var_p (var) && !unmodifiable_var_p (mem)))
+-    {
+-      alias_stats.alias_noalias++;
+-      alias_stats.simple_resolved++;
+-      return false;
+-    }
+-
+   gcc_assert (TREE_CODE (mem) == SYMBOL_MEMORY_TAG);
+ 
+   if (!DECL_NO_TBAA_P (ptr))
+diff -Naur gcc-4.3.2.orig/gcc/tree-ssa-loop-ivopts.c gcc-4.3.2/gcc/tree-ssa-loop-ivopts.c
+--- gcc-4.3.2.orig/gcc/tree-ssa-loop-ivopts.c	2008-07-03 15:03:54.000000000 -0700
++++ gcc-4.3.2/gcc/tree-ssa-loop-ivopts.c	2008-10-07 10:33:28.000000000 -0700
+@@ -1448,10 +1448,8 @@
+ 	 and make them look addressable.  After some processing the
+ 	 non-addressability may be uncovered again, causing ADDR_EXPRs
+ 	 of inappropriate objects to be built.  */
+-      if (AGGREGATE_TYPE_P (TREE_TYPE (expr))
+-	  && !AGGREGATE_TYPE_P (TREE_TYPE (TREE_OPERAND (expr, 0))))
+-	return true;
+-      if (TREE_CODE (TREE_OPERAND (expr, 0)) == INTEGER_CST)
++      if (is_gimple_reg (TREE_OPERAND (expr, 0))
++	  || !is_gimple_addressable (TREE_OPERAND (expr, 0)))
+ 	return true;
+ 
+       /* ... fall through ... */
+diff -Naur gcc-4.3.2.orig/gcc/tree-ssa-operands.c gcc-4.3.2/gcc/tree-ssa-operands.c
+--- gcc-4.3.2.orig/gcc/tree-ssa-operands.c	2008-01-08 08:29:14.000000000 -0800
++++ gcc-4.3.2/gcc/tree-ssa-operands.c	2008-09-20 08:40:15.000000000 -0700
+@@ -1347,11 +1347,12 @@
+ 	   && flag_strict_aliasing
+ 	   && TREE_CODE (ref) != INDIRECT_REF
+ 	   && !MTAG_P (alias)
++	   && !var_ann (alias)->is_heapvar
+ 	   && !POINTER_TYPE_P (TREE_TYPE (alias))
+ 	   && offsetgtz
+ 	   && DECL_SIZE (alias)
+ 	   && TREE_CODE (DECL_SIZE (alias)) == INTEGER_CST
+-	   && uoffset > TREE_INT_CST_LOW (DECL_SIZE (alias)))
++	   && uoffset >= TREE_INT_CST_LOW (DECL_SIZE (alias)))
+     {
+ #ifdef ACCESS_DEBUGGING
+       fprintf (stderr, "Access to ");
+diff -Naur gcc-4.3.2.orig/gcc/tree-ssa-structalias.c gcc-4.3.2/gcc/tree-ssa-structalias.c
+--- gcc-4.3.2.orig/gcc/tree-ssa-structalias.c	2008-06-25 04:11:30.000000000 -0700
++++ gcc-4.3.2/gcc/tree-ssa-structalias.c	2008-12-10 10:42:36.000000000 -0800
+@@ -227,11 +227,6 @@
+   /* A link to the variable for the next field in this structure.  */
+   struct variable_info *next;
+ 
+-  /* True if the variable is directly the target of a dereference.
+-     This is used to track which variables are *actually* dereferenced
+-     so we can prune their points to listed. */
+-  unsigned int directly_dereferenced:1;
+-
+   /* True if this is a variable created by the constraint analysis, such as
+      heap variables and constraints we had to break up.  */
+   unsigned int is_artificial_var:1;
+@@ -246,6 +241,9 @@
+   /* True for variables that have unions somewhere in them.  */
+   unsigned int has_union:1;
+ 
++  /* True for (sub-)fields that represent a whole variable.  */
++  unsigned int is_full_var : 1;
++
+   /* True if this is a heap variable.  */
+   unsigned int is_heap_var:1;
+ 
+@@ -364,11 +362,11 @@
+   ret->id = id;
+   ret->name = name;
+   ret->decl = t;
+-  ret->directly_dereferenced = false;
+   ret->is_artificial_var = false;
+   ret->is_heap_var = false;
+   ret->is_special_var = false;
+   ret->is_unknown_size_var = false;
++  ret->is_full_var = false;
+   ret->has_union = false;
+   var = t;
+   if (TREE_CODE (var) == SSA_NAME)
+@@ -748,23 +746,33 @@
+ 
+   EXECUTE_IF_SET_IN_BITMAP (set, 0, i, bi)
+     {
+-      /* If this is a properly sized variable, only add offset if it's
+-	 less than end.  Otherwise, it is globbed to a single
+-	 variable.  */
++      varinfo_t vi = get_varinfo (i);
+ 
+-      if ((get_varinfo (i)->offset + offset) < get_varinfo (i)->fullsize)
++      /* If this is a variable with just one field just set its bit
++	 in the result.  */
++      if (vi->is_artificial_var
++	  || vi->is_unknown_size_var
++	  || vi->has_union
++	  || vi->is_full_var)
++	bitmap_set_bit (result, i);
++      else
+ 	{
+-	  unsigned HOST_WIDE_INT fieldoffset = get_varinfo (i)->offset + offset;
+-	  varinfo_t v = first_vi_for_offset (get_varinfo (i), fieldoffset);
++	  unsigned HOST_WIDE_INT fieldoffset = vi->offset + offset;
++	  varinfo_t v = first_vi_for_offset (vi, fieldoffset);
++	  /* If the result is outside of the variable use the last field.  */
+ 	  if (!v)
+-	    continue;
++	    {
++	      v = vi;
++	      while (v->next != NULL)
++		v = v->next;
++	    }
+ 	  bitmap_set_bit (result, v->id);
+-	}
+-      else if (get_varinfo (i)->is_artificial_var
+-	       || get_varinfo (i)->has_union
+-	       || get_varinfo (i)->is_unknown_size_var)
+-	{
+-	  bitmap_set_bit (result, i);
++	  /* If the result is not exactly at fieldoffset include the next
++	     field as well.  See get_constraint_for_ptr_offset for more
++	     rationale.  */
++	  if (v->offset != fieldoffset
++	      && v->next != NULL)
++	    bitmap_set_bit (result, v->next->id);
+ 	}
+     }
+ 
+@@ -1377,7 +1385,8 @@
+      0.  */
+   if (ninfo->is_special_var
+       || ninfo->is_artificial_var
+-      || ninfo->is_unknown_size_var)
++      || ninfo->is_unknown_size_var
++      || ninfo->is_full_var)
+     {
+       *offset = 0;
+       return true;
+@@ -1417,6 +1426,7 @@
+ 	  unsigned int t;
+ 
+ 	  v = first_vi_for_offset (get_varinfo (j), fieldoffset);
++	  /* If the access is outside of the variable we can ignore it.  */
+ 	  if (!v)
+ 	    continue;
+ 	  t = find (v->id);
+@@ -1466,9 +1476,14 @@
+ 	 unsigned HOST_WIDE_INT fieldoffset = jvi->offset + loff;
+ 	 varinfo_t v;
+ 
+-	 v = first_vi_for_offset (get_varinfo (j), fieldoffset);
+-	 if (!v)
+-	   continue;
++	 v = get_varinfo (j);
++	 if (!v->is_full_var)
++	   {
++	     v = first_vi_for_offset (v, fieldoffset);
++	     /* If the access is outside of the variable we can ignore it.  */
++	     if (!v)
++	       continue;
++	   }
+ 	 t = find (v->id);
+ 
+ 	 if (!bitmap_bit_p (get_varinfo (t)->solution, anything_id))
+@@ -1497,6 +1512,7 @@
+ 	  bitmap tmp;
+ 
+ 	  v = first_vi_for_offset (get_varinfo (j), fieldoffset);
++	  /* If the access is outside of the variable we can ignore it.  */
+ 	  if (!v)
+ 	    continue;
+ 	  t = find (v->id);
+@@ -2525,20 +2541,6 @@
+   gcc_assert (rhs.var < VEC_length (varinfo_t, varmap));
+   gcc_assert (lhs.var < VEC_length (varinfo_t, varmap));
+ 
+-  if (!from_call)
+-    {
+-      if (lhs.type == DEREF)
+-	get_varinfo (lhs.var)->directly_dereferenced = true;
+-      if (rhs.type == DEREF)
+-	get_varinfo (rhs.var)->directly_dereferenced = true;
+-    }
+-
+-  if (!use_field_sensitive)
+-    {
+-      t->rhs.offset = 0;
+-      t->lhs.offset = 0;
+-    }
+-
+   /* ANYTHING == ANYTHING is pointless.  */
+   if (lhs.var == anything_id && rhs.var == anything_id)
+     return;
+@@ -2607,8 +2609,7 @@
+   tree type = TREE_TYPE (t);
+ 
+   if (POINTER_TYPE_P (type)
+-      || AGGREGATE_TYPE_P (type)
+-      || TREE_CODE (type) == COMPLEX_TYPE)
++      || AGGREGATE_TYPE_P (type))
+     return true;
+ 
+   return false;
+@@ -2649,6 +2650,120 @@
+   return false;
+ }
+ 
++
++/* Get constraint expressions for offsetting PTR by OFFSET.  Stores the
++   resulting constraint expressions in *RESULTS.  */
++
++static void
++get_constraint_for_ptr_offset (tree ptr, tree offset,
++			       VEC (ce_s, heap) **results)
++{
++  struct constraint_expr *c;
++  unsigned int j, n;
++  unsigned HOST_WIDE_INT rhsunitoffset, rhsoffset;
++
++  /* If we do not do field-sensitive PTA adding offsets to pointers
++     does not change the points-to solution.  */
++  if (!use_field_sensitive)
++    {
++      get_constraint_for (ptr, results);
++      return;
++    }
++
++  /* If the offset is not a non-negative integer constant that fits
++     in a HOST_WIDE_INT, we have to fall back to a conservative
++     solution which includes all sub-fields of all pointed-to
++     variables of ptr.
++     ???  As we do not have the ability to express this, fall back
++     to anything.  */
++  if (!host_integerp (offset, 1))
++    {
++      struct constraint_expr temp;
++      temp.var = anything_id;
++      temp.type = SCALAR;
++      temp.offset = 0;
++      VEC_safe_push (ce_s, heap, *results, &temp);
++      return;
++    }
++
++  /* Make sure the bit-offset also fits.  */
++  rhsunitoffset = TREE_INT_CST_LOW (offset);
++  rhsoffset = rhsunitoffset * BITS_PER_UNIT;
++  if (rhsunitoffset != rhsoffset / BITS_PER_UNIT)
++    {
++      struct constraint_expr temp;
++      temp.var = anything_id;
++      temp.type = SCALAR;
++      temp.offset = 0;
++      VEC_safe_push (ce_s, heap, *results, &temp);
++      return;
++    }
++
++  get_constraint_for (ptr, results);
++  if (rhsoffset == 0)
++    return;
++
++  /* As we are eventually appending to the solution do not use
++     VEC_iterate here.  */
++  n = VEC_length (ce_s, *results);
++  for (j = 0; j < n; j++)
++    {
++      varinfo_t curr;
++      c = VEC_index (ce_s, *results, j);
++      curr = get_varinfo (c->var);
++
++      if (c->type == ADDRESSOF
++	  && !curr->is_full_var)
++	{
++	  varinfo_t temp, curr = get_varinfo (c->var);
++
++	  /* Search the sub-field which overlaps with the
++	     pointed-to offset.  As we deal with positive offsets
++	     only, we can start the search from the current variable.  */
++	  temp = first_vi_for_offset (curr, curr->offset + rhsoffset);
++
++	  /* If the result is outside of the variable we have to provide
++	     a conservative result, as the variable is still reachable
++	     from the resulting pointer (even though it technically
++	     cannot point to anything).  The last sub-field is such
++	     a conservative result.
++	     ???  If we always had a sub-field for &object + 1 then
++	     we could represent this in a more precise way.  */
++	  if (temp == NULL)
++	    {
++	      temp = curr;
++	      while (temp->next != NULL)
++		temp = temp->next;
++	      continue;
++	    }
++
++	  /* If the found variable is not exactly at the pointed to
++	     result, we have to include the next variable in the
++	     solution as well.  Otherwise two increments by offset / 2
++	     do not result in the same or a conservative superset
++	     solution.  */
++	  if (temp->offset != curr->offset + rhsoffset
++	      && temp->next != NULL)
++	    {
++	      struct constraint_expr c2;
++	      c2.var = temp->next->id;
++	      c2.type = ADDRESSOF;
++	      c2.offset = 0;
++	      VEC_safe_push (ce_s, heap, *results, &c2);
++	    }
++	  c->var = temp->id;
++	  c->offset = 0;
++	}
++      else if (c->type == ADDRESSOF
++	       /* If this varinfo represents a full variable just use it.  */
++	       && curr->is_full_var)
++	c->offset = 0;
++      else
++	c->offset = rhsoffset;
++    }
++}
++
++
+ /* Given a COMPONENT_REF T, return the constraint_expr for it.  */
+ 
+ static void
+@@ -2696,7 +2811,11 @@
+   if (TREE_CODE (t) != ADDR_EXPR && result->type == ADDRESSOF)
+     result->type = SCALAR;
+ 
+-  if (result->type == SCALAR)
++  if (result->type == SCALAR
++      && get_varinfo (result->var)->is_full_var)
++    /* For single-field vars do not bother about the offset.  */
++    result->offset = 0;
++  else if (result->type == SCALAR)
+     {
+       /* In languages like C, you can access one past the end of an
+ 	 array.  You aren't allowed to dereference it, so we can
+@@ -2815,33 +2934,9 @@
+ 	      struct constraint_expr *c;
+ 	      unsigned int i;
+ 	      tree exp = TREE_OPERAND (t, 0);
+-	      tree pttype = TREE_TYPE (TREE_TYPE (t));
+ 
+ 	      get_constraint_for (exp, results);
+ 
+-
+-	      /* Complex types are special. Taking the address of one
+-		 allows you to access either part of it through that
+-		 pointer.  */
+-	      if (VEC_length (ce_s, *results) == 1 &&
+-		  TREE_CODE (pttype) == COMPLEX_TYPE)
+-		{
+-		  struct constraint_expr *origrhs;
+-		  varinfo_t origvar;
+-		  struct constraint_expr tmp;
+-
+-		  gcc_assert (VEC_length (ce_s, *results) == 1);
+-		  origrhs = VEC_last (ce_s, *results);
+-		  tmp = *origrhs;
+-		  VEC_pop (ce_s, *results);
+-		  origvar = get_varinfo (origrhs->var);
+-		  for (; origvar; origvar = origvar->next)
+-		    {
+-		      tmp.var = origvar->id;
+-		      VEC_safe_push (ce_s, heap, *results, &tmp);
+-		    }
+-		}
+-
+ 	      for (i = 0; VEC_iterate (ce_s, *results, i, c); i++)
+ 		{
+ 		  if (c->type == DEREF)
+@@ -2957,6 +3052,16 @@
+ 	    }
+ 	  }
+       }
++    case tcc_binary:
++      {
++	if (TREE_CODE (t) == POINTER_PLUS_EXPR)
++	  {
++	    get_constraint_for_ptr_offset (TREE_OPERAND (t, 0),
++					   TREE_OPERAND (t, 1), results);
++	    return;
++	  }
++	break;
++      }
+     case tcc_exceptional:
+       {
+ 	switch (TREE_CODE (t))
+@@ -3481,6 +3586,29 @@
+ 
+       mem_ref_stats->num_mem_stmts++;
+ 
++      /* Add all decls written to to the list of written variables.  */
++      if (TREE_CODE (stmt) == GIMPLE_MODIFY_STMT
++	  && TREE_CODE (GIMPLE_STMT_OPERAND (stmt, 0)) != SSA_NAME)
++	{
++	  tree lhs = GIMPLE_STMT_OPERAND (stmt, 0);
++	  while (handled_component_p (lhs))
++	    lhs = TREE_OPERAND (lhs, 0);
++	  if (DECL_P (lhs))
++	    {
++	      subvar_t svars;
++	      if (var_can_have_subvars (lhs)
++		  && (svars = get_subvars_for_var (lhs)))
++		{
++		  unsigned int i;
++		  tree subvar;
++		  for (i = 0; VEC_iterate (tree, svars, i, subvar); ++i)
++		    pointer_set_insert (ai->written_vars, subvar);
++		}
++	      else
++		pointer_set_insert (ai->written_vars, lhs);
++	    }
++	}
++
+       /* Notice that we only update memory reference stats for symbols
+ 	 loaded and stored by the statement if the statement does not
+ 	 contain pointer dereferences and it is not a call/asm site.
+@@ -3503,102 +3631,23 @@
+ 	 dereferences (e.g., MEMORY_VAR = *PTR) or if a call site has
+ 	 memory symbols in its argument list, but these cases do not
+ 	 occur so frequently as to constitute a serious problem.  */
+-      if (STORED_SYMS (stmt))
+-	EXECUTE_IF_SET_IN_BITMAP (STORED_SYMS (stmt), 0, i, bi)
+-	  {
+-	    tree sym = referenced_var (i);
+-	    pointer_set_insert (ai->written_vars, sym);
+-	    if (!stmt_dereferences_ptr_p
+-		&& stmt_escape_type != ESCAPE_TO_CALL
+-		&& stmt_escape_type != ESCAPE_TO_PURE_CONST
+-		&& stmt_escape_type != ESCAPE_TO_ASM)
+-	      update_mem_sym_stats_from_stmt (sym, stmt, 0, 1);
+-	  }
+-
+       if (!stmt_dereferences_ptr_p
+-	  && LOADED_SYMS (stmt)
+ 	  && stmt_escape_type != ESCAPE_TO_CALL
+ 	  && stmt_escape_type != ESCAPE_TO_PURE_CONST
+ 	  && stmt_escape_type != ESCAPE_TO_ASM)
+-	EXECUTE_IF_SET_IN_BITMAP (LOADED_SYMS (stmt), 0, i, bi)
+-	  update_mem_sym_stats_from_stmt (referenced_var (i), stmt, 1, 0);
++	{
++	  if (STORED_SYMS (stmt))
++	    EXECUTE_IF_SET_IN_BITMAP (STORED_SYMS (stmt), 0, i, bi)
++	      update_mem_sym_stats_from_stmt (referenced_var (i), stmt, 0, 1);
++
++	  if (LOADED_SYMS (stmt))
++	    EXECUTE_IF_SET_IN_BITMAP (LOADED_SYMS (stmt), 0, i, bi)
++	      update_mem_sym_stats_from_stmt (referenced_var (i), stmt, 1, 0);
++	}
+     }
+ }
+ 
+ 
+-/* Handle pointer arithmetic EXPR when creating aliasing constraints.
+-   Expressions of the type PTR + CST can be handled in two ways:
+-
+-   1- If the constraint for PTR is ADDRESSOF for a non-structure
+-      variable, then we can use it directly because adding or
+-      subtracting a constant may not alter the original ADDRESSOF
+-      constraint (i.e., pointer arithmetic may not legally go outside
+-      an object's boundaries).
+-
+-   2- If the constraint for PTR is ADDRESSOF for a structure variable,
+-      then if CST is a compile-time constant that can be used as an
+-      offset, we can determine which sub-variable will be pointed-to
+-      by the expression.
+-
+-   Return true if the expression is handled.  For any other kind of
+-   expression, return false so that each operand can be added as a
+-   separate constraint by the caller.  */
+-
+-static bool
+-handle_ptr_arith (VEC (ce_s, heap) *lhsc, tree expr)
+-{
+-  tree op0, op1;
+-  struct constraint_expr *c, *c2;
+-  unsigned int i = 0;
+-  unsigned int j = 0;
+-  VEC (ce_s, heap) *temp = NULL;
+-  unsigned HOST_WIDE_INT rhsunitoffset, rhsoffset;
+-
+-  if (TREE_CODE (expr) != POINTER_PLUS_EXPR)
+-    return false;
+-
+-  op0 = TREE_OPERAND (expr, 0);
+-  op1 = TREE_OPERAND (expr, 1);
+-  gcc_assert (POINTER_TYPE_P (TREE_TYPE (op0)));
+-
+-  /* If the offset is not a non-negative integer constant that fits
+-     in a HOST_WIDE_INT, we cannot handle it here.  */
+-  if (!host_integerp (op1, 1))
+-    return false;
+-
+-  /* Make sure the bit-offset also fits.  */
+-  rhsunitoffset = TREE_INT_CST_LOW (op1);
+-  rhsoffset = rhsunitoffset * BITS_PER_UNIT;
+-  if (rhsunitoffset != rhsoffset / BITS_PER_UNIT)
+-    return false;
+-
+-  get_constraint_for (op0, &temp);
+-
+-  for (i = 0; VEC_iterate (ce_s, lhsc, i, c); i++)
+-    for (j = 0; VEC_iterate (ce_s, temp, j, c2); j++)
+-      {
+-	if (c2->type == ADDRESSOF && rhsoffset != 0)
+-	  {
+-	    varinfo_t temp = get_varinfo (c2->var);
+-
+-	    /* An access one after the end of an array is valid,
+-	       so simply punt on accesses we cannot resolve.  */
+-	    temp = first_vi_for_offset (temp, rhsoffset);
+-	    if (temp == NULL)
+-	      continue;
+-	    c2->var = temp->id;
+-	    c2->offset = 0;
+-	  }
+-	else
+-	  c2->offset = rhsoffset;
+-	process_constraint (new_constraint (*c, *c2));
+-      }
+-
+-  VEC_free (ce_s, heap, temp);
+-
+-  return true;
+-}
+-
+ /* For non-IPA mode, generate constraints necessary for a call on the
+    RHS.  */
+ 
+@@ -3829,10 +3878,8 @@
+       tree rhsop = GIMPLE_STMT_OPERAND (t, 1);
+       int i;
+ 
+-      if ((AGGREGATE_TYPE_P (TREE_TYPE (lhsop))
+-	   || TREE_CODE (TREE_TYPE (lhsop)) == COMPLEX_TYPE)
+-	  && (AGGREGATE_TYPE_P (TREE_TYPE (rhsop))
+-	      || TREE_CODE (TREE_TYPE (lhsop)) == COMPLEX_TYPE))
++      if (AGGREGATE_TYPE_P (TREE_TYPE (lhsop))
++	  && AGGREGATE_TYPE_P (TREE_TYPE (rhsop)))
+ 	{
+ 	  do_structure_copy (lhsop, rhsop);
+ 	}
+@@ -3856,6 +3903,7 @@
+ 		  case tcc_expression:
+ 		  case tcc_vl_exp:
+ 		  case tcc_unary:
++		  case tcc_binary:
+ 		      {
+ 			unsigned int j;
+ 
+@@ -3868,21 +3916,9 @@
+ 			    for (k = 0; VEC_iterate (ce_s, rhsc, k, c2); k++)
+ 			      process_constraint (new_constraint (*c, *c2));
+ 			  }
+-
+ 		      }
+ 		    break;
+ 
+-		  case tcc_binary:
+-		      {
+-			/* For pointer arithmetic of the form
+-			   PTR + CST, we can simply use PTR's
+-			   constraint because pointer arithmetic is
+-			   not allowed to go out of bounds.  */
+-			if (handle_ptr_arith (lhsc, rhsop))
+-			  break;
+-		      }
+-		    /* FALLTHRU  */
+-
+ 		  /* Otherwise, walk each operand.  Notice that we
+ 		     can't use the operand interface because we need
+ 		     to process expressions other than simple operands
+@@ -4271,8 +4307,7 @@
+   stats.total_vars++;
+ 
+   /* If it's varargs, we don't know how many arguments it has, so we
+-     can't do much.
+-  */
++     can't do much.  */
+   if (is_varargs)
+     {
+       vi->fullsize = ~0;
+@@ -4306,6 +4341,7 @@
+       VEC_safe_push (varinfo_t, heap, varmap, argvi);
+       argvi->offset = i;
+       argvi->size = 1;
++      argvi->is_full_var = true;
+       argvi->fullsize = vi->fullsize;
+       argvi->has_union = false;
+       insert_into_field_list_sorted (vi, argvi);
+@@ -4343,6 +4379,7 @@
+       resultvi->offset = i;
+       resultvi->size = 1;
+       resultvi->fullsize = vi->fullsize;
++      resultvi->is_full_var = true;
+       resultvi->has_union = false;
+       insert_into_field_list_sorted (vi, resultvi);
+       stats.total_vars ++;
+@@ -4478,6 +4515,7 @@
+ 	  vi->is_unknown_size_var = 1;
+ 	  vi->fullsize = ~0;
+ 	  vi->size = ~0;
++	  vi->is_full_var = true;
+ 	  VEC_free (fieldoff_s, heap, fieldstack);
+ 	  return index;
+ 	}
+@@ -4516,6 +4554,8 @@
+ 	  stats.total_vars++;
+ 	}
+     }
++  else
++    vi->is_full_var = true;
+ 
+   VEC_free (fieldoff_s, heap, fieldstack);
+ 
+@@ -4601,6 +4641,7 @@
+ 	      heapvar_insert (t, heapvar);
+ 
+ 	      ann = get_var_ann (heapvar);
++	      ann->is_heapvar = 1;
+ 	      if (flag_argument_noalias == 1)
+ 		ann->noalias_state = NO_ALIAS;
+ 	      else if (flag_argument_noalias == 2)
+@@ -4714,20 +4755,16 @@
+    the from set.  */
+ 
+ static void
+-set_uids_in_ptset (tree ptr, bitmap into, bitmap from, bool is_derefed,
+-		   bool no_tbaa_pruning)
++set_uids_in_ptset (tree ptr, bitmap into, bitmap from)
+ {
+   unsigned int i;
+   bitmap_iterator bi;
+-  alias_set_type ptr_alias_set;
+ 
+   gcc_assert (POINTER_TYPE_P (TREE_TYPE (ptr)));
+-  ptr_alias_set = get_alias_set (TREE_TYPE (TREE_TYPE (ptr)));
+ 
+   EXECUTE_IF_SET_IN_BITMAP (from, 0, i, bi)
+     {
+       varinfo_t vi = get_varinfo (i);
+-      alias_set_type var_alias_set;
+ 
+       /* The only artificial variables that are allowed in a may-alias
+ 	 set are heap variables.  */
+@@ -4766,54 +4803,40 @@
+ 	      && (sv = get_subvars_for_var (vi->decl)))
+ 	    {
+ 	      /* If VI->DECL is an aggregate for which we created
+-		 SFTs, add the SFT corresponding to VI->OFFSET.
++		 SFTs, add the SFT corresponding to VI->OFFSET (the
++		 pointed-to location) and the access size.
+ 		 If we didn't do field-sensitive PTA we need to to
+ 		 add all overlapping SFTs.  */
+ 	      unsigned int j;
+-	      tree sft = get_first_overlapping_subvar (sv, vi->offset,
+-						       vi->size, &j);
++	      unsigned HOST_WIDE_INT size = -1;
++	      tree sft, tsize = TYPE_SIZE (TREE_TYPE (TREE_TYPE (ptr)));
++	      if (tsize
++		  && host_integerp (tsize, 1))
++		size = TREE_INT_CST_LOW (tsize);
++	      sft = get_first_overlapping_subvar (sv, vi->offset, size, &j);
+ 	      gcc_assert (sft);
+ 	      for (; VEC_iterate (tree, sv, j, sft); ++j)
+ 		{
+ 		  if (SFT_OFFSET (sft) > vi->offset
+-		      && vi->size <= SFT_OFFSET (sft) - vi->offset)
++		      && size <= SFT_OFFSET (sft) - vi->offset)
+ 		    break;
+ 
+-		  var_alias_set = get_alias_set (sft);
+-		  if (no_tbaa_pruning
+-		      || (!is_derefed && !vi->directly_dereferenced)
+-		      || alias_sets_conflict_p (ptr_alias_set, var_alias_set))
+-		    {
+-		      bitmap_set_bit (into, DECL_UID (sft));
+-		      
+-		      /* Pointed-to SFTs are needed by the operand scanner
+-			 to adjust offsets when adding operands to memory
+-			 expressions that dereference PTR.  This means
+-			 that memory partitioning may not partition
+-			 this SFT because the operand scanner will not
+-			 be able to find the other SFTs next to this
+-			 one.  But we only need to do this if the pointed
+-			 to type is aggregate.  */
+-		      if (SFT_BASE_FOR_COMPONENTS_P (sft))
+-			SFT_UNPARTITIONABLE_P (sft) = true;
+-		    }
++		  bitmap_set_bit (into, DECL_UID (sft));
++
++		  /* Pointed-to SFTs are needed by the operand scanner
++		     to adjust offsets when adding operands to memory
++		     expressions that dereference PTR.  This means
++		     that memory partitioning may not partition
++		     this SFT because the operand scanner will not
++		     be able to find the other SFTs next to this
++		     one.  But we only need to do this if the pointed
++		     to type is aggregate.  */
++		  if (SFT_BASE_FOR_COMPONENTS_P (sft))
++		    SFT_UNPARTITIONABLE_P (sft) = true;
+ 		}
+ 	    }
+ 	  else
+-	    {
+-	      /* Otherwise, just add VI->DECL to the alias set.
+-		 Don't type prune artificial vars.  */
+-	      if (vi->is_artificial_var)
+-		bitmap_set_bit (into, DECL_UID (vi->decl));
+-	      else
+-		{
+-		  var_alias_set = get_alias_set (vi->decl);
+-		  if (no_tbaa_pruning
+-		      || (!is_derefed && !vi->directly_dereferenced)
+-		      || alias_sets_conflict_p (ptr_alias_set, var_alias_set))
+-		    bitmap_set_bit (into, DECL_UID (vi->decl));
+-		}
+-	    }
++	    bitmap_set_bit (into, DECL_UID (vi->decl));
+ 	}
+     }
+ }
+@@ -5020,9 +5043,7 @@
+ 	      pi->pt_global_mem = 1;
+ 	    }
+ 
+-	  set_uids_in_ptset (p, finished_solution, vi->solution,
+-			     vi->directly_dereferenced,
+-			     vi->no_tbaa_pruning);
++	  set_uids_in_ptset (p, finished_solution, vi->solution);
+ 	  result = shared_bitmap_lookup (finished_solution);
+ 
+ 	  if (!result)
+@@ -5194,6 +5215,8 @@
+ static void
+ init_alias_vars (void)
+ {
++  use_field_sensitive = (MAX_FIELDS_FOR_FIELD_SENSITIVE > 1);
++
+   bitmap_obstack_initialize (&pta_obstack);
+   bitmap_obstack_initialize (&oldpta_obstack);
+   bitmap_obstack_initialize (&predbitmap_obstack);
+diff -Naur gcc-4.3.2.orig/gcc/tree-vect-analyze.c gcc-4.3.2/gcc/tree-vect-analyze.c
+--- gcc-4.3.2.orig/gcc/tree-vect-analyze.c	2008-05-14 05:11:21.000000000 -0700
++++ gcc-4.3.2/gcc/tree-vect-analyze.c	2008-11-11 23:13:13.000000000 -0800
+@@ -3314,8 +3314,8 @@
+ 
+ 	  if (vect_print_dump_info (REPORT_DETAILS))
+ 	    {
+-	      fprintf (dump_file, "analyze in outer-loop: ");
+-	      print_generic_expr (dump_file, inner_base, TDF_SLIM);
++	      fprintf (vect_dump, "analyze in outer-loop: ");
++	      print_generic_expr (vect_dump, inner_base, TDF_SLIM);
+ 	    }
+ 
+ 	  outer_base = get_inner_reference (inner_base, &pbitsize, &pbitpos, 
+@@ -3325,7 +3325,7 @@
+ 	  if (pbitpos % BITS_PER_UNIT != 0)
+ 	    {
+ 	      if (vect_print_dump_info (REPORT_DETAILS))
+-		fprintf (dump_file, "failed: bit offset alignment.\n");
++		fprintf (vect_dump, "failed: bit offset alignment.\n");
+ 	      return false;
+ 	    }
+ 
+@@ -3333,7 +3333,7 @@
+ 	  if (!simple_iv (loop, stmt, outer_base, &base_iv, false))
+ 	    {
+ 	      if (vect_print_dump_info (REPORT_DETAILS))
+-		fprintf (dump_file, "failed: evolution of base is not affine.\n");
++		fprintf (vect_dump, "failed: evolution of base is not affine.\n");
+ 	      return false;
+ 	    }
+ 
+@@ -3353,7 +3353,7 @@
+ 	  else if (!simple_iv (loop, stmt, poffset, &offset_iv, false))
+ 	    {
+ 	      if (vect_print_dump_info (REPORT_DETAILS))
+-	        fprintf (dump_file, "evolution of offset is not affine.\n");
++	        fprintf (vect_dump, "evolution of offset is not affine.\n");
+ 	      return false;
+ 	    }
+ 
+@@ -3376,18 +3376,18 @@
+ 	  STMT_VINFO_DR_ALIGNED_TO (stmt_info) = 
+ 				size_int (highest_pow2_factor (offset_iv.base));
+ 
+-	  if (dump_file && (dump_flags & TDF_DETAILS))
++	  if (vect_print_dump_info (REPORT_DETAILS))
+ 	    {
+-	      fprintf (dump_file, "\touter base_address: ");
+-	      print_generic_expr (dump_file, STMT_VINFO_DR_BASE_ADDRESS (stmt_info), TDF_SLIM);
+-	      fprintf (dump_file, "\n\touter offset from base address: ");
+-	      print_generic_expr (dump_file, STMT_VINFO_DR_OFFSET (stmt_info), TDF_SLIM);
+-	      fprintf (dump_file, "\n\touter constant offset from base address: ");
+-	      print_generic_expr (dump_file, STMT_VINFO_DR_INIT (stmt_info), TDF_SLIM);
+-	      fprintf (dump_file, "\n\touter step: ");
+-	      print_generic_expr (dump_file, STMT_VINFO_DR_STEP (stmt_info), TDF_SLIM);
+-	      fprintf (dump_file, "\n\touter aligned to: ");
+-	      print_generic_expr (dump_file, STMT_VINFO_DR_ALIGNED_TO (stmt_info), TDF_SLIM);
++	      fprintf (vect_dump, "\touter base_address: ");
++	      print_generic_expr (vect_dump, STMT_VINFO_DR_BASE_ADDRESS (stmt_info), TDF_SLIM);
++	      fprintf (vect_dump, "\n\touter offset from base address: ");
++	      print_generic_expr (vect_dump, STMT_VINFO_DR_OFFSET (stmt_info), TDF_SLIM);
++	      fprintf (vect_dump, "\n\touter constant offset from base address: ");
++	      print_generic_expr (vect_dump, STMT_VINFO_DR_INIT (stmt_info), TDF_SLIM);
++	      fprintf (vect_dump, "\n\touter step: ");
++	      print_generic_expr (vect_dump, STMT_VINFO_DR_STEP (stmt_info), TDF_SLIM);
++	      fprintf (vect_dump, "\n\touter aligned to: ");
++	      print_generic_expr (vect_dump, STMT_VINFO_DR_ALIGNED_TO (stmt_info), TDF_SLIM);
+ 	    }
+ 	}
+ 
+diff -Naur gcc-4.3.2.orig/gcc/tree-vect-transform.c gcc-4.3.2/gcc/tree-vect-transform.c
+--- gcc-4.3.2.orig/gcc/tree-vect-transform.c	2008-06-30 22:31:55.000000000 -0700
++++ gcc-4.3.2/gcc/tree-vect-transform.c	2008-09-21 01:51:01.000000000 -0700
+@@ -5489,15 +5489,21 @@
+ 	    STMT_VINFO_VEC_STMT (vinfo_for_stmt (next_stmt)) = new_stmt;
+ 	  else
+             {
+-	      tree prev_stmt = STMT_VINFO_VEC_STMT (vinfo_for_stmt (next_stmt));
+-	      tree rel_stmt = STMT_VINFO_RELATED_STMT (
+-						       vinfo_for_stmt (prev_stmt));
+-	      while (rel_stmt)
+-		{
+-		  prev_stmt = rel_stmt;
+-		  rel_stmt = STMT_VINFO_RELATED_STMT (vinfo_for_stmt (rel_stmt));
+-		}
+-	      STMT_VINFO_RELATED_STMT (vinfo_for_stmt (prev_stmt)) = new_stmt;
++              if (!DR_GROUP_SAME_DR_STMT (vinfo_for_stmt (next_stmt)))
++                {
++ 	          tree prev_stmt = 
++                    STMT_VINFO_VEC_STMT (vinfo_for_stmt (next_stmt));
++ 	          tree rel_stmt = STMT_VINFO_RELATED_STMT (
++					       vinfo_for_stmt (prev_stmt));
++ 	          while (rel_stmt)
++		    {
++		      prev_stmt = rel_stmt;
++		      rel_stmt = STMT_VINFO_RELATED_STMT (
++                                               vinfo_for_stmt (rel_stmt));
++		    }
++	          STMT_VINFO_RELATED_STMT (vinfo_for_stmt (prev_stmt)) = 
++                    new_stmt;
++                }
+             }
+ 	  next_stmt = DR_GROUP_NEXT_DR (vinfo_for_stmt (next_stmt));
+ 	  gap_count = 1;
+@@ -6529,6 +6535,7 @@
+ 
+       access_fn = analyze_scalar_evolution (loop, PHI_RESULT (phi)); 
+       gcc_assert (access_fn);
++      STRIP_NOPS (access_fn);
+       evolution_part =
+ 	 unshare_expr (evolution_part_in_loop_num (access_fn, loop->num));
+       gcc_assert (evolution_part != NULL_TREE);
+diff -Naur gcc-4.3.2.orig/gcc/tree.c gcc-4.3.2/gcc/tree.c
+--- gcc-4.3.2.orig/gcc/tree.c	2008-08-19 04:50:11.000000000 -0700
++++ gcc-4.3.2/gcc/tree.c	2008-11-10 04:08:55.000000000 -0800
+@@ -6296,6 +6296,21 @@
+      for "unknown if constant fits", 0 for "constant known *not* to fit" and 1
+      for "constant known to fit".  */
+ 
++  if (TREE_TYPE (c) == sizetype
++      && TYPE_UNSIGNED (TREE_TYPE (c))
++      && TREE_INT_CST_HIGH (c) == -1
++      && !TREE_OVERFLOW (c))
++      /* So c is an unsigned integer which type is sizetype.
++         sizetype'd integers are sign extended even though they are
++	 unsigned. If the integer value fits in the lower end word of c,
++	 and if the higher end word has all its bits set to 1, that
++	 means the higher end bits are set to 1 only for sign extension.
++	 So let's convert c into an equivalent zero extended unsigned
++	 integer.  */
++      c = force_fit_type_double (size_type_node,
++				 TREE_INT_CST_LOW (c),
++				 TREE_INT_CST_HIGH (c),
++				 false, false);
+   /* Check if C >= type_low_bound.  */
+   if (type_low_bound && TREE_CODE (type_low_bound) == INTEGER_CST)
+     {
+@@ -7370,7 +7385,16 @@
+   complex_long_double_type_node = build_complex_type (long_double_type_node);
+ 
+ /* Make fixed-point nodes based on sat/non-sat and signed/unsigned.  */
+-#define MAKE_FIXED_TYPE_NODE(KIND,WIDTH,SIZE) \
++#define MAKE_FIXED_TYPE_NODE(KIND,SIZE) \
++  sat_ ## KIND ## _type_node = \
++    make_sat_signed_ ## KIND ## _type (SIZE); \
++  sat_unsigned_ ## KIND ## _type_node = \
++    make_sat_unsigned_ ## KIND ## _type (SIZE); \
++  KIND ## _type_node = make_signed_ ## KIND ## _type (SIZE); \
++  unsigned_ ## KIND ## _type_node = \
++    make_unsigned_ ## KIND ## _type (SIZE);
++
++#define MAKE_FIXED_TYPE_NODE_WIDTH(KIND,WIDTH,SIZE) \
+   sat_ ## WIDTH ## KIND ## _type_node = \
+     make_sat_signed_ ## KIND ## _type (SIZE); \
+   sat_unsigned_ ## WIDTH ## KIND ## _type_node = \
+@@ -7381,10 +7405,10 @@
+ 
+ /* Make fixed-point type nodes based on four different widths.  */
+ #define MAKE_FIXED_TYPE_NODE_FAMILY(N1,N2) \
+-  MAKE_FIXED_TYPE_NODE (N1, short_, SHORT_ ## N2 ## _TYPE_SIZE) \
+-  MAKE_FIXED_TYPE_NODE (N1, , N2 ## _TYPE_SIZE) \
+-  MAKE_FIXED_TYPE_NODE (N1, long_, LONG_ ## N2 ## _TYPE_SIZE) \
+-  MAKE_FIXED_TYPE_NODE (N1, long_long_, LONG_LONG_ ## N2 ## _TYPE_SIZE)
++  MAKE_FIXED_TYPE_NODE_WIDTH (N1, short_, SHORT_ ## N2 ## _TYPE_SIZE) \
++  MAKE_FIXED_TYPE_NODE (N1, N2 ## _TYPE_SIZE) \
++  MAKE_FIXED_TYPE_NODE_WIDTH (N1, long_, LONG_ ## N2 ## _TYPE_SIZE) \
++  MAKE_FIXED_TYPE_NODE_WIDTH (N1, long_long_, LONG_LONG_ ## N2 ## _TYPE_SIZE)
+ 
+ /* Make fixed-point mode nodes based on sat/non-sat and signed/unsigned.  */
+ #define MAKE_FIXED_MODE_NODE(KIND,NAME,MODE) \
+diff -Naur gcc-4.3.2.orig/gcc/unwind-dw2.c gcc-4.3.2/gcc/unwind-dw2.c
+--- gcc-4.3.2.orig/gcc/unwind-dw2.c	2007-07-25 11:14:57.000000000 -0700
++++ gcc-4.3.2/gcc/unwind-dw2.c	2008-09-24 15:44:28.000000000 -0700
+@@ -494,6 +494,14 @@
+ 	  op_ptr += sizeof (void *);
+ 	  break;
+ 
++	case DW_OP_GNU_encoded_addr:
++	  {
++	    _Unwind_Ptr presult;
++	    op_ptr = read_encoded_value (context, *op_ptr, op_ptr+1, &presult);
++	    result = presult;
++	  }
++	  break;
++
+ 	case DW_OP_const1u:
+ 	  result = read_1u (op_ptr);
+ 	  op_ptr += 1;
+diff -Naur gcc-4.3.2.orig/gcc/varasm.c gcc-4.3.2/gcc/varasm.c
+--- gcc-4.3.2.orig/gcc/varasm.c	2007-12-05 13:55:10.000000000 -0800
++++ gcc-4.3.2/gcc/varasm.c	2008-09-04 22:35:03.000000000 -0700
+@@ -4021,6 +4021,78 @@
+ 	  && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (ctor)));
+ }
+ 
++/* A subroutine of initializer_constant_valid_p.  VALUE is either a
++   MINUS_EXPR or a POINTER_PLUS_EXPR, and ENDTYPE is a narrowing
++   conversion to something smaller than a pointer.  This returns
++   null_pointer_node if the resulting value is an absolute constant
++   which can be used to initialize a static variable.  Otherwise it
++   returns NULL.  */
++
++static tree
++narrowing_initializer_constant_valid_p (tree value, tree endtype)
++{
++  tree op0, op1;
++
++  if (!INTEGRAL_TYPE_P (endtype))
++    return NULL_TREE;
++
++  op0 = TREE_OPERAND (value, 0);
++  op1 = TREE_OPERAND (value, 1);
++
++  /* Like STRIP_NOPS except allow the operand mode to widen.  This
++     works around a feature of fold that simplifies (int)(p1 - p2) to
++     ((int)p1 - (int)p2) under the theory that the narrower operation
++     is cheaper.  */
++
++  while (TREE_CODE (op0) == NOP_EXPR
++	 || TREE_CODE (op0) == CONVERT_EXPR
++	 || TREE_CODE (op0) == NON_LVALUE_EXPR)
++    {
++      tree inner = TREE_OPERAND (op0, 0);
++      if (inner == error_mark_node
++	  || ! INTEGRAL_MODE_P (TYPE_MODE (TREE_TYPE (inner)))
++	  || (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (op0)))
++	      > GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (inner)))))
++	break;
++      op0 = inner;
++    }
++
++  while (TREE_CODE (op1) == NOP_EXPR
++	 || TREE_CODE (op1) == CONVERT_EXPR
++	 || TREE_CODE (op1) == NON_LVALUE_EXPR)
++    {
++      tree inner = TREE_OPERAND (op1, 0);
++      if (inner == error_mark_node
++	  || ! INTEGRAL_MODE_P (TYPE_MODE (TREE_TYPE (inner)))
++	  || (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (op1)))
++	      > GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (inner)))))
++	break;
++      op1 = inner;
++    }
++
++  op0 = initializer_constant_valid_p (op0, endtype);
++  op1 = initializer_constant_valid_p (op1, endtype);
++
++  /* Both initializers must be known.  */
++  if (op0 && op1)
++    {
++      if (op0 == op1)
++	return null_pointer_node;
++
++      /* Support differences between labels.  */
++      if (TREE_CODE (op0) == LABEL_DECL
++	  && TREE_CODE (op1) == LABEL_DECL)
++	return null_pointer_node;
++
++      if (TREE_CODE (op0) == STRING_CST
++	  && TREE_CODE (op1) == STRING_CST
++	  && operand_equal_p (op0, op1, 1))
++	return null_pointer_node;
++    }
++
++  return NULL_TREE;
++}
++
+ /* Return nonzero if VALUE is a valid constant-valued expression
+    for use in initializing a static variable; one that can be an
+    element of a "constant" initializer.
+@@ -4034,6 +4106,8 @@
+ tree
+ initializer_constant_valid_p (tree value, tree endtype)
+ {
++  tree ret;
++
+   switch (TREE_CODE (value))
+     {
+     case CONSTRUCTOR:
+@@ -4171,6 +4245,14 @@
+ 	  if (valid1 == null_pointer_node)
+ 	    return valid0;
+ 	}
++
++      /* Support narrowing pointer differences.  */
++      if (TREE_CODE (value) == POINTER_PLUS_EXPR)
++	{
++	  ret = narrowing_initializer_constant_valid_p (value, endtype);
++	  if (ret != NULL_TREE)
++	    return ret;
++	}
+       break;
+ 
+     case MINUS_EXPR:
+@@ -4199,64 +4281,10 @@
+ 	}
+ 
+       /* Support narrowing differences.  */
+-      if (INTEGRAL_TYPE_P (endtype))
+-	{
+-	  tree op0, op1;
+-
+-	  op0 = TREE_OPERAND (value, 0);
+-	  op1 = TREE_OPERAND (value, 1);
+-
+-	  /* Like STRIP_NOPS except allow the operand mode to widen.
+-	     This works around a feature of fold that simplifies
+-	     (int)(p1 - p2) to ((int)p1 - (int)p2) under the theory
+-	     that the narrower operation is cheaper.  */
+-
+-	  while (TREE_CODE (op0) == NOP_EXPR
+-		 || TREE_CODE (op0) == CONVERT_EXPR
+-		 || TREE_CODE (op0) == NON_LVALUE_EXPR)
+-	    {
+-	      tree inner = TREE_OPERAND (op0, 0);
+-	      if (inner == error_mark_node
+-	          || ! INTEGRAL_MODE_P (TYPE_MODE (TREE_TYPE (inner)))
+-		  || (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (op0)))
+-		      > GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (inner)))))
+-		break;
+-	      op0 = inner;
+-	    }
+-
+-	  while (TREE_CODE (op1) == NOP_EXPR
+-		 || TREE_CODE (op1) == CONVERT_EXPR
+-		 || TREE_CODE (op1) == NON_LVALUE_EXPR)
+-	    {
+-	      tree inner = TREE_OPERAND (op1, 0);
+-	      if (inner == error_mark_node
+-	          || ! INTEGRAL_MODE_P (TYPE_MODE (TREE_TYPE (inner)))
+-		  || (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (op1)))
+-		      > GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (inner)))))
+-		break;
+-	      op1 = inner;
+-	    }
++      ret = narrowing_initializer_constant_valid_p (value, endtype);
++      if (ret != NULL_TREE)
++	return ret;
+ 
+-	  op0 = initializer_constant_valid_p (op0, endtype);
+-	  op1 = initializer_constant_valid_p (op1, endtype);
+-
+-	  /* Both initializers must be known.  */
+-	  if (op0 && op1)
+-	    {
+-	      if (op0 == op1)
+-		return null_pointer_node;
+-
+-	      /* Support differences between labels.  */
+-	      if (TREE_CODE (op0) == LABEL_DECL
+-		  && TREE_CODE (op1) == LABEL_DECL)
+-		return null_pointer_node;
+-
+-	      if (TREE_CODE (op0) == STRING_CST
+-		  && TREE_CODE (op1) == STRING_CST
+-		  && operand_equal_p (op0, op1, 1))
+-		return null_pointer_node;
+-	    }
+-	}
+       break;
+ 
+     default:
+diff -Naur gcc-4.3.2.orig/gcc/vec.h gcc-4.3.2/gcc/vec.h
+--- gcc-4.3.2.orig/gcc/vec.h	2007-07-26 01:37:01.000000000 -0700
++++ gcc-4.3.2/gcc/vec.h	2008-11-10 04:08:55.000000000 -0800
+@@ -480,6 +480,12 @@
+   VEC(T,B) base;							  \
+ } VEC(T,A)
+ 
++#define VEC_TA(T,B,A)							  \
++typedef struct VEC(T,A)							  \
++{									  \
++  VEC(T,B) base;							  \
++} VEC(T,A)
++
+ /* Convert to base type.  */
+ #define VEC_BASE(P)  ((P) ? &(P)->base : 0)
+ 
+@@ -491,11 +497,11 @@
+ }									  \
+ 									  \
+ VEC_T(T,base);								  \
+-VEC_TA_GTY(T,base,none,);						  \
++VEC_TA(T,base,none);							  \
+ DEF_VEC_FUNC_P(T)							  \
+ struct vec_swallow_trailing_semi
+ #define DEF_VEC_ALLOC_I(T,A)						  \
+-VEC_TA_GTY(T,base,A,);							  \
++VEC_TA(T,base,A);							  \
+ DEF_VEC_ALLOC_FUNC_I(T,A)						  \
+ struct vec_swallow_trailing_semi
+ 
+@@ -507,11 +513,11 @@
+ }									  \
+ 									  \
+ VEC_T_GTY(T,base);							  \
+-VEC_TA_GTY(T,base,none,);						  \
++VEC_TA(T,base,none);							  \
+ DEF_VEC_FUNC_P(T)							  \
+ struct vec_swallow_trailing_semi
+ #define DEF_VEC_ALLOC_P(T,A)						  \
+-VEC_TA_GTY(T,base,A,);							  \
++VEC_TA(T,base,A);							  \
+ DEF_VEC_ALLOC_FUNC_P(T,A)						  \
+ struct vec_swallow_trailing_semi
+ 
+@@ -797,11 +803,11 @@
+ /* Vector of object.  */
+ #define DEF_VEC_O(T)							  \
+ VEC_T_GTY(T,base);							  \
+-VEC_TA_GTY(T,base,none,);						  \
++VEC_TA(T,base,none);						  \
+ DEF_VEC_FUNC_O(T)							  \
+ struct vec_swallow_trailing_semi
+ #define DEF_VEC_ALLOC_O(T,A)						  \
+-VEC_TA_GTY(T,base,A,);							  \
++VEC_TA(T,base,A);							  \
+ DEF_VEC_ALLOC_FUNC_O(T,A)						  \
+ struct vec_swallow_trailing_semi
+ 
+diff -Naur gcc-4.3.2.orig/libcpp/po/ChangeLog gcc-4.3.2/libcpp/po/ChangeLog
+--- gcc-4.3.2.orig/libcpp/po/ChangeLog	2008-08-27 11:04:01.000000000 -0700
++++ gcc-4.3.2/libcpp/po/ChangeLog	2008-11-13 13:22:20.000000000 -0800
+@@ -1,3 +1,7 @@
++2008-11-13  Joseph S. Myers  <joseph@codesourcery.com>
++
++	* id.po: New.
++
+ 2008-08-27  Release Manager
+ 
+ 	* GCC 4.3.2 released.
+diff -Naur gcc-4.3.2.orig/libdecnumber/ChangeLog gcc-4.3.2/libdecnumber/ChangeLog
+--- gcc-4.3.2.orig/libdecnumber/ChangeLog	2008-08-27 11:04:04.000000000 -0700
++++ gcc-4.3.2/libdecnumber/ChangeLog	2008-10-27 11:16:20.000000000 -0700
+@@ -1,3 +1,15 @@
++2008-10-27  Janis Johnson  <janis187@us.ibm.com>
++
++	PR other/37897
++	* decDouble.h (decDouble): Replace struct with union accessible
++	by more types.
++	* decSingle.h (decSingle): Ditto.
++	* decQuad.h (decQuad): Ditto.
++	* decNumberLocal.h (DFWORD, DFBYTE, DFWWORD): access decFloat via
++	new members.
++	* decBasic.c (decFloatCompareTotal): Avoid type-pun violation.
++	(decNumberCompare): Ditto.
++
+ 2008-08-27  Release Manager
+ 
+ 	* GCC 4.3.2 released.
+diff -Naur gcc-4.3.2.orig/libdecnumber/decBasic.c gcc-4.3.2/libdecnumber/decBasic.c
+--- gcc-4.3.2.orig/libdecnumber/decBasic.c	2007-09-10 13:44:08.000000000 -0700
++++ gcc-4.3.2/libdecnumber/decBasic.c	2008-10-27 11:16:20.000000000 -0700
+@@ -1660,8 +1660,10 @@
+       /* decode the coefficients */
+       /* (shift both right two if Quad to make a multiple of four) */
+       #if QUAD
+-	USHORTAT(bufl)=0;
+-	USHORTAT(bufr)=0;
++	ub = bufl;                           /* avoid type-pun violation */
++	USHORTAT(ub)=0;
++	uc = bufr;                           /* avoid type-pun violation */
++	USHORTAT(uc)=0;
+       #endif
+       GETCOEFF(dfl, bufl+QUAD*2);	     /* decode from decFloat */
+       GETCOEFF(dfr, bufr+QUAD*2);	     /* .. */
+@@ -3542,8 +3544,10 @@
+   /* decode the coefficients */
+   /* (shift both right two if Quad to make a multiple of four) */
+   #if QUAD
+-    UINTAT(bufl)=0;
+-    UINTAT(bufr)=0;
++    ub=bufl;                            /* avoid type-pun violation */
++    UINTAT(ub)=0;
++    uc=bufr;                            /* avoid type-pun violation */
++    UINTAT(uc)=0;
+   #endif
+   GETCOEFF(dfl, bufl+QUAD*2);		/* decode from decFloat */
+   GETCOEFF(dfr, bufr+QUAD*2);		/* .. */
+diff -Naur gcc-4.3.2.orig/libdecnumber/decDouble.h gcc-4.3.2/libdecnumber/decDouble.h
+--- gcc-4.3.2.orig/libdecnumber/decDouble.h	2007-09-10 13:44:08.000000000 -0700
++++ gcc-4.3.2/libdecnumber/decDouble.h	2008-10-27 11:16:20.000000000 -0700
+@@ -58,9 +58,11 @@
+   #include "decContext.h"
+   #include "decQuad.h"
+ 
+-  /* The decDouble decimal 64-bit type, accessible by bytes */
+-  typedef struct {
++  /* The decDouble decimal 64-bit type, accessible by various types */
++  typedef union {
+     uint8_t bytes[DECDOUBLE_Bytes]; /* fields: 1, 5, 8, 50 bits	  */
++    uint16_t shorts[DECDOUBLE_Bytes/2];
++    uint32_t words[DECDOUBLE_Bytes/4];
+     } decDouble;
+ 
+   /* ---------------------------------------------------------------- */
+diff -Naur gcc-4.3.2.orig/libdecnumber/decNumberLocal.h gcc-4.3.2/libdecnumber/decNumberLocal.h
+--- gcc-4.3.2.orig/libdecnumber/decNumberLocal.h	2008-06-17 02:32:34.000000000 -0700
++++ gcc-4.3.2/libdecnumber/decNumberLocal.h	2008-10-27 11:16:20.000000000 -0700
+@@ -308,13 +308,13 @@
+   #define DECWORDS  (DECBYTES/4)
+   #define DECWWORDS (DECWBYTES/4)
+   #if DECLITEND
+-    #define DFWORD(df, off) UINTAT((df)->bytes+(DECWORDS-1-(off))*4)
+-    #define DFBYTE(df, off) UBYTEAT((df)->bytes+(DECBYTES-1-(off)))
+-    #define DFWWORD(dfw, off) UINTAT((dfw)->bytes+(DECWWORDS-1-(off))*4)
++    #define DFWORD(df, off) ((df)->words[DECWORDS-1-(off)])
++    #define DFBYTE(df, off) ((df)->bytes[DECBYTES-1-(off)])
++    #define DFWWORD(dfw, off) ((dfw)->words[DECWWORDS-1-(off)])
+   #else
+-    #define DFWORD(df, off) UINTAT((df)->bytes+(off)*4)
+-    #define DFBYTE(df, off) UBYTEAT((df)->bytes+(off))
+-    #define DFWWORD(dfw, off) UINTAT((dfw)->bytes+(off)*4)
++    #define DFWORD(df, off) ((df)->words[off])
++    #define DFBYTE(df, off) ((df)->bytes[off])
++    #define DFWWORD(dfw, off) ((dfw)->words[off])
+   #endif
+ 
+   /* Tests for sign or specials, directly on DECFLOATs		      */
+diff -Naur gcc-4.3.2.orig/libdecnumber/decQuad.h gcc-4.3.2/libdecnumber/decQuad.h
+--- gcc-4.3.2.orig/libdecnumber/decQuad.h	2007-09-10 13:44:08.000000000 -0700
++++ gcc-4.3.2/libdecnumber/decQuad.h	2008-10-27 11:16:20.000000000 -0700
+@@ -59,9 +59,11 @@
+   /* Required include						      */
+   #include "decContext.h"
+ 
+-  /* The decQuad decimal 128-bit type, accessible by bytes */
+-  typedef struct {
++  /* The decQuad decimal 128-bit type, accessible by various types */
++  typedef union {
+     uint8_t bytes[DECQUAD_Bytes];  /* fields: 1, 5, 12, 110 bits */
++    uint16_t shorts[DECQUAD_Bytes/2];
++    uint32_t words[DECQUAD_Bytes/4];
+     } decQuad;
+ 
+   /* ---------------------------------------------------------------- */
+diff -Naur gcc-4.3.2.orig/libdecnumber/decSingle.h gcc-4.3.2/libdecnumber/decSingle.h
+--- gcc-4.3.2.orig/libdecnumber/decSingle.h	2007-09-10 13:44:08.000000000 -0700
++++ gcc-4.3.2/libdecnumber/decSingle.h	2008-10-27 11:16:20.000000000 -0700
+@@ -59,9 +59,11 @@
+   #include "decQuad.h"
+   #include "decDouble.h"
+ 
+-  /* The decSingle decimal 32-bit type, accessible by bytes */
+-  typedef struct {
++  /* The decSingle decimal 32-bit type, accessible by various types */
++  typedef union {
+     uint8_t bytes[DECSINGLE_Bytes];	/* fields: 1, 5, 6, 20 bits */
++    uint16_t shorts[DECSINGLE_Bytes/2];
++    uint32_t words[DECSINGLE_Bytes/4];
+     } decSingle;
+ 
+   /* ---------------------------------------------------------------- */
+diff -Naur gcc-4.3.2.orig/libffi/ChangeLog gcc-4.3.2/libffi/ChangeLog
+--- gcc-4.3.2.orig/libffi/ChangeLog	2008-08-27 11:01:05.000000000 -0700
++++ gcc-4.3.2/libffi/ChangeLog	2008-11-21 14:13:13.000000000 -0800
+@@ -1,3 +1,23 @@
++2008-11-21  Eric Botcazou  <ebotcazou@adacore.com>
++
++	* src/sparc/ffi.c (ffi_prep_cif_machdep): Add support for
++	signed/unsigned int8/16 return values.
++	* src/sparc/v8.S (ffi_call_v8): Likewise.
++	(ffi_closure_v8): Likewise.
++
++2008-09-10  Andreas Tobler  <a.tobler@schweiz.org>
++
++	* src/powerpc/ffitarget.h (ffi_abi): Add FFI_LINUX and
++	FFI_LINUX_SOFT_FLOAT to the POWERPC_FREEBSD enum.
++	Add note about flag bits used for FFI_SYSV_TYPE_SMALL_STRUCT.
++	Adjust copyright notice.
++	* src/powerpc/ffi.c: Add two new flags to indicate if we have one
++	register or two register to use for FFI_SYSV structs.
++	(ffi_prep_cif_machdep): Pass the right register flag introduced above.
++	(ffi_closure_helper_SYSV): Fix the return type for
++	FFI_SYSV_TYPE_SMALL_STRUCT. Comment.
++	Adjust copyright notice.
++
+ 2008-08-27  Release Manager
+ 
+ 	* GCC 4.3.2 released.
+diff -Naur gcc-4.3.2.orig/libffi/src/powerpc/ffi.c gcc-4.3.2/libffi/src/powerpc/ffi.c
+--- gcc-4.3.2.orig/libffi/src/powerpc/ffi.c	2007-12-01 13:00:04.000000000 -0800
++++ gcc-4.3.2/libffi/src/powerpc/ffi.c	2008-09-10 12:41:42.000000000 -0700
+@@ -1,6 +1,6 @@
+ /* -----------------------------------------------------------------------
+    ffi.c - Copyright (c) 1998 Geoffrey Keating
+-   Copyright (C) 2007 Free Software Foundation, Inc
++   Copyright (C) 2007, 2008 Free Software Foundation, Inc
+ 
+    PowerPC Foreign Function Interface
+ 
+@@ -43,6 +43,10 @@
+ 
+   FLAG_RETURNS_128BITS  = 1 << (31-27), /* cr6  */
+ 
++  FLAG_SYSV_SMST_R4     = 1 << (31-16), /* cr4, use r4 for FFI_SYSV 8 byte
++					   structs.  */
++  FLAG_SYSV_SMST_R3     = 1 << (31-15), /* cr3, use r3 for FFI_SYSV 4 byte
++					   structs.  */
+   FLAG_ARG_NEEDS_COPY   = 1 << (31- 7),
+   FLAG_FP_ARGUMENTS     = 1 << (31- 6), /* cr1.eq; specified by ABI */
+   FLAG_4_GPR_ARGUMENTS  = 1 << (31- 5),
+@@ -679,14 +683,14 @@
+ 		 The same applies for the structs returned in r3/r4.  */
+ 	      if (size <= 4)
+ 		{
+-		  flags |= 1 << (31 - FFI_SYSV_TYPE_SMALL_STRUCT - 1);
++		  flags |= FLAG_SYSV_SMST_R3;
+ 		  flags |= 8 * (4 - size) << 4;
+ 		  break;
+ 		}
+ 	      /* These structs are returned in r3 and r4. See above.   */
+ 	      if  (size <= 8)
+ 		{
+-		  flags |= 1 << (31 - FFI_SYSV_TYPE_SMALL_STRUCT - 2);
++		  flags |= FLAG_SYSV_SMST_R4;
+ 		  flags |= 8 * (8 - size) << 4;
+ 		  break;
+ 		}
+@@ -1248,10 +1252,15 @@
+ 
+   /* Tell ffi_closure_SYSV how to perform return type promotions.
+      Because the FFI_SYSV ABI returns the structures <= 8 bytes in r3/r4
+-     we have to tell ffi_closure_SYSV how to treat them.  */
++     we have to tell ffi_closure_SYSV how to treat them. We combine the base
++     type FFI_SYSV_TYPE_SMALL_STRUCT - 1  with the size of the struct.
++     So a one byte struct gets the return type 16. Return type 1 to 15 are
++     already used and we never have a struct with size zero. That is the reason
++     for the subtraction of 1. See the comment in ffitarget.h about ordering.
++  */
+   if (cif->abi == FFI_SYSV && cif->rtype->type == FFI_TYPE_STRUCT
+       && size <= 8)
+-    return FFI_SYSV_TYPE_SMALL_STRUCT + size;
++    return (FFI_SYSV_TYPE_SMALL_STRUCT - 1) + size;
+ #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
+   else if (cif->rtype->type == FFI_TYPE_LONGDOUBLE
+ 	   && cif->abi != FFI_LINUX && cif->abi != FFI_LINUX_SOFT_FLOAT)
+diff -Naur gcc-4.3.2.orig/libffi/src/powerpc/ffitarget.h gcc-4.3.2/libffi/src/powerpc/ffitarget.h
+--- gcc-4.3.2.orig/libffi/src/powerpc/ffitarget.h	2007-12-01 13:00:04.000000000 -0800
++++ gcc-4.3.2/libffi/src/powerpc/ffitarget.h	2008-09-10 12:41:42.000000000 -0700
+@@ -1,6 +1,6 @@
+ /* -----------------------------------------------------------------*-C-*-
+    ffitarget.h - Copyright (c) 1996-2003  Red Hat, Inc.
+-   Copyright (C) 2007 Free Software Foundation, Inc
++   Copyright (C) 2007, 2008 Free Software Foundation, Inc
+    Target configuration macros for PowerPC.
+ 
+    Permission is hereby granted, free of charge, to any person obtaining
+@@ -77,6 +77,8 @@
+   FFI_SYSV,
+   FFI_GCC_SYSV,
+   FFI_LINUX64,
++  FFI_LINUX,
++  FFI_LINUX_SOFT_FLOAT,
+   FFI_DEFAULT_ABI = FFI_SYSV,
+ #endif
+ 
+@@ -95,7 +97,9 @@
+ /* Needed for soft-float long-double-128 support.  */
+ #define FFI_TYPE_UINT128 (FFI_TYPE_LAST + 1)
+ 
+-/* Needed for FFI_SYSV small structure returns.  */
++/* Needed for FFI_SYSV small structure returns.
++   We use two flag bits, (FLAG_SYSV_SMST_R3, FLAG_SYSV_SMST_R4) which are
++   defined in ffi.c, to determine the exact return type and its size.  */
+ #define FFI_SYSV_TYPE_SMALL_STRUCT (FFI_TYPE_LAST + 2)
+ 
+ #if defined(POWERPC64) || defined(POWERPC_AIX)
+diff -Naur gcc-4.3.2.orig/libffi/src/sparc/ffi.c gcc-4.3.2/libffi/src/sparc/ffi.c
+--- gcc-4.3.2.orig/libffi/src/sparc/ffi.c	2007-03-06 23:27:25.000000000 -0800
++++ gcc-4.3.2/libffi/src/sparc/ffi.c	2008-11-21 14:13:13.000000000 -0800
+@@ -307,14 +307,24 @@
+ 	cif->flags = FFI_TYPE_STRUCT;
+       break;
+ 
++    case FFI_TYPE_SINT8:
++    case FFI_TYPE_UINT8:
++    case FFI_TYPE_SINT16:
++    case FFI_TYPE_UINT16:
++      if (cif->abi == FFI_V9)
++	cif->flags = FFI_TYPE_INT;
++      else
++	cif->flags = cif->rtype->type;
++      break;
++
+     case FFI_TYPE_SINT64:
+     case FFI_TYPE_UINT64:
+-      if (cif->abi != FFI_V9)
+-	{
+-	  cif->flags = FFI_TYPE_SINT64;
+-	  break;
+-	}
+-      /* FALLTHROUGH */
++      if (cif->abi == FFI_V9)
++	cif->flags = FFI_TYPE_INT;
++      else
++	cif->flags = FFI_TYPE_SINT64;
++      break;
++
+     default:
+       cif->flags = FFI_TYPE_INT;
+       break;
+diff -Naur gcc-4.3.2.orig/libffi/src/sparc/v8.S gcc-4.3.2/libffi/src/sparc/v8.S
+--- gcc-4.3.2.orig/libffi/src/sparc/v8.S	2004-11-22 10:35:16.000000000 -0800
++++ gcc-4.3.2/libffi/src/sparc/v8.S	2008-11-21 14:13:13.000000000 -0800
+@@ -72,21 +72,63 @@
+ 	be,a	done
+ 	st	%f0, [%i4+0]	! (delay)
+ 
++	cmp	%i3, FFI_TYPE_DOUBLE
++	be,a	double
++	st	%f0, [%i4+0]	! (delay)
++
++	cmp	%i3, FFI_TYPE_SINT8
++	be,a	sint8
++	sll	%o0, 24, %o0	! (delay)
++
++	cmp	%i3, FFI_TYPE_UINT8
++	be,a	uint8
++	sll	%o0, 24, %o0	! (delay)
++
++	cmp	%i3, FFI_TYPE_SINT16
++	be,a	sint16
++	sll	%o0, 16, %o0	! (delay)
++
++	cmp	%i3, FFI_TYPE_UINT16
++	be,a	uint16
++	sll	%o0, 16, %o0	! (delay)
++
+ 	cmp	%i3, FFI_TYPE_SINT64
+-	be	longlong
++	be,a	longlong
++	st	%o0, [%i4+0]	! (delay)
++done:
++	ret
++	restore
+ 
+-	cmp	%i3, FFI_TYPE_DOUBLE
+-	bne	done
+-	nop
+-	st	%f0, [%i4+0]
++double:
+ 	st	%f1, [%i4+4]
+-	
+-done:
+ 	ret
+ 	restore
+ 
+-longlong:
++sint8:
++	sra	%o0, 24, %o0
+ 	st	%o0, [%i4+0]
++	ret
++	restore
++
++uint8:
++	srl	%o0, 24, %o0
++	st	%o0, [%i4+0]
++	ret
++	restore
++
++sint16:
++	sra	%o0, 16, %o0
++	st	%o0, [%i4+0]
++	ret
++	restore
++
++uint16:
++	srl	%o0, 16, %o0
++	st	%o0, [%i4+0]
++	ret
++	restore
++
++longlong:
+ 	st	%o1, [%i4+4]
+ 	ret
+ 	restore
+@@ -147,7 +189,8 @@
+ 	be	done1
+ 
+ 	cmp	%o0, FFI_TYPE_INT
+-	be	integer
++	be	done1
++	 ld	[%fp-8], %i0
+ 
+ 	cmp	%o0, FFI_TYPE_FLOAT
+ 	be,a	done1
+@@ -165,13 +208,11 @@
+ 	cmp	%o0, FFI_TYPE_STRUCT
+ 	be	done2
+ 
+-	! FFI_TYPE_SINT64
+-	! FFI_TYPE_UINT64
+-	ld	[%fp-4], %i1
++	cmp	%o0, FFI_TYPE_SINT64
++	be,a	done1
++	 ldd	[%fp-8], %i0
+ 
+-integer:
+ 	ld	[%fp-8], %i0
+-
+ done1:
+ 	jmp	%i7+8
+ 	 restore
+diff -Naur gcc-4.3.2.orig/libgcc/ChangeLog gcc-4.3.2/libgcc/ChangeLog
+--- gcc-4.3.2.orig/libgcc/ChangeLog	2008-08-27 11:01:41.000000000 -0700
++++ gcc-4.3.2/libgcc/ChangeLog	2008-11-20 09:09:53.000000000 -0800
+@@ -1,3 +1,15 @@
++2008-11-20  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
++
++	PR bootstrap/33100
++	* configure.ac (i?86-*-solaris2.1[0-9]*): Only include
++	i386/t-crtstuff if linker supports ZERO terminator unwind entries.
++	* configure: Regenerate.
++	* config.host (i[34567]86-*-solaris2*): Move i386/t-sol2 in
++	tmake_file here from gcc/config.gcc.
++	Move extra_parts here from gcc/config.gcc.
++	* config/i386/t-sol2: Move here from gcc/config/i386.
++	Use gcc_srcdir instead of srcdir.
++	
+ 2008-08-27  Release Manager
+ 
+ 	* GCC 4.3.2 released.
+diff -Naur gcc-4.3.2.orig/libgcc/config/i386/t-sol2 gcc-4.3.2/libgcc/config/i386/t-sol2
+--- gcc-4.3.2.orig/libgcc/config/i386/t-sol2	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/libgcc/config/i386/t-sol2	2008-11-20 09:09:53.000000000 -0800
+@@ -0,0 +1,34 @@
++# gmon build rule:
++$(T)gmon.o:	$(gcc_srcdir)/config/i386/gmon-sol2.c $(GCC_PASSES) $(CONFIG_H)
++	$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) \
++		-c $(gcc_srcdir)/config/i386/gmon-sol2.c -o $(T)gmon.o
++
++# Assemble startup files.
++# Apparently Sun believes that assembler files don't need comments, because no
++# single ASCII character is valid (tried them all).  So we manually strip out
++# the comments with sed.  This bug may only be in the Early Access releases.
++$(T)gcrt1.o: $(gcc_srcdir)/config/i386/sol2-gc1.asm $(GCC_PASSES)
++	sed -e '/^!/d' <$(gcc_srcdir)/config/i386/sol2-gc1.asm >gcrt1.s
++	$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)gcrt1.o gcrt1.s
++$(T)crt1.o: $(gcc_srcdir)/config/i386/sol2-c1.asm $(GCC_PASSES)
++	sed -e '/^!/d' <$(gcc_srcdir)/config/i386/sol2-c1.asm >crt1.s
++	$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)crt1.o crt1.s
++$(T)crti.o: $(gcc_srcdir)/config/i386/sol2-ci.asm $(GCC_PASSES)
++	sed -e '/^!/d' <$(gcc_srcdir)/config/i386/sol2-ci.asm >crti.s
++	$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)crti.o crti.s
++$(T)crtn.o: $(gcc_srcdir)/config/i386/sol2-cn.asm $(GCC_PASSES)
++	sed -e '/^!/d' <$(gcc_srcdir)/config/i386/sol2-cn.asm >crtn.s
++	$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)crtn.o crtn.s
++
++# We need to use -fPIC when we are using gcc to compile the routines in
++# crtstuff.c.  This is only really needed when we are going to use gcc/g++
++# to produce a shared library, but since we don't know ahead of time when
++# we will be doing that, we just always use -fPIC when compiling the
++# routines in crtstuff.c.
++#
++# We must also enable optimization to avoid having any code appear after
++# the call & alignment statement, but before we switch back to the
++# .text section.
++
++CRTSTUFF_T_CFLAGS = -fPIC -O2
++TARGET_LIBGCC2_CFLAGS = -fPIC
+diff -Naur gcc-4.3.2.orig/libgcc/config.host gcc-4.3.2/libgcc/config.host
+--- gcc-4.3.2.orig/libgcc/config.host	2008-01-25 12:49:04.000000000 -0800
++++ gcc-4.3.2/libgcc/config.host	2008-11-20 09:09:53.000000000 -0800
+@@ -353,6 +353,17 @@
+ i[34567]86-*-sco3.2v5*)	# 80386 running SCO Open Server 5
+ 	;;
+ i[34567]86-*-solaris2*)
++	tmake_file="${tmake_file} i386/t-sol2"
++	case ${host} in
++	*-*-solaris2.1[0-9]*)
++		# Solaris 2.10 provides crt1.o, crti.o, crtn.o, and gcrt1.o as
++		# part of the base system.
++		extra_parts="gmon.o crtbegin.o crtend.o"
++		;;
++	*)
++		extra_parts="crt1.o crti.o crtn.o gcrt1.o gmon.o crtbegin.o crtend.o"
++		;;
++	esac
+ 	;;
+ i[34567]86-*-sysv5*)           # Intel x86 on System V Release 5
+        ;;
+diff -Naur gcc-4.3.2.orig/libgcc/configure gcc-4.3.2/libgcc/configure
+--- gcc-4.3.2.orig/libgcc/configure	2007-10-27 16:22:57.000000000 -0700
++++ gcc-4.3.2/libgcc/configure	2008-11-20 09:09:53.000000000 -0800
+@@ -3378,6 +3378,31 @@
+ # Collect host-machine-specific information.
+ . ${srcdir}/config.host
+ 
++# Check if Solaris/x86 linker supports ZERO terminator unwind entries.
++# This is after config.host so we can augment tmake_file.
++# Link with -nostartfiles -nodefaultlibs since neither are present while
++# building libgcc.
++case ${host} in
++i?86-*-solaris2.1[0-9]*)
++  cat > conftest.s <<EOF
++	.section	.eh_frame,"a",@unwind
++	.zero	4
++	.section	.jcr,"aw",@progbits
++	.zero	8
++EOF
++  if { ac_try='${CC-cc} -shared -nostartfiles -nodefaultlibs -o conftest.so conftest.s 1>&5'
++  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; }; then
++      # configure expects config files in libgcc/config, so need a relative
++      # path here.
++      tmake_file="${tmake_file} ../../gcc/config/i386/t-crtstuff"
++  fi
++  ;;
++esac
++
+ # Check for visibility support.  This is after config.host so that
+ # we can check for asm_hidden_op.
+ echo "$as_me:$LINENO: checking for __attribute__((visibility(\"hidden\")))" >&5
+diff -Naur gcc-4.3.2.orig/libgcc/configure.ac gcc-4.3.2/libgcc/configure.ac
+--- gcc-4.3.2.orig/libgcc/configure.ac	2007-10-27 16:22:57.000000000 -0700
++++ gcc-4.3.2/libgcc/configure.ac	2008-11-20 09:09:53.000000000 -0800
+@@ -155,6 +155,26 @@
+ # Collect host-machine-specific information.
+ . ${srcdir}/config.host
+ 
++# Check if Solaris/x86 linker supports ZERO terminator unwind entries.
++# This is after config.host so we can augment tmake_file.
++# Link with -nostartfiles -nodefaultlibs since neither are present while
++# building libgcc.
++case ${host} in
++i?86-*-solaris2.1[[0-9]]*)
++  cat > conftest.s <<EOF
++	.section	.eh_frame,"a",@unwind
++	.zero	4
++	.section	.jcr,"aw",@progbits
++	.zero	8
++EOF
++  if AC_TRY_COMMAND(${CC-cc} -shared -nostartfiles -nodefaultlibs -o conftest.so conftest.s 1>&AS_MESSAGE_LOG_FD); then
++      # configure expects config files in libgcc/config, so need a relative
++      # path here.
++      tmake_file="${tmake_file} ../../gcc/config/i386/t-crtstuff"
++  fi
++  ;;
++esac
++
+ # Check for visibility support.  This is after config.host so that
+ # we can check for asm_hidden_op.
+ AC_CACHE_CHECK([for __attribute__((visibility("hidden")))],
+diff -Naur gcc-4.3.2.orig/libgfortran/ChangeLog gcc-4.3.2/libgfortran/ChangeLog
+--- gcc-4.3.2.orig/libgfortran/ChangeLog	2008-08-27 11:03:44.000000000 -0700
++++ gcc-4.3.2/libgfortran/ChangeLog	2008-11-23 07:08:32.000000000 -0800
+@@ -1,3 +1,45 @@
++2008-11-23  Thomas Koenig  <tkoenig@gcc.gnu.org>
++
++	PR libfortran/38135
++	Backport from trunk.
++	* m4/reshape.m4:  Tread PAD as if it were SOURCE when SOURCE
++	is empty.
++	* intrinsics/reshape_generic.c:  Likewise.
++	* generated/reshape_c10.c Regenerated.
++	* generated/reshape_c16.c Regenerated.
++	* generated/reshape_c4.c Regenerated.
++	* generated/reshape_c8.c Regenerated.
++	* generated/reshape_i16.c Regenerated.
++	* generated/reshape_i4.c Regenerated.
++	* generated/reshape_i8.c Regenerated.
++	* generated/reshape_r10.c Regenerated.
++	* generated/reshape_r16.c Regenerated.
++	* generated/reshape_r4.c Regenerated.
++	* generated/reshape_r8.c Regenerated.
++
++2008-10-28  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
++
++	PR libfortran/37707
++	Backport from trunk.
++	* io/list_read.c (read_character): Remove code to look ahead in namelist
++	reads to descriminate non-delimited strings from namelist objects.
++	* io/write.c (namelist_write): Delimit character strings with quote or
++	apostrophe, defaulting to quote.
++
++2008-10-19  Jerry DeLisle  <jvdelisle@gcc.gnu.org
++
++	PR libfortran/37863
++	Backport from trunk.
++	* io/write_float.def (WRITE_FLOAT): Round to 1.0 correctly.
++
++2008-10-19  Jerry DeLisle  <jvdelisle@gcc.gnu.org
++
++	PR libfortran/37707
++	Backport from trunk.
++	* io/list_read.c (nml_get_obj_data): If the first namelist object rank
++	is greater than zero, call nml_object_read with the first object rather
++	than the sub-object.
++
+ 2008-08-27  Release Manager
+ 
+ 	* GCC 4.3.2 released.
+diff -Naur gcc-4.3.2.orig/libgfortran/generated/reshape_c10.c gcc-4.3.2/libgfortran/generated/reshape_c10.c
+--- gcc-4.3.2.orig/libgfortran/generated/reshape_c10.c	2007-08-31 07:01:34.000000000 -0700
++++ gcc-4.3.2/libgfortran/generated/reshape_c10.c	2008-11-23 07:08:32.000000000 -0800
+@@ -197,16 +197,16 @@
+ 
+   if (sempty)
+     {
+-      /* Switch immediately to the pad array.  */
++      /* Pretend we are using the pad array the first time around, too.  */
+       src = pptr;
+-      sptr = NULL;
++      sptr = pptr;
+       sdim = pdim;
+       for (dim = 0; dim < pdim; dim++)
+ 	{
+ 	  scount[dim] = pcount[dim];
+ 	  sextent[dim] = pextent[dim];
+ 	  sstride[dim] = pstride[dim];
+-	  sstride0 = sstride[0] * sizeof (GFC_COMPLEX_10);
++	  sstride0 = pstride[0];
+ 	}
+     }
+ 
+diff -Naur gcc-4.3.2.orig/libgfortran/generated/reshape_c16.c gcc-4.3.2/libgfortran/generated/reshape_c16.c
+--- gcc-4.3.2.orig/libgfortran/generated/reshape_c16.c	2007-08-31 07:01:34.000000000 -0700
++++ gcc-4.3.2/libgfortran/generated/reshape_c16.c	2008-11-23 07:08:32.000000000 -0800
+@@ -197,16 +197,16 @@
+ 
+   if (sempty)
+     {
+-      /* Switch immediately to the pad array.  */
++      /* Pretend we are using the pad array the first time around, too.  */
+       src = pptr;
+-      sptr = NULL;
++      sptr = pptr;
+       sdim = pdim;
+       for (dim = 0; dim < pdim; dim++)
+ 	{
+ 	  scount[dim] = pcount[dim];
+ 	  sextent[dim] = pextent[dim];
+ 	  sstride[dim] = pstride[dim];
+-	  sstride0 = sstride[0] * sizeof (GFC_COMPLEX_16);
++	  sstride0 = pstride[0];
+ 	}
+     }
+ 
+diff -Naur gcc-4.3.2.orig/libgfortran/generated/reshape_c4.c gcc-4.3.2/libgfortran/generated/reshape_c4.c
+--- gcc-4.3.2.orig/libgfortran/generated/reshape_c4.c	2007-08-31 07:01:34.000000000 -0700
++++ gcc-4.3.2/libgfortran/generated/reshape_c4.c	2008-11-23 07:08:32.000000000 -0800
+@@ -197,16 +197,16 @@
+ 
+   if (sempty)
+     {
+-      /* Switch immediately to the pad array.  */
++      /* Pretend we are using the pad array the first time around, too.  */
+       src = pptr;
+-      sptr = NULL;
++      sptr = pptr;
+       sdim = pdim;
+       for (dim = 0; dim < pdim; dim++)
+ 	{
+ 	  scount[dim] = pcount[dim];
+ 	  sextent[dim] = pextent[dim];
+ 	  sstride[dim] = pstride[dim];
+-	  sstride0 = sstride[0] * sizeof (GFC_COMPLEX_4);
++	  sstride0 = pstride[0];
+ 	}
+     }
+ 
+diff -Naur gcc-4.3.2.orig/libgfortran/generated/reshape_c8.c gcc-4.3.2/libgfortran/generated/reshape_c8.c
+--- gcc-4.3.2.orig/libgfortran/generated/reshape_c8.c	2007-08-31 07:01:34.000000000 -0700
++++ gcc-4.3.2/libgfortran/generated/reshape_c8.c	2008-11-23 07:08:32.000000000 -0800
+@@ -197,16 +197,16 @@
+ 
+   if (sempty)
+     {
+-      /* Switch immediately to the pad array.  */
++      /* Pretend we are using the pad array the first time around, too.  */
+       src = pptr;
+-      sptr = NULL;
++      sptr = pptr;
+       sdim = pdim;
+       for (dim = 0; dim < pdim; dim++)
+ 	{
+ 	  scount[dim] = pcount[dim];
+ 	  sextent[dim] = pextent[dim];
+ 	  sstride[dim] = pstride[dim];
+-	  sstride0 = sstride[0] * sizeof (GFC_COMPLEX_8);
++	  sstride0 = pstride[0];
+ 	}
+     }
+ 
+diff -Naur gcc-4.3.2.orig/libgfortran/generated/reshape_i16.c gcc-4.3.2/libgfortran/generated/reshape_i16.c
+--- gcc-4.3.2.orig/libgfortran/generated/reshape_i16.c	2007-08-31 07:01:34.000000000 -0700
++++ gcc-4.3.2/libgfortran/generated/reshape_i16.c	2008-11-23 07:08:32.000000000 -0800
+@@ -197,16 +197,16 @@
+ 
+   if (sempty)
+     {
+-      /* Switch immediately to the pad array.  */
++      /* Pretend we are using the pad array the first time around, too.  */
+       src = pptr;
+-      sptr = NULL;
++      sptr = pptr;
+       sdim = pdim;
+       for (dim = 0; dim < pdim; dim++)
+ 	{
+ 	  scount[dim] = pcount[dim];
+ 	  sextent[dim] = pextent[dim];
+ 	  sstride[dim] = pstride[dim];
+-	  sstride0 = sstride[0] * sizeof (GFC_INTEGER_16);
++	  sstride0 = pstride[0];
+ 	}
+     }
+ 
+diff -Naur gcc-4.3.2.orig/libgfortran/generated/reshape_i4.c gcc-4.3.2/libgfortran/generated/reshape_i4.c
+--- gcc-4.3.2.orig/libgfortran/generated/reshape_i4.c	2007-08-31 07:01:34.000000000 -0700
++++ gcc-4.3.2/libgfortran/generated/reshape_i4.c	2008-11-23 07:08:32.000000000 -0800
+@@ -197,16 +197,16 @@
+ 
+   if (sempty)
+     {
+-      /* Switch immediately to the pad array.  */
++      /* Pretend we are using the pad array the first time around, too.  */
+       src = pptr;
+-      sptr = NULL;
++      sptr = pptr;
+       sdim = pdim;
+       for (dim = 0; dim < pdim; dim++)
+ 	{
+ 	  scount[dim] = pcount[dim];
+ 	  sextent[dim] = pextent[dim];
+ 	  sstride[dim] = pstride[dim];
+-	  sstride0 = sstride[0] * sizeof (GFC_INTEGER_4);
++	  sstride0 = pstride[0];
+ 	}
+     }
+ 
+diff -Naur gcc-4.3.2.orig/libgfortran/generated/reshape_i8.c gcc-4.3.2/libgfortran/generated/reshape_i8.c
+--- gcc-4.3.2.orig/libgfortran/generated/reshape_i8.c	2007-08-31 07:01:34.000000000 -0700
++++ gcc-4.3.2/libgfortran/generated/reshape_i8.c	2008-11-23 07:08:32.000000000 -0800
+@@ -197,16 +197,16 @@
+ 
+   if (sempty)
+     {
+-      /* Switch immediately to the pad array.  */
++      /* Pretend we are using the pad array the first time around, too.  */
+       src = pptr;
+-      sptr = NULL;
++      sptr = pptr;
+       sdim = pdim;
+       for (dim = 0; dim < pdim; dim++)
+ 	{
+ 	  scount[dim] = pcount[dim];
+ 	  sextent[dim] = pextent[dim];
+ 	  sstride[dim] = pstride[dim];
+-	  sstride0 = sstride[0] * sizeof (GFC_INTEGER_8);
++	  sstride0 = pstride[0];
+ 	}
+     }
+ 
+diff -Naur gcc-4.3.2.orig/libgfortran/generated/reshape_r10.c gcc-4.3.2/libgfortran/generated/reshape_r10.c
+--- gcc-4.3.2.orig/libgfortran/generated/reshape_r10.c	2007-08-31 07:01:34.000000000 -0700
++++ gcc-4.3.2/libgfortran/generated/reshape_r10.c	2008-11-23 07:08:32.000000000 -0800
+@@ -197,16 +197,16 @@
+ 
+   if (sempty)
+     {
+-      /* Switch immediately to the pad array.  */
++      /* Pretend we are using the pad array the first time around, too.  */
+       src = pptr;
+-      sptr = NULL;
++      sptr = pptr;
+       sdim = pdim;
+       for (dim = 0; dim < pdim; dim++)
+ 	{
+ 	  scount[dim] = pcount[dim];
+ 	  sextent[dim] = pextent[dim];
+ 	  sstride[dim] = pstride[dim];
+-	  sstride0 = sstride[0] * sizeof (GFC_REAL_10);
++	  sstride0 = pstride[0];
+ 	}
+     }
+ 
+diff -Naur gcc-4.3.2.orig/libgfortran/generated/reshape_r16.c gcc-4.3.2/libgfortran/generated/reshape_r16.c
+--- gcc-4.3.2.orig/libgfortran/generated/reshape_r16.c	2007-08-31 07:01:34.000000000 -0700
++++ gcc-4.3.2/libgfortran/generated/reshape_r16.c	2008-11-23 07:08:32.000000000 -0800
+@@ -197,16 +197,16 @@
+ 
+   if (sempty)
+     {
+-      /* Switch immediately to the pad array.  */
++      /* Pretend we are using the pad array the first time around, too.  */
+       src = pptr;
+-      sptr = NULL;
++      sptr = pptr;
+       sdim = pdim;
+       for (dim = 0; dim < pdim; dim++)
+ 	{
+ 	  scount[dim] = pcount[dim];
+ 	  sextent[dim] = pextent[dim];
+ 	  sstride[dim] = pstride[dim];
+-	  sstride0 = sstride[0] * sizeof (GFC_REAL_16);
++	  sstride0 = pstride[0];
+ 	}
+     }
+ 
+diff -Naur gcc-4.3.2.orig/libgfortran/generated/reshape_r4.c gcc-4.3.2/libgfortran/generated/reshape_r4.c
+--- gcc-4.3.2.orig/libgfortran/generated/reshape_r4.c	2007-08-31 07:01:34.000000000 -0700
++++ gcc-4.3.2/libgfortran/generated/reshape_r4.c	2008-11-23 07:08:32.000000000 -0800
+@@ -197,16 +197,16 @@
+ 
+   if (sempty)
+     {
+-      /* Switch immediately to the pad array.  */
++      /* Pretend we are using the pad array the first time around, too.  */
+       src = pptr;
+-      sptr = NULL;
++      sptr = pptr;
+       sdim = pdim;
+       for (dim = 0; dim < pdim; dim++)
+ 	{
+ 	  scount[dim] = pcount[dim];
+ 	  sextent[dim] = pextent[dim];
+ 	  sstride[dim] = pstride[dim];
+-	  sstride0 = sstride[0] * sizeof (GFC_REAL_4);
++	  sstride0 = pstride[0];
+ 	}
+     }
+ 
+diff -Naur gcc-4.3.2.orig/libgfortran/generated/reshape_r8.c gcc-4.3.2/libgfortran/generated/reshape_r8.c
+--- gcc-4.3.2.orig/libgfortran/generated/reshape_r8.c	2007-08-31 07:01:34.000000000 -0700
++++ gcc-4.3.2/libgfortran/generated/reshape_r8.c	2008-11-23 07:08:32.000000000 -0800
+@@ -197,16 +197,16 @@
+ 
+   if (sempty)
+     {
+-      /* Switch immediately to the pad array.  */
++      /* Pretend we are using the pad array the first time around, too.  */
+       src = pptr;
+-      sptr = NULL;
++      sptr = pptr;
+       sdim = pdim;
+       for (dim = 0; dim < pdim; dim++)
+ 	{
+ 	  scount[dim] = pcount[dim];
+ 	  sextent[dim] = pextent[dim];
+ 	  sstride[dim] = pstride[dim];
+-	  sstride0 = sstride[0] * sizeof (GFC_REAL_8);
++	  sstride0 = pstride[0];
+ 	}
+     }
+ 
+diff -Naur gcc-4.3.2.orig/libgfortran/intrinsics/reshape_generic.c gcc-4.3.2/libgfortran/intrinsics/reshape_generic.c
+--- gcc-4.3.2.orig/libgfortran/intrinsics/reshape_generic.c	2007-08-31 07:01:34.000000000 -0700
++++ gcc-4.3.2/libgfortran/intrinsics/reshape_generic.c	2008-11-23 07:08:32.000000000 -0800
+@@ -185,16 +185,16 @@
+ 
+   if (sempty)
+     {
+-      /* Switch immediately to the pad array.  */
++      /* Pretend we are using the pad array the first time around, too.  */
+       src = pptr;
+-      sptr = NULL;
++      sptr = pptr;
+       sdim = pdim;
+       for (dim = 0; dim < pdim; dim++)
+ 	{
+ 	  scount[dim] = pcount[dim];
+ 	  sextent[dim] = pextent[dim];
+ 	  sstride[dim] = pstride[dim];
+-	  sstride0 = sstride[0] * size;
++	  sstride0 = pstride[0] * size;
+ 	}
+     }
+ 
+diff -Naur gcc-4.3.2.orig/libgfortran/io/list_read.c gcc-4.3.2/libgfortran/io/list_read.c
+--- gcc-4.3.2.orig/libgfortran/io/list_read.c	2008-07-26 05:57:06.000000000 -0700
++++ gcc-4.3.2/libgfortran/io/list_read.c	2008-10-28 21:44:15.000000000 -0700
+@@ -937,52 +937,8 @@
+     default:
+       if (dtp->u.p.namelist_mode)
+ 	{
+-	  if (dtp->u.p.current_unit->flags.delim == DELIM_APOSTROPHE
+-	      || dtp->u.p.current_unit->flags.delim == DELIM_QUOTE
+-	      || c == '&' || c == '$' || c == '/')
+-	    {
+-	      unget_char (dtp, c);
+-	      return;
+-	    }
+-
+-	  /* Check to see if we are seeing a namelist object name by using the
+-	     line buffer and looking ahead for an '=' or '('.  */
+-	  l_push_char (dtp, c);
+-
+-	  int i;
+-	  for(i = 0; i < 63; i++)
+-	    {
+-	      c = next_char (dtp);
+-	      if (is_separator(c))
+-		{
+-		  unget_char (dtp, c);
+-		  eat_separator (dtp);
+-		  c = next_char (dtp);
+-		  if (c != '=')
+-		    {
+-		      l_push_char (dtp, c);
+-		      dtp->u.p.item_count = 0;
+-		      dtp->u.p.line_buffer_enabled = 1;
+-		      goto get_string;
+-		    }
+-		}
+-
+-	      l_push_char (dtp, c);
+-
+-	      if (c == '=' || c == '(')
+-		{
+-		  dtp->u.p.item_count = 0;
+-		  dtp->u.p.nml_read_error = 1;
+-		  dtp->u.p.line_buffer_enabled = 1;
+-		  return;
+-		}
+-	    }
+-
+-	  /* The string is too long to be a valid object name so assume that it
+-	     is a string to be read in as a value.  */
+-	  dtp->u.p.item_count = 0;
+-	  dtp->u.p.line_buffer_enabled = 1;
+-	  goto get_string;
++	  unget_char (dtp, c);
++	  return;
+ 	}
+ 
+       push_char (dtp, c);
+@@ -2823,6 +2779,9 @@
+       goto nml_err_ret;
+     }
+ 
++  if (first_nl != NULL && first_nl->var_rank > 0)
++    nl = first_nl;
++
+   if (nml_read_obj (dtp, nl, 0, pprev_nl, nml_err_msg, nml_err_msg_size,
+ 		    clow, chigh) == FAILURE)
+     goto nml_err_ret;
+diff -Naur gcc-4.3.2.orig/libgfortran/io/write.c gcc-4.3.2/libgfortran/io/write.c
+--- gcc-4.3.2.orig/libgfortran/io/write.c	2008-01-18 13:43:08.000000000 -0800
++++ gcc-4.3.2/libgfortran/io/write.c	2008-10-28 21:44:15.000000000 -0700
+@@ -1133,20 +1133,8 @@
+   /* Set the delimiter for namelist output.  */
+ 
+   tmp_delim = dtp->u.p.current_unit->flags.delim;
+-  switch (tmp_delim)
+-    {
+-    case (DELIM_QUOTE):
+-      dtp->u.p.nml_delim = '"';
+-      break;
+-
+-    case (DELIM_APOSTROPHE):
+-      dtp->u.p.nml_delim = '\'';
+-      break;
+-
+-    default:
+-      dtp->u.p.nml_delim = '\0';
+-      break;
+-    }
++
++  dtp->u.p.nml_delim = tmp_delim == DELIM_APOSTROPHE ? '\'' : '"';
+ 
+   /* Temporarily disable namelist delimters.  */
+   dtp->u.p.current_unit->flags.delim = DELIM_NONE;
+diff -Naur gcc-4.3.2.orig/libgfortran/io/write_float.def gcc-4.3.2/libgfortran/io/write_float.def
+--- gcc-4.3.2.orig/libgfortran/io/write_float.def	2007-09-04 17:51:18.000000000 -0700
++++ gcc-4.3.2/libgfortran/io/write_float.def	2008-10-19 08:28:25.000000000 -0700
+@@ -728,7 +728,7 @@
+ 	    if (tmp < 0.5)\
+ 	      tmp = 0.0;\
+ 	    else if (tmp < 1.0)\
+-	      tmp = tmp + 0.5;\
++	      tmp = 1.0;\
+ 	  }\
+ 	zero_flag = (tmp == 0.0);\
+ \
+diff -Naur gcc-4.3.2.orig/libgfortran/m4/reshape.m4 gcc-4.3.2/libgfortran/m4/reshape.m4
+--- gcc-4.3.2.orig/libgfortran/m4/reshape.m4	2007-08-31 07:01:34.000000000 -0700
++++ gcc-4.3.2/libgfortran/m4/reshape.m4	2008-11-23 07:08:32.000000000 -0800
+@@ -201,16 +201,16 @@
+ 
+   if (sempty)
+     {
+-      /* Switch immediately to the pad array.  */
++      /* Pretend we are using the pad array the first time around, too.  */
+       src = pptr;
+-      sptr = NULL;
++      sptr = pptr;
+       sdim = pdim;
+       for (dim = 0; dim < pdim; dim++)
+ 	{
+ 	  scount[dim] = pcount[dim];
+ 	  sextent[dim] = pextent[dim];
+ 	  sstride[dim] = pstride[dim];
+-	  sstride0 = sstride[0] * sizeof ('rtype_name`);
++	  sstride0 = pstride[0];
+ 	}
+     }
+ 
+diff -Naur gcc-4.3.2.orig/libgomp/ChangeLog gcc-4.3.2/libgomp/ChangeLog
+--- gcc-4.3.2.orig/libgomp/ChangeLog	2008-08-27 11:01:37.000000000 -0700
++++ gcc-4.3.2/libgomp/ChangeLog	2008-12-05 12:35:34.000000000 -0800
+@@ -1,3 +1,19 @@
++2008-12-05  Janis Johnson  <janis187@us.ibm.com>
++
++	Backport from mainline:
++	2008-05-15  Janis Johnson  <janis187@us.ibm.com>
++
++	* testsuite/lib/libgomp.exp: Load new torture support.
++
++2008-12-02  Janis Johnson  <janis187@us.ibm.com>
++
++	Backport from mainline:
++	2008-11-26  Janis Johnson  <janis187@us.ibm.com>
++
++	PR testsuite/28870
++	* testsuite/lib/libgomp.exp: Include new timeout library files.
++	(libgomp_target_compile): Set timeout value from new proc.
++
+ 2008-08-27  Release Manager
+ 
+ 	* GCC 4.3.2 released.
+diff -Naur gcc-4.3.2.orig/libgomp/testsuite/lib/libgomp.exp gcc-4.3.2/libgomp/testsuite/lib/libgomp.exp
+--- gcc-4.3.2.orig/libgomp/testsuite/lib/libgomp.exp	2007-03-23 12:25:19.000000000 -0700
++++ gcc-4.3.2/libgomp/testsuite/lib/libgomp.exp	2008-12-05 12:35:34.000000000 -0800
+@@ -21,6 +21,9 @@
+ load_gcc_lib target-libpath.exp
+ load_gcc_lib wrapper.exp
+ load_gcc_lib gcc-defs.exp
++load_gcc_lib torture-options.exp
++load_gcc_lib timeout.exp
++load_gcc_lib timeout-dg.exp
+ load_gcc_lib gcc-dg.exp
+ load_gcc_lib gfortran-dg.exp
+ 
+@@ -169,6 +172,7 @@
+     }
+ 
+     lappend options "additional_flags=[libio_include_flags]"
++    lappend options "timeout=[timeout_value]"
+     lappend options "compiler=$GCC_UNDER_TEST"
+ 
+     set options [concat $libgomp_compile_options $options]
+diff -Naur gcc-4.3.2.orig/libjava/classpath/ChangeLog gcc-4.3.2/libjava/classpath/ChangeLog
+--- gcc-4.3.2.orig/libjava/classpath/ChangeLog	2008-08-27 11:03:49.000000000 -0700
++++ gcc-4.3.2/libjava/classpath/ChangeLog	2008-11-10 04:13:05.000000000 -0800
+@@ -1,3 +1,9 @@
++2008-11-10  Andrew Haley  <aph@redhat.com>
++
++	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c 
++	(Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoDrawGlyphVector): 
++	Remove bogus gdk_threads_leave ();
++
+ 2008-08-27  Release Manager
+ 
+ 	* GCC 4.3.2 released.
+diff -Naur gcc-4.3.2.orig/libjava/classpath/ChangeLog.gcj gcc-4.3.2/libjava/classpath/ChangeLog.gcj
+--- gcc-4.3.2.orig/libjava/classpath/ChangeLog.gcj	2008-04-17 10:15:10.000000000 -0700
++++ gcc-4.3.2/libjava/classpath/ChangeLog.gcj	2008-09-14 11:27:33.000000000 -0700
+@@ -1,3 +1,15 @@
++2008-09-14  Matthias Klose  <doko@ubuntu.com>
++
++	Merge from classpath:
++	2008-09-02  Andrew John Hughes  <gnu_andrew at member.fsf.org>
++
++	* tools/gnu/classpath/tools/javah/ClassWrapper.java:
++	(makeVtable()): Populate methodNameMap.
++	(printMethods(CniPrintStream)): Always use pre-populated
++	methodNameMap for bridge targets.
++
++	* tools/classes/gnu/classpath/tools/javah/ClassWrapper.class: Update.
++
+ 2008-04-17  Tom Tromey  <tromey@redhat.com>
+ 
+ 	PR libgcj/35950:
+diff -Naur gcc-4.3.2.orig/libjava/classpath/doc/cp-tools.info gcc-4.3.2/libjava/classpath/doc/cp-tools.info
+--- gcc-4.3.2.orig/libjava/classpath/doc/cp-tools.info	2008-08-27 12:48:38.000000000 -0700
++++ gcc-4.3.2/libjava/classpath/doc/cp-tools.info	1969-12-31 16:00:00.000000000 -0800
+@@ -1,1852 +0,0 @@
+-This is cp-tools.info, produced by makeinfo version 4.8 from
+-/scratch/joseph/4.3.2/gcc-4.3.2/gcc-4.3.2/libjava/classpath/doc/cp-tools.texinfo.
+-
+-   This file documents the Tools included in a standard distribution of
+-the GNU Classpath project deliverables.
+-
+-   Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+-
+-INFO-DIR-SECTION GNU Libraries
+-START-INFO-DIR-ENTRY
+-* Classpath Tools: (cp-tools).  GNU Classpath Tools Guide
+-END-INFO-DIR-ENTRY
+-
+-
+-File: cp-tools.info,  Node: Top,  Next: Applet Tools,  Prev: (dir),  Up: (dir)
+-
+-GNU Classpath Tools Guide
+-*************************
+-
+-This document contains important information you need to know in order
+-to use the tools included in the GNU Classpath project deliverables.
+-
+-   The Tools aim at providing a free replacement, similar in their
+-behavior, to their counter-parts found in the Reference Implementation
+-(RI) of the Java Software Development Kit (SDK).
+-
+-* Menu:
+-
+-* Applet Tools::               Work with applets
+-* Security Tools::             Work securely with Java applications
+-* Other Tools::                Other tools in classpath
+-* I18N Issues::                How to add support for non-English languages
+-
+- --- The Detailed Node Listing ---
+-
+-Applet Tools
+-
+-* appletviewer Tool::          Load applets
+-* gcjwebplugin::               Load applets in a web browser
+-
+-Security Tools
+-
+-* jarsigner Tool::             Sign and verify .JAR files
+-* keytool Tool::               Manage private keys and public certificates
+-
+-jarsigner Tool
+-
+-* Common jarsigner Options::   Options used when signing or verifying a file
+-* Signing Options::            Options only used when signing a .JAR file
+-* Verification Options::       Options only used when verifying a .JAR file
+-
+-keytool Tool
+-
+-* Getting Help::               How to get help with keytool commands
+-* Common keytool Options::     Options used in more than one command
+-* Distinguished Names::        X.500 Distinguished Names used in certificates
+-* Add/Update Commands::        Commands for adding data to a Key Store
+-* Export Commands::            Commands for exporting data from a Key Store
+-* Display Commands::           Commands for displaying data in a Key Store
+-* Management Commands::        Commands for managing a Key Store
+-
+-Add/Update Commands
+-
+-* Command -genkey::            Generate private key and self-signed certificate
+-* Command -import::            Import certificates and certificate replies
+-* Command -selfcert::          Generate self-signed certificate
+-* Command -cacert::            Import a CA Trusted Certificate
+-* Command -identitydb::        Import JDK-1 style identities
+-
+-Export Commands
+-
+-* Command -certreq::           Generate Certificate Signing Requests (CSR)
+-* Command -export::            Export a certificate in a Key Store
+-
+-Display Commands
+-
+-* Command -list::              Display information about one or all Aliases
+-* Command -printcert::         Print a certificate or a certificate fingerprint
+-
+-Management Commands
+-
+-* Command -keyclone::          Clone a Key Entry in a Key Store
+-* Command -storepasswd::       Change the password protecting a Key Store
+-* Command -keypasswd::         Change the password protecting a Key Entry
+-* Command -delete::            Remove an entry in a Key Store
+-
+-Other Tools
+-
+-* jar Tool::                   Archive tool for Java archives
+-* javah Tool::                 A java header compiler
+-* gcjh Tool::                  A java header compiler (old version)
+-* native2ascii Tool::          An encoding converter
+-* orbd Tool::                  An object request broker daemon
+-* serialver Tool::             A serial version command
+-* rmid Tool::                  RMI activation daemon
+-* rmiregistry Tool::           Remote object registry
+-* tnameserv Tool::             Naming service
+-
+-I18N Issues
+-
+-* Language Resources::         Where resources are located
+-* Message Formats::            How messages are internationalized
+-
+-
+-File: cp-tools.info,  Node: Applet Tools,  Next: Security Tools,  Prev: Top,  Up: Top
+-
+-1 Applet Tools
+-**************
+-
+-Two Applet Tools are available with GNU Classpath: appletviewer and
+-gcjwebplugin.
+-
+-   To avoid conflicts with other implementations, the appletviewer
+-executable is called "gappletviewer".
+-
+-* Menu:
+-
+-* appletviewer Tool::          Load applets
+-* gcjwebplugin::               Load applets in a web browser
+-
+-   If while using these tools you think you found a bug, then please
+-report it at classpath-bugs
+-(http://www.gnu.org/software/classpath/bugs.html).
+-
+-
+-File: cp-tools.info,  Node: appletviewer Tool,  Next: gcjwebplugin,  Prev: Applet Tools,  Up: Applet Tools
+-
+-1.1 The `appletviewer' Tool
+-===========================
+-
+-SYNOPSIS
+-
+-   appletviewer [OPTION]... URL...
+-appletviewer [OPTION]... `-code' CODE
+-appletviewer [OPTION]... `-plugin' INPUT,OUTPUT
+-
+-   DESCRIPTION The `appletviewer' tool loads and runs an applet.
+-
+-   Use the first form to test applets specified by tag.  The URL should
+-resolve to an HTML document from which the `appletviewer' will extract
+-applet tags.  The APPLET, EMBED and OBJECT tags are supported.  If a
+-given document contains multiple applet tags, all the applets will be
+-loaded, with each applet appearing in its own window.  Likewise, when
+-multiple URLs are specified, each applet tag instance is given its own
+-window.  If a given document contains no recognized tags the
+-`appletviewer' does nothing.
+-
+-     appletviewer http://www.gnu.org/software/classpath/
+-
+-   Use the second form to test an applet in development.  This form
+-allows applet tag attributes to be supplied on the command line.  Only
+-one applet may be specified using the `-code' option.  The `-code'
+-option overrides the URL form - any URLs specified will be ignored.
+-
+-     appletviewer -code Test.class -param datafile,data.txt
+-
+-   `gcjwebplugin' uses the third form to communicate with the
+-`appletviewer' through named pipes.
+-
+-   URL OPTIONS
+-`-debug'
+-     This option is not yet implemented but is provided for
+-     compatibility.
+-
+-`-encoding CHARSET'
+-     Use this option to specify an alternate character encoding for the
+-     specified HTML page.
+-
+-
+-   APPLET TAG OPTIONS
+-`-code CODE'
+-     Use the `-code' option to specify the value of the applet tag CODE
+-     attribute.
+-
+-`-codebase CODEBASE'
+-     Use the `-codebase' option to specify the value of the applet tag
+-     CODEBASE attribute.
+-
+-`-archive ARCHIVE'
+-     Use the `-archive' option to specify the value of the applet tag
+-     ARCHIVE attribute.
+-
+-`-width WIDTH'
+-     Use the `-width' option to specify the value of the applet tag
+-     WIDTH attribute.
+-
+-`-height HEIGHT'
+-     Use the `-height' option to specify the value of the applet tag
+-     HEIGHT attribute.
+-
+-`-param NAME,VALUE'
+-     Use the `-param' option to specify values for the NAME and VALUE
+-     attributes of an applet PARAM tag.
+-
+-
+-   PLUGIN OPTION
+-`-plugin INPUT,OUTPUT'
+-     `gcjwebplugin' uses the `-plugin' option to specify the named pipe
+-     the `appletviewer' should use for receiving commands (INPUT) and
+-     the one it should use for sending commands to `gcjwebplugin'
+-     (OUTPUT).
+-
+-
+-   DEBUGGING OPTION
+-`-verbose'
+-     Use the `-verbose' option to have the `appletviewer' print
+-     debugging messages.
+-
+-
+-   STANDARD OPTIONS
+-
+-`-help'
+-     Use the `-help' option to have the `appletviewer' print a usage
+-     message, then exit.
+-
+-`-version'
+-     Use the `-version' option to have the `appletviewer' print its
+-     version, then exit.
+-
+-`-JOPTION'
+-     Use the `-J' option to pass OPTION to the virtual machine that
+-     will run the `appletviewer'.  Unlike other options, there must not
+-     be a space between the `-J' and OPTION.
+-
+-
+-
+-File: cp-tools.info,  Node: gcjwebplugin,  Prev: appletviewer Tool,  Up: Applet Tools
+-
+-1.2 The `gcjwebplugin' Tool
+-===========================
+-
+-`gcjwebplugin' is a plugin that adds applet support to web browsers.
+-Currently `gcjwebplugin' only supports Mozilla-based browsers (e.g.,
+-Firefox, Galeon, Mozilla).
+-
+-
+-File: cp-tools.info,  Node: Security Tools,  Next: Other Tools,  Prev: Applet Tools,  Up: Top
+-
+-2 Security Tools
+-****************
+-
+-Two Security Tools are available with GNU Classpath: `jarsigner' and
+-`keytool'.
+-
+-   To avoid conflicts with other implementations, the jarsigner
+-executable is called `gjarsigner' and the keytool executable is called
+-`gkeytool'.
+-
+-* Menu:
+-
+-* jarsigner Tool::             Sign and verify .JAR files
+-* keytool Tool::               Manage private keys and public certificates
+-
+-   If while using these tools you think you found a bug, then please
+-report it at classpath-bugs
+-(http://www.gnu.org/software/classpath/bugs.html).
+-
+-
+-File: cp-tools.info,  Node: jarsigner Tool,  Next: keytool Tool,  Prev: Security Tools,  Up: Security Tools
+-
+-2.1 The `jarsigner' Tool
+-========================
+-
+-The `jarsigner' tool is invoked from the command line, in one of two
+-forms, as follows:
+-
+-     jarsigner [OPTION]... FILE ALIAS
+-
+-     jarsigner `-verify' [OPTION]... FILE
+-
+-   When the first form is used, the tool signs the designated JAR file.
+-The second form, on the other hand, is used to verify a previously
+-signed JAR file.
+-
+-   FILE is the .JAR file to process; i.e. to sign if the first syntax
+-form is used, or to verify if the second syntax form is used instead.
+-
+-   ALIAS must be a known Alias of a Key Entry in the designated Key
+-Store. The private key material associated with this Alias is then used
+-for signing the designated .JAR file.
+-
+-* Menu:
+-
+-* Common jarsigner Options::   Options used when signing or verifying a file
+-* Signing Options::            Options only used when signing a .JAR file
+-* Verification Options::       Options only used when verifying a .JAR file
+-
+-
+-File: cp-tools.info,  Node: Common jarsigner Options,  Next: Signing Options,  Prev: jarsigner Tool,  Up: jarsigner Tool
+-
+-2.1.1 Common options
+---------------------
+-
+-The following options may be used when the tool is used for either
+-signing, or verifying, a .JAR file.
+-
+-`-verbose'
+-     Use this option to force the tool to generate more verbose
+-     messages, during its processing.
+-
+-`-internalsf'
+-     When present, the tool will include -which otherwise it does not-
+-     the `.SF' file in the `.DSA' generated file.
+-
+-`-sectionsonly'
+-     When present, the tool will include in the `.SF' generated file
+-     -which otherwise it does not- a header containing a hash of the
+-     whole manifest file.  When that header is included, the tool can
+-     quickly check, during verification, if the hash (in the header)
+-     matches or not the manifest file.
+-
+-`-provider PROVIDER_CLASS_NAME'
+-     A fully qualified class name of a Security Provider to add to the
+-     current list of Security Providers already installed in the JVM
+-     in-use. If a provider class is specified with this option, and was
+-     successfully added to the runtime -i.e. it was not already
+-     installed- then the tool will attempt to remove this Security
+-     Provider before exiting.
+-
+-`-help'
+-     Prints a help text similar to this one.
+-
+-
+-
+-File: cp-tools.info,  Node: Signing Options,  Next: Verification Options,  Prev: Common jarsigner Options,  Up: jarsigner Tool
+-
+-2.1.2 Signing options
+----------------------
+-
+-The following options may be specified when using the tool for signing
+-purposes.
+-
+-`-keystore URL'
+-     Use this option to specify the location of the key store to use.
+-     The default value is a file URL referencing the file named
+-     `.keystore' located in the path returned by the call to
+-     `java.lang.System#getProperty(String)' using `user.home' as
+-     argument.
+-
+-     If a URL was specified, but was found to be malformed -e.g.
+-     missing protocol element- the tool will attempt to use the URL
+-     value as a file-name (with absolute or relative path-name) of a
+-     key store -as if the protocol was `file:'.
+-
+-`-storetype STORE_TYPE'
+-     Use this option to specify the type of the key store to use. The
+-     default value, if this option is omitted, is that of the property
+-     `keystore.type' in the security properties file, which is obtained
+-     by invoking the static method call `getDefaultType()' in
+-     `java.security.KeyStore'.
+-
+-`-storepass PASSWORD'
+-     Use this option to specify the password which will be used to
+-     unlock the key store. If this option is missing, the User will be
+-     prompted to provide a password.
+-
+-`-keypass PASSWORD'
+-     Use this option to specify the password which the tool will use to
+-     unlock the Key Entry associated with the designated Alias.
+-
+-     If this option is omitted, the tool will first attempt to unlock
+-     the Key Entry using the same password protecting the key store. If
+-     this fails, you will then be prompted to provide a password.
+-
+-`-sigfile NAME'
+-     Use this option to designate a literal that will be used to
+-     construct file names for both the `.SF' and `.DSA' signature
+-     files. These files  will be generated, by the tool, and placed in
+-     the `META-INF' directory of the signed JAR.  Permissible
+-     characters for NAME must be in the range "a-zA-Z0-9_-".  All
+-     characters will be converted to upper-case ones.
+-
+-     If this option is missing, the first eight characters of the ALIAS
+-     argument will be used. When this is the case, any character in
+-     ALIAS that is outside the permissible range of characters will be
+-     replaced by an underscore.
+-
+-`-signedjar FILE'
+-     Use this option to specify the file name of the signed JAR. If
+-     this option is omitted, then the signed JAR will be named the same
+-     as FILE; i.e. the input JAR file will be replaced with the signed
+-     copy.
+-
+-
+-
+-File: cp-tools.info,  Node: Verification Options,  Prev: Signing Options,  Up: jarsigner Tool
+-
+-2.1.3 Verification options
+---------------------------
+-
+-The following options may be specified when using the tool for
+-verification purposes.
+-
+-`-verify'
+-     Use this option to indicate that the tool is to be used for
+-     verification purposes.
+-
+-`-certs'
+-     This option is used in conjunction with the `-verbose' option.
+-     When present, along with the `-verbose' option, the tool will
+-     print more detailed information about the certificates of the
+-     signer(s) being processed.
+-
+-
+-
+-File: cp-tools.info,  Node: keytool Tool,  Prev: jarsigner Tool,  Up: Security Tools
+-
+-2.2 The `keytool' Tool
+-======================
+-
+-Cryptographic credentials, in a Java environment, are usually stored in
+-a Key Store. The Java SDK specifies a Key Store as a persistent
+-container of two types of objects: Key Entries and Trusted
+-Certificates. The security tool `keytool' is a Java-based application
+-for managing those types of objects.
+-
+-   A Key Entry represents the private key part of a key-pair used in
+-Public-Key Cryptography, and a signed X.509 certificate which
+-authenticates the public key part for a known entity; i.e. the owner of
+-the key-pair. The X.509 certificate itself contains the public key part
+-of the key-pair.
+-
+-   A Trusted Certificate is a signed X.509 certificate issued by a
+-trusted entity. The Trust in this context is relative to the User of
+-the `keytool'. In other words, the existence of a Trusted Certificate
+-in the Key Store processed by a `keytool' command implies that the User
+-trusts the Issuer of that Trusted Certificate to also sign, and hence
+-authenticates, other Subjects the tool may process.
+-
+-   Trusted Certificates are important because they allow the tool to
+-mechanically construct Chains of Trust starting from one of the Trusted
+-Certificates in a Key Store and ending with a certificate whose Issuer
+-is potentially unknown. A valid chain is an ordered list, starting with
+-a Trusted Certificate (also called the anchor), ending with the target
+-certificate, and satisfying the condition that the Subject of
+-certificate `#i' is the Issuer of certificate `#i + 1'.
+-
+-   The `keytool' is invoked from the command line as follows:
+-
+-     keytool [COMMAND] ...
+-
+-   Multiple COMMANDs may be specified at once, each complete with its
+-own options. `keytool' will parse all the arguments, before processing,
+-and executing, each `COMMAND'. If an exception occurs while executing
+-one COMMAND `keytool' will abort. Note however that because the
+-implementation of the tool uses code to parse command line options that
+-also supports GNU-style options, you have to separate each command
+-group with a double-hyphen; e.g
+-
+-     keytool -list -- -printcert -alias mykey
+-
+-   Here is a summary of the commands supported by the tool:
+-
+-  1. Add/Update commands
+-    `-genkey [OPTION]...'
+-          Generate a new Key Entry, eventually creating a new key store.
+-
+-    `-import [OPTION]...'
+-          Add, to a key store, Key Entries (private keys and
+-          certificate chains authenticating the public keys) and
+-          Trusted Certificates (3rd party certificates which can be
+-          used as Trust Anchors when building chains-of-trust).
+-
+-    `-selfcert [OPTION]...'
+-          Generate a new self-signed Trusted Certificate.
+-
+-    `-cacert [OPTION]...'
+-          Import a CA Trusted Certificate.
+-
+-    `-identitydb [OPTION]...'
+-          NOT IMPLEMENTED YET.
+-          Import a JDK 1.1 style Identity Database.
+-
+-  2. Export commands
+-    `-certreq [OPTION]...'
+-          Issue a Certificate Signing Request (CSR) which can be then
+-          sent to a Certification Authority (CA) to issue a certificate
+-          signed (by the CA) and authenticating the Subject of the
+-          request.
+-
+-    `-export [OPTION]...'
+-          Export a certificate from a key store.
+-
+-  3. Display commands
+-    `-list [OPTION]...'
+-          Print one or all certificates in a key store to `STDOUT'.
+-
+-    `-printcert [OPTION]...'
+-          Print a human-readable form of a certificate, in a designated
+-          file, to `STDOUT'.
+-
+-  4. Management commands
+-    `-keyclone [OPTION]...'
+-          Clone a Key Entry in a key store.
+-
+-    `-storepasswd [OPTION]...'
+-          Change the password protecting a key store.
+-
+-    `-keypasswd [OPTION]...'
+-          Change the password protecting a Key Entry in a key store.
+-
+-    `-delete [OPTION]...'
+-          Delete a Key Entry or a Trusted Certificate from a key store.
+-
+-* Menu:
+-
+-* Getting Help::               How to get help with keytool commands
+-* Common keytool Options::     Options used in more than one command
+-* Distinguished Names::        X.500 Distinguished Names used in certificates
+-* Add/Update Commands::        Commands for adding data to a Key Store
+-* Export Commands::            Commands for exporting data from a Key Store
+-* Display Commands::           Commands for displaying data in a Key Store
+-* Management Commands::        Commands for managing a Key Store
+-
+-
+-File: cp-tools.info,  Node: Getting Help,  Next: Common keytool Options,  Prev: keytool Tool,  Up: keytool Tool
+-
+-2.2.1 Getting help
+-------------------
+-
+-To get a general help text about the tool, use the `-help' option; e.g.
+-
+-     `keytool -help'
+-
+-   To get more specific help text about one of the tool's command use
+-the `-help' option for that command; e.g.
+-
+-     `keytool -genkey -help'
+-
+-   In both instances, the tool will print a help text and then will
+-exit the running JVM.
+-
+-   It is worth noting here that the help messages printed by the tool
+-are I18N-ready. This means that if/when the contents of the tool's
+-Message Bundle properties file are available in languages other than
+-English, you may see those messages in that language.
+-
+-
+-File: cp-tools.info,  Node: Common keytool Options,  Next: Distinguished Names,  Prev: Getting Help,  Up: keytool Tool
+-
+-2.2.2 Common options
+---------------------
+-
+-The following `OPTION's are used in more than one `COMMAND'. They are
+-described here to reduce redundancy.
+-
+-`-alias ALIAS'
+-     Every entry, be it a Key Entry or a Trusted Certificate, in a key
+-     store is uniquely identified by a user-defined ALIAS string. Use
+-     this option to specify the ALIAS to use when referring to an entry
+-     in the key store. Unless specified otherwise, a default value of
+-     `mykey' shall be used when this option is omitted from the command
+-     line.
+-
+-`-keyalg ALGORITHM'
+-     Use this option to specify the canonical name of the key-pair
+-     generation algorithm. The default value for this option is `DSS'
+-     (a synonym for the Digital Signature Algorithm also known as DSA).
+-
+-`-keysize SIZE'
+-     Use this option to specify the number of bits of the shared
+-     modulus (for both the public and private keys) to use when
+-     generating new keys. A default value of `1024' will be used if
+-     this option is omitted from the command line.
+-
+-`-validity DAY_COUNT'
+-     Use this option to specify the number of days a newly generated
+-     certificate will be valid for. The default value is `90' (days) if
+-     this option is omitted from the command line.
+-
+-`-storetype STORE_TYPE'
+-     Use this option to specify the type of the key store to use. The
+-     default value, if this option is omitted, is that of the property
+-     `keystore.type' in the security properties file, which is obtained
+-     by invoking the static method call `getDefaultType()' in
+-     `java.security.KeyStore'.
+-
+-`-storepass PASSWORD'
+-     Use this option to specify the password protecting the key store.
+-     If this option is omitted from the command line, you will be
+-     prompted to provide a password.
+-
+-`-keystore URL'
+-     Use this option to specify the location of the key store to use.
+-     The default value is a file URL referencing the file named
+-     `.keystore' located in the path returned by the call to
+-     `java.lang.System#getProperty(String)' using `user.home' as
+-     argument.
+-
+-     If a URL was specified, but was found to be malformed -e.g.
+-     missing protocol element- the tool will attempt to use the URL
+-     value as a file-name (with absolute or relative path-name) of a
+-     key store -as if the protocol was `file:'.
+-
+-`-provider PROVIDER_CLASS_NAME'
+-     A fully qualified class name of a Security Provider to add to the
+-     current list of Security Providers already installed in the JVM
+-     in-use. If a provider class is specified with this option, and was
+-     successfully added to the runtime -i.e. it was not already
+-     installed- then the tool will attempt to removed this Security
+-     Provider before exiting.
+-
+-`-file FILE'
+-     Use this option to designate a file to use with a command. When
+-     specified with this option, the value is expected to be the fully
+-     qualified path of a file accessible by the File System. Depending
+-     on the command, the file may be used as input or as output. When
+-     this option is omitted from the command line, `STDIN' will be used
+-     instead, as the source of input, and `STDOUT' will be used instead
+-     as the output destination.
+-
+-`-v'
+-     Unless specified otherwise, use this option to enable more verbose
+-     output.
+-
+-
+-
+-File: cp-tools.info,  Node: Distinguished Names,  Next: Add/Update Commands,  Prev: Common keytool Options,  Up: keytool Tool
+-
+-2.2.3 X.500 Distinguished Names
+--------------------------------
+-
+-A Distinguished Name (or DN) MUST be supplied with some of the
+-`COMMAND's using a `-dname' option. The syntax of a valid value for
+-this option MUST follow RFC-2253 specifications. Namely the following
+-components (with their accepted meaning) will be recognized. Note that
+-the component name is case-insensitive:
+-
+-CN
+-     The Common Name; e.g. `host.domain.com'
+-
+-OU
+-     The Organizational Unit; e.g. `IT Department'
+-
+-O
+-     The Organization Name; e.g. `The Sample Company'
+-
+-L
+-     The Locality Name; e.g. `Sydney'
+-
+-ST
+-     The State Name; e.g. `New South Wales'
+-
+-C
+-     The 2-letter Country identifier; e.g. `AU'
+-
+-   When specified with a `-dname' option, each pair of component/value
+-will be separated from the other with a comma. Each component and value
+-pair MUST be separated by an equal sign. For example, the following is
+-a valid DN value:
+-CN=host.domain.com, O=The Sample Company, L=Sydney, ST=NSW, C=AU
+-
+-If the Distinguished Name is required, and no valid default value can
+-be used, the tool will prompt you to enter the information through the
+-console.
+-
+-
+-File: cp-tools.info,  Node: Add/Update Commands,  Next: Export Commands,  Prev: Distinguished Names,  Up: keytool Tool
+-
+-2.2.4 Add/Update commands
+--------------------------
+-
+-* Menu:
+-
+-* Command -genkey::            Generate private key and self-signed certificate
+-* Command -import::            Import certificates and certificate replies
+-* Command -selfcert::          Generate self-signed certificate
+-* Command -cacert::            Import a CA Trusted Certificate
+-* Command -identitydb::        Import JDK-1 style identities
+-
+-
+-File: cp-tools.info,  Node: Command -genkey,  Next: Command -import,  Prev: Add/Update Commands,  Up: Add/Update Commands
+-
+-2.2.4.1 The `-genkey' command
+-.............................
+-
+-Use this command to generate a new key-pair (both private and public
+-keys), and save these credentials in the key store as a Key Entry,
+-associated with the designated (if was specified with the `-alias'
+-option) or default (if the `-alias' option is omitted) Alias.
+-
+-   The private key material will be protected with a user-defined
+-password (see `-keypass' option). The public key on the other hand will
+-be part of a self-signed X.509 certificate, which will form a 1-element
+-chain and will be saved in the key store.
+-
+-`-alias ALIAS'
+-     For more details *note ALIAS: alias.
+-
+-`-keyalg ALGORITHM'
+-     For more details *note ALGORITHM: keyalg.
+-
+-`-keysize KEY_SIZE'
+-     For more details *note KEY_SIZE: keysize.
+-
+-`-sigalg ALGORITHM'
+-     The canonical name of the digital signature algorithm to use for
+-     signing certificates. If this option is omitted, a default value
+-     will be chosen based on the type of the key-pair; i.e. the
+-     algorithm that ends up being used by the -keyalg option. If the
+-     key-pair generation algorithm is `DSA', the value for the
+-     signature algorithm will be `SHA1withDSA'. If on the other hand
+-     the key-pair generation algorithm is `RSA', then the tool will use
+-     `MD5withRSA' as the signature algorithm.
+-
+-`-dname NAME'
+-     This a mandatory value for the command. If no value is specified
+-     -i.e. the `-dname' option is omitted- the tool will prompt you to
+-     enter a Distinguished Name to use as both the Owner and Issuer of
+-     the generated self-signed certificate.
+-
+-     For more details *note X.500 DISTINGUISHED NAME: dn.
+-
+-`-keypass PASSWORD'
+-     Use this option to specify the password which the tool will use to
+-     protect the newly created Key Entry.
+-
+-     If this option is omitted, you will be prompted to provide a
+-     password.
+-
+-`-validity DAY_COUNT'
+-     For more details *note DAY_COUNT: validity.
+-
+-`-storetype STORE_TYPE'
+-     For more details *note STORE_TYPE: storetype.
+-
+-`-keystore URL'
+-     For more details *note URL: keystore.
+-
+-`-storepass PASSWORD'
+-     For more details *note PASSWORD: storepass.
+-
+-`-provider PROVIDER_CLASS_NAME'
+-     For more details *note PROVIDER_CLASS_NAME: provider.
+-
+-`-v'
+-     For more details *note verbose::.
+-
+-
+-
+-File: cp-tools.info,  Node: Command -import,  Next: Command -selfcert,  Prev: Command -genkey,  Up: Add/Update Commands
+-
+-2.2.4.2 The `-import' command
+-.............................
+-
+-Use this command to read an X.509 certificate, or a PKCS#7 Certificate
+-Reply from a designated input source and incorporate the certificates
+-into the key store.
+-
+-   If the Alias does not already exist in the key store, the tool
+-treats the certificate read from the input source as a new Trusted
+-Certificate. It then attempts to discover a chain-of-trust, starting
+-from that certificate and ending at another Trusted Certificate,
+-already stored in the key store. If the `-trustcacerts' option is
+-present, an additional key store, of type `JKS' named `cacerts', and
+-assumed to be present in `${JAVA_HOME}/lib/security' will also be
+-consulted if found -`${JAVA_HOME}' refers to the location of an
+-installed Java Runtime Environment (JRE). If no chain-of-trust can be
+-established, and unless the `-noprompt' option has been specified, the
+-certificate is printed to `STDOUT' and the user is prompted for a
+-confirmation.
+-
+-   If Alias exists in the key store, the tool will treat the
+-certificate(s) read from the input source as a Certificate Reply, which
+-can be a chain of certificates, that eventually would replace the chain
+-of certificates associated with the Key Entry of that Alias. The
+-substitution of the certificates only occurs if a chain-of-trust can be
+-established between the bottom certificate of the chain read from the
+-input file and the Trusted Certificates already present in the key
+-store. Again, if the `-trustcacerts' option is specified, additional
+-Trusted Certificates in the same `cacerts' key store will be
+-considered. If no chain-of-trust can be established, the operation will
+-abort.
+-
+-`-alias ALIAS'
+-     For more details *note ALIAS: alias.
+-
+-`-file FILE'
+-     For more details *note FILE: file.
+-
+-`-keypass PASSWORD'
+-     Use this option to specify the password which the tool will use to
+-     protect the Key Entry associated with the designated Alias, when
+-     replacing this Alias' chain of certificates with that found in the
+-     certificate reply.
+-
+-     If this option is omitted, and the chain-of-trust for the
+-     certificate reply has been established, the tool will first
+-     attempt to unlock the Key Entry using the same password protecting
+-     the key store. If this fails, you will then be prompted to provide
+-     a password.
+-
+-`-noprompt'
+-     Use this option to prevent the tool from prompting the user.
+-
+-`-trustcacerts'
+-     Use this option to indicate to the tool that a key store, of type
+-     `JKS', named `cacerts', and usually located in `lib/security' in
+-     an installed Java Runtime Environment should be considered when
+-     trying to establish chain-of-trusts.
+-
+-`-storetype STORE_TYPE'
+-     For more details *note STORE_TYPE: storetype.
+-
+-`-keystore URL'
+-     For more details *note URL: keystore.
+-
+-`-storepass PASSWORD'
+-     For more details *note PASSWORD: storepass.
+-
+-`-provider PROVIDER_CLASS_NAME'
+-     For more details *note PROVIDER_CLASS_NAME: provider.
+-
+-`-v'
+-     For more details *note verbose::.
+-
+-
+-
+-File: cp-tools.info,  Node: Command -selfcert,  Next: Command -cacert,  Prev: Command -import,  Up: Add/Update Commands
+-
+-2.2.4.3 The `-selfcert' command
+-...............................
+-
+-Use this command to generate a self-signed X.509 version 1 certificate.
+-The newly generated certificate will form a chain of one element which
+-will replace the previous chain associated with the designated Alias
+-(if `-alias' option was specified), or the default Alias (if `-alias'
+-option was omitted).
+-
+-`-alias ALIAS'
+-     For more details *note ALIAS: alias.
+-
+-`-sigalg ALGORITHM'
+-     The canonical name of the digital signature algorithm to use for
+-     signing the certificate. If this option is omitted, a default
+-     value will be chosen based on the type of the private key
+-     associated with the designated Alias. If the private key is a
+-     `DSA' one, the value for the signature algorithm will be
+-     `SHA1withDSA'. If on the other hand the private key is an `RSA'
+-     one, then the tool will use `MD5withRSA' as the signature
+-     algorithm.
+-
+-`-dname NAME'
+-     Use this option to specify the Distinguished Name of the newly
+-     generated self-signed certificate. If this option is omitted, the
+-     existing Distinguished Name of the base certificate in the chain
+-     associated with the designated Alias will be used instead.
+-
+-     For more details *note X.500 DISTINGUISHED NAME: dn.
+-
+-`-validity DAY_COUNT'
+-     For more details *note DAY_COUNT: validity.
+-
+-`-keypass PASSWORD'
+-     Use this option to specify the password which the tool will use to
+-     unlock the Key Entry associated with the designated Alias.
+-
+-     If this option is omitted, the tool will first attempt to unlock
+-     the Key Entry using the same password protecting the key store. If
+-     this fails, you will then be prompted to provide a password.
+-
+-`-storetype STORE_TYPE'
+-     For more details *note STORE_TYPE: storetype.
+-
+-`-keystore URL'
+-     For more details *note URL: keystore.
+-
+-`-storepass PASSWORD'
+-     For more details *note PASSWORD: storepass.
+-
+-`-provider PROVIDER_CLASS_NAME'
+-     For more details *note PROVIDER_CLASS_NAME: provider.
+-
+-`-v'
+-     For more details *note verbose::.
+-
+-
+-
+-File: cp-tools.info,  Node: Command -cacert,  Next: Command -identitydb,  Prev: Command -selfcert,  Up: Add/Update Commands
+-
+-2.2.4.4 The `-cacert' command
+-.............................
+-
+-Use this command to import, a CA certificate and add it to the key
+-store as a Trusted Certificate. The Alias for this new entry will be
+-constructed from the FILE's base-name after replacing hyphens and dots
+-with underscores.
+-
+-   This command is useful when used in a script that recursively visits
+-a directory of CA certificates to populate a `cacerts.gkr' Key Store of
+-trusted certificates which can then be used commands that specify the
+-`-trustcacerts' option.
+-
+-`-file FILE'
+-     For more details *note FILE: file.
+-
+-`-storetype STORE_TYPE'
+-     For more details *note STORE_TYPE: storetype.
+-
+-`-keystore URL'
+-     For more details *note URL: keystore.
+-
+-`-storepass PASSWORD'
+-     For more details *note PASSWORD: storepass.
+-
+-`-provider PROVIDER_CLASS_NAME'
+-     For more details *note PROVIDER_CLASS_NAME: provider.
+-
+-`-v'
+-     For more details *note verbose::.
+-
+-
+-
+-File: cp-tools.info,  Node: Command -identitydb,  Prev: Command -cacert,  Up: Add/Update Commands
+-
+-2.2.4.5 The `-identitydb' command
+-.................................
+-
+-NOT IMPLEMENTED YET.
+-
+-   Use this command to import a JDK 1.1 style Identity Database.
+-
+-`-file FILE'
+-     For more details *note FILE: file.
+-
+-`-storetype STORE_TYPE'
+-     For more details *note STORE_TYPE: storetype.
+-
+-`-keystore URL'
+-     For more details *note URL: keystore.
+-
+-`-storepass PASSWORD'
+-     For more details *note PASSWORD: storepass.
+-
+-`-provider PROVIDER_CLASS_NAME'
+-     For more details *note PROVIDER_CLASS_NAME: provider.
+-
+-`-v'
+-     For more details *note verbose::.
+-
+-
+-
+-File: cp-tools.info,  Node: Export Commands,  Next: Display Commands,  Prev: Add/Update Commands,  Up: keytool Tool
+-
+-2.2.5 Export commands
+----------------------
+-
+-* Menu:
+-
+-* Command -certreq::           Generate Certificate Signing Requests (CSR)
+-* Command -export::            Export a certificate in a Key Store
+-
+-
+-File: cp-tools.info,  Node: Command -certreq,  Next: Command -export,  Prev: Export Commands,  Up: Export Commands
+-
+-2.2.5.1 The `-certreq' command
+-..............................
+-
+-Use this command to generate a PKCS#10 Certificate Signing Request
+-(CSR) and write it to a designated output destination. The contents of
+-the destination should look something like the following:
+-
+-     -----BEGIN NEW CERTIFICATE REQUEST-----
+-     MI...QAwXzEUMBIGA1UEAwwLcnNuQGdudS5vcmcxGzAZBgNVBAoMElUg
+-     Q2...A0GA1UEBwwGU3lkbmV5MQwwCgYDVQQIDANOU1cxCzAJBgNVBACC
+-     ...
+-     FC...IVwNVOfQLRX+O5kAhQ/a4RTZme2L8PnpvgRwrf7Eg8D6w==
+-     -----END NEW CERTIFICATE REQUEST-----
+-
+-   IMPORTANT: Some documentation (e.g. RSA examples) claims that the
+-`Attributes' field, in the CSR is `OPTIONAL' while RFC-2986 implies the
+-opposite. This implementation considers this field, by default, as
+-`OPTIONAL', unless the option `-attributes' is specified on the command
+-line.
+-
+-`-alias ALIAS'
+-     For more details *note ALIAS: alias.
+-
+-`-sigalg ALGORITHM'
+-     The canonical name of the digital signature algorithm to use for
+-     signing the certificate. If this option is omitted, a default
+-     value will be chosen based on the type of the private key
+-     associated with the designated Alias. If the private key is a
+-     `DSA' one, the value for the signature algorithm will be
+-     `SHA1withDSA'. If on the other hand the private key is an `RSA'
+-     one, then the tool will use `MD5withRSA' as the signature
+-     algorithm.
+-
+-`-file FILE'
+-     For more details *note FILE: file.
+-
+-`-keypass PASSWORD'
+-     Use this option to specify the password which the tool will use to
+-     unlock the Key Entry associated with the designated Alias.
+-
+-     If this option is omitted, the tool will first attempt to unlock
+-     the Key Entry using the same password protecting the key store. If
+-     this fails, you will then be prompted to provide a password.
+-
+-`-storetype STORE_TYPE'
+-     For more details *note STORE_TYPE: storetype.
+-
+-`-keystore URL'
+-     For more details *note URL: keystore.
+-
+-`-storepass PASSWORD'
+-     For more details *note PASSWORD: storepass.
+-
+-`-provider PROVIDER_CLASS_NAME'
+-     For more details *note PROVIDER_CLASS_NAME: provider.
+-
+-`-v'
+-     For more details *note verbose::.
+-
+-`-attributes'
+-     Use this option to force the tool to encode a `NULL' DER value in
+-     the CSR as the value of the `Attributes' field.
+-
+-
+-
+-File: cp-tools.info,  Node: Command -export,  Prev: Command -certreq,  Up: Export Commands
+-
+-2.2.5.2 The `-export' command
+-.............................
+-
+-Use this command to export a certificate stored in a key store to a
+-designated output destination, either in binary format (if the `-v'
+-option is specified), or in RFC-1421 compliant encoding (if the `-rfc'
+-option is specified instead).
+-
+-`-alias ALIAS'
+-     For more details *note ALIAS: alias.
+-
+-`-file FILE'
+-     For more details *note FILE: file.
+-
+-`-storetype STORE_TYPE'
+-     For more details *note STORE_TYPE: storetype.
+-
+-`-keystore URL'
+-     For more details *note URL: keystore.
+-
+-`-storepass PASSWORD'
+-     For more details *note PASSWORD: storepass.
+-
+-`-provider PROVIDER_CLASS_NAME'
+-     For more details *note PROVIDER_CLASS_NAME: provider.
+-
+-`-rfc'
+-     Use RFC-1421 specifications when encoding the output.
+-
+-`-v'
+-     Output the certificate in binary DER encoding. This is the default
+-     output format of the command if neither `-rfc' nor `-v' options
+-     were detected on the command line. If both this option and the
+-     `-rfc' option are detected on the command line, the tool will opt
+-     for the RFC-1421 style encoding.
+-
+-
+-
+-File: cp-tools.info,  Node: Display Commands,  Next: Management Commands,  Prev: Export Commands,  Up: keytool Tool
+-
+-2.2.6 Display commands
+-----------------------
+-
+-* Menu:
+-
+-* Command -list::              Display information about one or all Aliases
+-* Command -printcert::         Print a certificate or a certificate fingerprint
+-
+-
+-File: cp-tools.info,  Node: Command -list,  Next: Command -printcert,  Prev: Display Commands,  Up: Display Commands
+-
+-2.2.6.1 The `-list' command
+-...........................
+-
+-Use this command to print one or all of a key store entries to
+-`STDOUT'. Usually this command will only print a fingerprint of the
+-certificate, unless either the `-rfc' or the `-v' option is specified.
+-
+-`-alias ALIAS'
+-     If this option is omitted, the tool will print ALL the entries
+-     found in the key store.
+-
+-     For more details *note ALIAS: alias.
+-
+-`-storetype STORE_TYPE'
+-     For more details *note STORE_TYPE: storetype.
+-
+-`-keystore URL'
+-     For more details *note URL: keystore.
+-
+-`-storepass PASSWORD'
+-     For more details *note PASSWORD: storepass.
+-
+-`-provider PROVIDER_CLASS_NAME'
+-     For more details *note PROVIDER_CLASS_NAME: provider.
+-
+-`-rfc'
+-     Use RFC-1421 specifications when encoding the output.
+-
+-`-v'
+-     Output the certificate in human-readable format. If both this
+-     option and the `-rfc' option are detected on the command line, the
+-     tool will opt for the human-readable form and will not abort the
+-     command.
+-
+-
+-
+-File: cp-tools.info,  Node: Command -printcert,  Prev: Command -list,  Up: Display Commands
+-
+-2.2.6.2 The `-printcert' command
+-................................
+-
+-Use this command to read a certificate from a designated input source
+-and print it to `STDOUT' in a human-readable form.
+-
+-`-file FILE'
+-     For more details *note FILE: file.
+-
+-`-v'
+-     For more details *note verbose::.
+-
+-
+-
+-File: cp-tools.info,  Node: Management Commands,  Prev: Display Commands,  Up: keytool Tool
+-
+-2.2.7 Management commands
+--------------------------
+-
+-* Menu:
+-
+-* Command -keyclone::          Clone a Key Entry in a Key Store
+-* Command -storepasswd::       Change the password protecting a Key Store
+-* Command -keypasswd::         Change the password protecting a Key Entry
+-* Command -delete::            Remove an entry in a Key Store
+-
+-
+-File: cp-tools.info,  Node: Command -keyclone,  Next: Command -storepasswd,  Prev: Management Commands,  Up: Management Commands
+-
+-2.2.7.1 The `-keyclone' command
+-...............................
+-
+-Use this command to clone an existing Key Entry and store it under a
+-new (different) Alias protecting, its private key material with
+-possibly a new password.
+-
+-`-alias ALIAS'
+-     For more details *note ALIAS: alias.
+-
+-`-dest ALIAS'
+-     Use this option to specify the new Alias which will be used to
+-     identify the cloned copy of the Key Entry.
+-
+-`-keypass PASSWORD'
+-     Use this option to specify the password which the tool will use to
+-     unlock the Key Entry associated with the designated Alias.
+-
+-     If this option is omitted, the tool will first attempt to unlock
+-     the Key Entry using the same password protecting the key store. If
+-     this fails, you will then be prompted to provide a password.
+-
+-`-new PASSWORD'
+-     Use this option to specify the password protecting the private key
+-     material of the newly cloned copy of the Key Entry.
+-
+-`-storetype STORE_TYPE'
+-     For more details *note STORE_TYPE: storetype.
+-
+-`-keystore URL'
+-     For more details *note URL: keystore.
+-
+-`-storepass PASSWORD'
+-     For more details *note PASSWORD: storepass.
+-
+-`-provider PROVIDER_CLASS_NAME'
+-     For more details *note PROVIDER_CLASS_NAME: provider.
+-
+-`-v'
+-     For more details *note verbose::.
+-
+-
+-
+-File: cp-tools.info,  Node: Command -storepasswd,  Next: Command -keypasswd,  Prev: Command -keyclone,  Up: Management Commands
+-
+-2.2.7.2 The `-storepasswd' command
+-..................................
+-
+-Use this command to change the password protecting a key store.
+-
+-`-new PASSWORD'
+-     The new, and different, password which will be used to protect the
+-     designated key store.
+-
+-`-storetype STORE_TYPE'
+-     For more details *note STORE_TYPE: storetype.
+-
+-`-keystore URL'
+-     For more details *note URL: keystore.
+-
+-`-storepass PASSWORD'
+-     For more details *note PASSWORD: storepass.
+-
+-`-provider PROVIDER_CLASS_NAME'
+-     For more details *note PROVIDER_CLASS_NAME: provider.
+-
+-`-v'
+-     For more details *note verbose::.
+-
+-
+-
+-File: cp-tools.info,  Node: Command -keypasswd,  Next: Command -delete,  Prev: Command -storepasswd,  Up: Management Commands
+-
+-2.2.7.3 The `-keypasswd' command
+-................................
+-
+-Use this command to change the password protecting the private key
+-material of a designated Key Entry.
+-
+-`-alias ALIAS'
+-     For more details *note ALIAS: alias.
+-
+-     Use this option to specify the password which the tool will use to
+-     unlock the Key Entry associated with the designated Alias.
+-
+-     If this option is omitted, the tool will first attempt to unlock
+-     the Key Entry using the same password protecting the key store. If
+-     this fails, you will then be prompted to provide a password.
+-
+-`-new PASSWORD'
+-     The new, and different, password which will be used to protect the
+-     private key material of the designated Key Entry.
+-
+-`-storetype STORE_TYPE'
+-     For more details *note STORE_TYPE: storetype.
+-
+-`-keystore URL'
+-     For more details *note URL: keystore.
+-
+-`-storepass PASSWORD'
+-     For more details *note PASSWORD: storepass.
+-
+-`-provider PROVIDER_CLASS_NAME'
+-     For more details *note PROVIDER_CLASS_NAME: provider.
+-
+-`-v'
+-     For more details *note verbose::.
+-
+-
+-
+-File: cp-tools.info,  Node: Command -delete,  Prev: Command -keypasswd,  Up: Management Commands
+-
+-2.2.7.4 The `-delete' command
+-.............................
+-
+-Use this command to delete a designated key store entry.
+-
+-`-alias ALIAS'
+-     For more details *note ALIAS: alias.
+-
+-`-storetype STORE_TYPE'
+-     For more details *note STORE_TYPE: storetype.
+-
+-`-keystore URL'
+-     For more details *note URL: keystore.
+-
+-`-storepass PASSWORD'
+-     For more details *note PASSWORD: storepass.
+-
+-`-provider PROVIDER_CLASS_NAME'
+-     For more details *note PROVIDER_CLASS_NAME: provider.
+-
+-`-v'
+-     For more details *note verbose::.
+-
+-
+-
+-File: cp-tools.info,  Node: Other Tools,  Next: I18N Issues,  Prev: Security Tools,  Up: Top
+-
+-3 Other Tools
+-*************
+-
+-This is a list of currently undocumented classpath tools: jar, javah,
+-gcjh, native2ascii, orbd, serialver, rmid, rmiregistry and tnameserv.
+-
+-* Menu:
+-
+-* jar Tool::                   Archive tool for Java archives
+-* javah Tool::                 A java header compiler
+-* gcjh Tool::                  A java header compiler (old version)
+-* native2ascii Tool::          An encoding converter
+-* orbd Tool::                  An object request broker daemon
+-* serialver Tool::             A serial version command
+-* rmid Tool::                  RMI activation daemon
+-* rmiregistry Tool::           Remote object registry
+-* tnameserv Tool::             Naming service
+-
+-
+-File: cp-tools.info,  Node: jar Tool,  Next: javah Tool,  Up: Other Tools
+-
+-3.1 The `jar' Tool
+-==================
+-
+-`gjar' is an implementation of Sun's jar utility that comes with the
+-JDK.
+-
+-   If any file is a directory then it is processed recursively.  The
+-manifest file name and the archive file name needs to be specified in
+-the same order the `-m' and `-f' flags are specified.
+-
+-   Operation mode:
+-
+-`-c'
+-     Create new archive.
+-
+-`-t'
+-     List table of contents for archive.
+-
+-`-x'
+-     Extract named (or all) files from archive.
+-
+-`-u'
+-     Update existing archive.
+-
+-`-i FILE'
+-     Compute archive index.
+-
+-   Operation modifiers:
+-
+-`-f FILE'
+-     Specify archive file name.
+-
+-`-0'
+-     Store only; use no ZIP compression.
+-
+-`-v'
+-     Generate verbose output on standard output.
+-
+-`-M'
+-     Do not create a manifest file for the entries.
+-
+-`-m MANIFEST'
+-     Include manifest information from specified MANIFEST file.
+-
+-   File name selection:
+-
+-`-C DIR FILE'
+-     Change to the DIR and include the following FILE.
+-
+-`-@'
+-     Read the names of the files to add to the archive from stdin.  This
+-     option is supported only in combination with `-c' or `-u'.  Non
+-     standard option added in the GCC version.
+-
+-   Standard options:
+-
+-`-help'
+-     Print help text, then exit.
+-
+-`-version'
+-     Print version number, then exit.
+-
+-`-JOPTION'
+-     Pass argument to the Java runtime.
+-
+-   java(1), ...
+-
+-
+-File: cp-tools.info,  Node: javah Tool,  Next: gcjh Tool,  Prev: jar Tool,  Up: Other Tools
+-
+-3.2 The `javah' Tool
+-====================
+-
+-The `gjavah' program is used to generate header files from class files.
+-It can generate both CNI and JNI header files, as well as stub
+-implementation files which can be used as a basis for implementing the
+-required native methods.
+-
+-`-d DIR'
+-     Set output directory.
+-
+-`-o FILE'
+-     Set output file (only one of `-d' or `-o' may be used).
+-
+-`-cmdfile FILE'
+-     Read command file.
+-
+-`-all DIR'
+-     Operate on all class files under directory DIR.
+-
+-`-stubs'
+-     Emit stub implementation.
+-
+-`-jni'
+-     Emit JNI stubs or header (default).
+-
+-`-cni'
+-     Emit CNI stubs or header (default JNI).
+-
+-`-verbose'
+-     Set verbose mode.
+-
+-`-force'
+-     Output files should always be written.
+-
+-   Class path options:
+-`-classpath PATH'
+-     Set the class path.
+-
+-`-IDIR'
+-     Add directory to class path.
+-
+-`-bootclasspath PATH'
+-     Set the boot class path.
+-
+-`-extdirs PATH'
+-     Set the extension directory path.
+-
+-   Standard options:
+-`-help'
+-     Print help text, then exit.
+-
+-`-version'
+-     Print version number, then exit.
+-
+-`-JOPTION'
+-     Pass argument to the Java runtime.
+-
+-   javac(1), ...
+-
+-
+-File: cp-tools.info,  Node: gcjh Tool,  Next: native2ascii Tool,  Prev: javah Tool,  Up: Other Tools
+-
+-3.3 The `gcjh' Tool
+-===================
+-
+-The `gcjh' program is used to generate header files from class files.
+-It can generate both CNI and JNI header files, as well as stub
+-implementation files which can be used as a basis for implementing the
+-required native methods.  It is similar to `javah' but has slightly
+-different command line options, and defaults to CNI.
+-
+-   See `javah' for a full description; this page only lists the
+-additional options provided by `gcjh'.
+-
+-   CNI text options
+-`-add TEXT'
+-     Insert TEXT into class body.
+-
+-`-append TEXT'
+-     Append TEXT after class declaration.
+-
+-`-friend TEXT'
+-     Insert TEXT as a `friend' declaration.
+-
+-`-prepend TEXT'
+-     Insert TEXT before start of class.
+-
+-   Compatibility options (unused)
+-`-td DIR'
+-`-M'
+-`-MM'
+-`-MD'
+-`-MMD'
+-     Unused compatibility option.
+-
+-   Standard options:
+-`-help'
+-     Print help text, then exit.
+-
+-`-version'
+-     Print version number, then exit.
+-
+-`-JOPTION'
+-     Pass argument to the Java runtime.
+-
+-   javac(1), javah(1), ...
+-
+-
+-File: cp-tools.info,  Node: native2ascii Tool,  Next: orbd Tool,  Prev: gcjh Tool,  Up: Other Tools
+-
+-3.4 The `native2ascii' Tool
+-===========================
+-
+-To be written ...
+-
+-`-encoding NAME'
+-     Set the encoding to use.
+-
+-`-reversed'
+-     Convert from encoding to native.
+-
+-   Standard options:
+-`-help'
+-     Print help text, then exit.
+-
+-`-version'
+-     Print version number, then exit.
+-
+-`-JOPTION'
+-     Pass argument to the Java runtime.
+-
+-   javac(1), ...
+-
+-
+-File: cp-tools.info,  Node: orbd Tool,  Next: serialver Tool,  Prev: native2ascii Tool,  Up: Other Tools
+-
+-3.5 The `orbd' object request broker daemon
+-===========================================
+-
+-To be written ...
+-
+-`-ORBInitialPort PORT'
+-     Port on which persistent naming service is to be started.
+-
+-`-ior FILE'
+-     File in which to store persistent naming service's IOR reference
+-
+-`-directory DIR'
+-     Directory in which to store persistent data.
+-
+-`-restart'
+-     Restart persistent naming service, clearing persistent naming
+-     database.
+-
+-   Standard options:
+-`-help'
+-     Print help text, then exit.
+-
+-`-version'
+-     Print version number, then exit.
+-
+-`-JOPTION'
+-     Pass argument to the Java runtime.
+-
+-   java(1), ...
+-
+-
+-File: cp-tools.info,  Node: serialver Tool,  Next: rmid Tool,  Prev: orbd Tool,  Up: Other Tools
+-
+-3.6 The `serialver' version command
+-===================================
+-
+-Print the serialVersionUID of the specified classes.
+-
+-`-classpath PATH'
+-     Class path to use to find classes.
+-
+-   Standard options:
+-`-help'
+-     Print help text, then exit.
+-
+-`-version'
+-     Print version number, then exit.
+-
+-`-JOPTION'
+-     Pass argument to the Java runtime.
+-
+-   javac(1), ...
+-
+-
+-File: cp-tools.info,  Node: rmid Tool,  Next: rmiregistry Tool,  Prev: serialver Tool,  Up: Other Tools
+-
+-3.7 The `rmid' RMI activation system daemon
+-===========================================
+-
+-`rmiregistry' starts a remote object registry on the current host.  If
+-no port number is specified, then port 1099 is used.
+-
+-   Activation process control:
+-`-port PORT'
+-     Port on which activation system is to be started.
+-
+-`-restart'
+-     Restart activation system, clearing persistent naming database, if
+-     any.
+-
+-`-stop'
+-     Stop activation system.
+-
+-   Persistence:
+-`-persistent'
+-     Make activation system persistent.
+-
+-`-directory DIR'
+-     Directory in which to store persistent data.
+-
+-   Debugging:
+-`-verbose'
+-     Log binding events to standard out.
+-
+-   Standard options:
+-`-help'
+-     Print help text, then exit.
+-
+-`-version'
+-     Print version number, then exit.
+-
+-`-JOPTION'
+-     Pass argument to the Java runtime.
+-
+-   java(1), ...
+-
+-
+-File: cp-tools.info,  Node: rmiregistry Tool,  Next: tnameserv Tool,  Prev: rmid Tool,  Up: Other Tools
+-
+-3.8 The `rmiregistry' Tool
+-==========================
+-
+-`grmiregistry' starts a remote object registry on the current host.  If
+-no port number is specified, then port 1099 is used.
+-
+-   Registry process control:
+-`-restart'
+-     Restart RMI naming service, clearing persistent naming database, if
+-     any.
+-
+-`-stop'
+-     Stop RMI naming service.
+-
+-   Persistence:
+-`-persistent'
+-     Make RMI naming service persistent.
+-
+-`-directory DIR'
+-     Directory in which to store persistent data.
+-
+-   Debugging:
+-`-verbose'
+-     Log binding events to standard out.
+-
+-   Standard options:
+-`-help'
+-     Print help text, then exit.
+-
+-`-version'
+-     Print version number, then exit.
+-
+-`-JOPTION'
+-     Pass argument to the Java runtime.
+-
+-   java(1), ...
+-
+-
+-File: cp-tools.info,  Node: tnameserv Tool,  Prev: rmiregistry Tool,  Up: Other Tools
+-
+-3.9 The `tnameserv' Tool
+-========================
+-
+-To be written ...
+-
+-`-ORBInitialPort PORT'
+-     Port on which naming service is to be started.
+-
+-`-ior FILE'
+-     File in which to store naming service's IOR reference.
+-
+-   Standard options:
+-`-help'
+-     Print help text, then exit.
+-
+-`-version'
+-     Print version number, then exit.
+-
+-`-JOPTION'
+-     Pass argument to the Java runtime.
+-
+-   java(1), ...
+-
+-
+-File: cp-tools.info,  Node: I18N Issues,  Prev: Other Tools,  Up: Top
+-
+-4 I18N Issues
+-*************
+-
+-Some tools -*note Security Tools::- allow using other than the English
+-language when prompting the User for input, and outputing messages.
+-This chapter describes the elements used to offer this support and how
+-they can be adapted for use with specific languages.
+-
+-* Menu:
+-
+-* Language Resources::         Where resources are located
+-* Message Formats::            How messages are internationalized
+-
+-
+-File: cp-tools.info,  Node: Language Resources,  Next: Message Formats,  Prev: I18N Issues,  Up: I18N Issues
+-
+-4.1 Language-specific resources
+-===============================
+-
+-The Tools use Java `ResourceBundle's to store messages, and message
+-templates they use at runtime to generate the message text itself,
+-depending on the locale in use at the time.
+-
+-   The Resource Bundles these tools use are essentially Java Properties
+-files consisting of a set of Name/Value pairs. The Name is the Propery
+-Name and the Value is a substitution string that is used when the code
+-references the associated Name. For example the following is a line in
+-a Resource Bundle used by the `keytool' Tool:
+-
+-     Command.23=A correct key password MUST be provided
+-
+-   When the tool needs to signal a mandatory but missing key password,
+-it would reference the property named `Command.23' and the message "`A
+-correct key password MUST be provided'" will be used instead. This
+-indirect referencing of "resources" permits replacing, as late as
+-possible, the English strings with strings in other languages, provided
+-of course Resource Bundles in those languages are provided.
+-
+-   For the GNU Classpath Tools described in this Guide, the Resource
+-Bundles are files named `messages[_ll[_CC[_VV]]].properties' where:
+-
+-LL
+-     Is the 2-letter code for the Language,
+-
+-CC
+-     Is the 2-letter code for the Region, and
+-
+-VV
+-     Is the 2-letter code for the Variant of the language.
+-
+-   The complete list of language codes can be found at Code for the
+-representation of names of languages
+-(http://ftp.ics.uci.edu/pub/ietf/http/related/iso639.txt). A similar
+-list for the region codes can be found at ISO 3166 Codes (Countries)
+-(http://userpage.chemie.fu-berlin.de/diverse/doc/ISO_3166.html).
+-
+-   The location of the Resource Bundles for the GNU Classpath Tools is
+-specific to each tool. The next table shows where these files are found
+-in a standard GNU Classpath distribution:
+-
+-`jarsigner'
+-     `gnu/classpath/tools/jarsigner'
+-
+-`keytool'
+-     `gnu/classpath/tools/keytool'
+-
+-   The collection of Resource Bundles in a location act as an inverted
+-tree with a parent-child relationship. For example suppose in the
+-`gnu/classpath/tools/keytool' there are 3 message bundles named:
+-
+-  1. `messages.properties'
+-
+-  2. `messages_fr.properties'
+-
+-  3. `messages_fr_FR.properties'
+-
+-   In the above example, bundle #1 will act as the parent of bundle #2,
+-which in turn will act as the parent for bundle #3. This ordering is
+-used by the Java runtime to choose which file to load based on the set
+-Locale. For example if the Locale is `fr_CH', `messages_fr.properties'
+-will be used because (a) `messages_fr_CH.properties' does not exist,
+-but (b) `messages_fr.properties' is the parent for the required bundle,
+-and it exists. As another example, suppose the Locale was set to
+-`en_AU'; then the tool will end up using `messages.properties' because
+-(a) `messages_en_AU.properties' does not exist, (b)
+-`messages_en.properties' which is the parent for the required bundle
+-does not exist, but (c) `messages.properties' exists and is the root of
+-the hierarchy.
+-
+-   You can see from the examples above that `messages.properties' is
+-the safety net that the Java runtime falls back to when failing to find
+-a specific bunlde and its parent(s). This file is always provided with
+-the Tool. In time, more localized versions will be included to cater
+-for other languages.
+-
+-   In the meantime, if you are willing to contribute localized versions
+-of these resources, grab the `messages.properties' for a specific tool;
+-translate it; save it with the appropriate language and region suffix
+-and mail it to `classpath@gnu.org'.
+-
+-
+-File: cp-tools.info,  Node: Message Formats,  Prev: Language Resources,  Up: I18N Issues
+-
+-4.2 Message formats
+-===================
+-
+-If you open any of the `messages.properties' described in the previous
+-section, you may see properties that look like so:
+-
+-     Command.67=Issuer: {0}
+-     Command.68=Serial number: {0,number}
+-     Command.69=Valid from: {0,date,full} - {0,time,full}
+-     Command.70=\ \ \ \ \ until: {0,date,full} - {0,time,full}
+-
+-   These are Message Formats used by the tools to customize a text
+-string that will then be used either as a prompt for User input or as
+-output.
+-
+-   If you are translating a `messages.properties' be careful not to
+-alter text between curly braces.
+-
+-
+-
+-Tag Table:
+-Node: Top447
+-Node: Applet Tools3896
+-Node: appletviewer Tool4469
+-Node: gcjwebplugin7584
+-Node: Security Tools7896
+-Node: jarsigner Tool8549
+-Node: Common jarsigner Options9596
+-Node: Signing Options10911
+-Node: Verification Options13493
+-Node: keytool Tool14081
+-Node: Getting Help18509
+-Node: Common keytool Options19253
+-Ref: alias19526
+-Ref: keyalg19908
+-Ref: keysize20138
+-Ref: validity20403
+-Ref: storetype20618
+-Ref: storepass20949
+-Ref: keystore21146
+-Ref: provider21689
+-Ref: file22096
+-Ref: verbose22567
+-Node: Distinguished Names22659
+-Ref: dn22853
+-Node: Add/Update Commands23916
+-Node: Command -genkey24444
+-Node: Command -import26852
+-Node: Command -selfcert29996
+-Node: Command -cacert32175
+-Node: Command -identitydb33228
+-Node: Export Commands33886
+-Node: Command -certreq34202
+-Node: Command -export36608
+-Node: Display Commands37805
+-Node: Command -list38137
+-Node: Command -printcert39270
+-Node: Management Commands39654
+-Node: Command -keyclone40086
+-Node: Command -storepasswd41489
+-Node: Command -keypasswd42218
+-Node: Command -delete43412
+-Node: Other Tools44035
+-Node: jar Tool44820
+-Node: javah Tool46212
+-Node: gcjh Tool47431
+-Node: native2ascii Tool48544
+-Node: orbd Tool49005
+-Node: serialver Tool49735
+-Node: rmid Tool50204
+-Node: rmiregistry Tool51145
+-Node: tnameserv Tool51985
+-Node: I18N Issues52475
+-Node: Language Resources52976
+-Node: Message Formats56639
+-
+-End Tag Table
+diff -Naur gcc-4.3.2.orig/libjava/classpath/doc/gappletviewer.1 gcc-4.3.2/libjava/classpath/doc/gappletviewer.1
+--- gcc-4.3.2.orig/libjava/classpath/doc/gappletviewer.1	2008-08-27 12:48:38.000000000 -0700
++++ gcc-4.3.2/libjava/classpath/doc/gappletviewer.1	1969-12-31 16:00:00.000000000 -0800
+@@ -1,237 +0,0 @@
+-.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+-.\"
+-.\" Standard preamble:
+-.\" ========================================================================
+-.de Sh \" Subsection heading
+-.br
+-.if t .Sp
+-.ne 5
+-.PP
+-\fB\\$1\fR
+-.PP
+-..
+-.de Sp \" Vertical space (when we can't use .PP)
+-.if t .sp .5v
+-.if n .sp
+-..
+-.de Vb \" Begin verbatim text
+-.ft CW
+-.nf
+-.ne \\$1
+-..
+-.de Ve \" End verbatim text
+-.ft R
+-.fi
+-..
+-.\" Set up some character translations and predefined strings.  \*(-- will
+-.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+-.\" double quote, and \*(R" will give a right double quote.  | will give a
+-.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used to
+-.\" do unbreakable dashes and therefore won't be available.  \*(C` and \*(C'
+-.\" expand to `' in nroff, nothing in troff, for use with C<>.
+-.tr \(*W-|\(bv\*(Tr
+-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+-.ie n \{\
+-.    ds -- \(*W-
+-.    ds PI pi
+-.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+-.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+-.    ds L" ""
+-.    ds R" ""
+-.    ds C` ""
+-.    ds C' ""
+-'br\}
+-.el\{\
+-.    ds -- \|\(em\|
+-.    ds PI \(*p
+-.    ds L" ``
+-.    ds R" ''
+-'br\}
+-.\"
+-.\" If the F register is turned on, we'll generate index entries on stderr for
+-.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+-.\" entries marked with X<> in POD.  Of course, you'll have to process the
+-.\" output yourself in some meaningful fashion.
+-.if \nF \{\
+-.    de IX
+-.    tm Index:\\$1\t\\n%\t"\\$2"
+-..
+-.    nr % 0
+-.    rr F
+-.\}
+-.\"
+-.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+-.\" way too many mistakes in technical documents.
+-.hy 0
+-.if n .na
+-.\"
+-.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+-.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+-.    \" fudge factors for nroff and troff
+-.if n \{\
+-.    ds #H 0
+-.    ds #V .8m
+-.    ds #F .3m
+-.    ds #[ \f1
+-.    ds #] \fP
+-.\}
+-.if t \{\
+-.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+-.    ds #V .6m
+-.    ds #F 0
+-.    ds #[ \&
+-.    ds #] \&
+-.\}
+-.    \" simple accents for nroff and troff
+-.if n \{\
+-.    ds ' \&
+-.    ds ` \&
+-.    ds ^ \&
+-.    ds , \&
+-.    ds ~ ~
+-.    ds /
+-.\}
+-.if t \{\
+-.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+-.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+-.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+-.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+-.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+-.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+-.\}
+-.    \" troff and (daisy-wheel) nroff accents
+-.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+-.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+-.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+-.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+-.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+-.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+-.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+-.ds ae a\h'-(\w'a'u*4/10)'e
+-.ds Ae A\h'-(\w'A'u*4/10)'E
+-.    \" corrections for vroff
+-.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+-.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+-.    \" for low resolution devices (crt and lpr)
+-.if \n(.H>23 .if \n(.V>19 \
+-\{\
+-.    ds : e
+-.    ds 8 ss
+-.    ds o a
+-.    ds d- d\h'-1'\(ga
+-.    ds D- D\h'-1'\(hy
+-.    ds th \o'bp'
+-.    ds Th \o'LP'
+-.    ds ae ae
+-.    ds Ae AE
+-.\}
+-.rm #[ #] #H #V #F C
+-.\" ========================================================================
+-.\"
+-.IX Title "GAPPLETVIEWER 1"
+-.TH GAPPLETVIEWER 1 "2008-08-27" "0.96-pre" "GNU"
+-.SH "NAME"
+-gappletviewer \- Load and runs an applet
+-.SH "SYNOPSIS"
+-.IX Header "SYNOPSIS"
+-appletviewer [\fI\s-1OPTION\s0\fR]... \fI\s-1URL\s0\fR... 
+-.PP
+-appletviewer [\fI\s-1OPTION\s0\fR]... \fB\-code\fR \fI\s-1CODE\s0\fR 
+-.PP
+-appletviewer [\fI\s-1OPTION\s0\fR]... \fB\-plugin\fR \fI\s-1INPUT\s0\fR,\fI\s-1OUTPUT\s0\fR
+-.SH "DESCRIPTION"
+-.IX Header "DESCRIPTION"
+-The \fBappletviewer\fR tool loads and runs an applet.
+-.PP
+-Use the first form to test applets specified by tag.  The \s-1URL\s0 should
+-resolve to an \s-1HTML\s0 document from which the \fBappletviewer\fR will
+-extract applet tags.  The \s-1APPLET\s0, \s-1EMBED\s0 and \s-1OBJECT\s0 tags are supported.
+-If a given document contains multiple applet tags, all the applets
+-will be loaded, with each applet appearing in its own window.
+-Likewise, when multiple URLs are specified, each applet tag instance
+-is given its own window.  If a given document contains no recognized
+-tags the \fBappletviewer\fR does nothing.
+-.PP
+-.Vb 1
+-\&        appletviewer http://www.gnu.org/software/classpath/
+-.Ve
+-.PP
+-Use the second form to test an applet in development.  This form
+-allows applet tag attributes to be supplied on the command line.  Only
+-one applet may be specified using the \fB\-code\fR option.  The
+-\&\fB\-code\fR option overrides the \s-1URL\s0 form \*(-- any URLs specified will
+-be ignored.
+-.PP
+-.Vb 1
+-\&        appletviewer -code Test.class -param datafile,data.txt
+-.Ve
+-.PP
+-\&\fBgcjwebplugin\fR uses the third form to communicate with the
+-\&\fBappletviewer\fR through named pipes.
+-.SH "OPTIONS"
+-.IX Header "OPTIONS"
+-\&\s-1URL\s0 \s-1OPTIONS\s0
+-.IP "\fB\-debug\fR" 4
+-.IX Item "-debug"
+-This option is not yet implemented but is provided for compatibility.
+-.IP "\fB\-encoding\fR \fI\s-1CHARSET\s0\fR" 4
+-.IX Item "-encoding CHARSET"
+-Use this option to specify an alternate character encoding for the
+-specified \s-1HTML\s0 page.
+-.PP
+-\&\s-1APPLET\s0 \s-1TAG\s0 \s-1OPTIONS\s0
+-.IP "\fB\-code\fR \fI\s-1CODE\s0\fR" 4
+-.IX Item "-code CODE"
+-Use the \fB\-code\fR option to specify the value of the applet tag
+-\&\fI\s-1CODE\s0\fR attribute.
+-.IP "\fB\-codebase\fR \fI\s-1CODEBASE\s0\fR" 4
+-.IX Item "-codebase CODEBASE"
+-Use the \fB\-codebase\fR option to specify the value of the applet tag
+-\&\fI\s-1CODEBASE\s0\fR attribute.
+-.IP "\fB\-archive\fR \fI\s-1ARCHIVE\s0\fR" 4
+-.IX Item "-archive ARCHIVE"
+-Use the \fB\-archive\fR option to specify the value of the applet tag
+-\&\fI\s-1ARCHIVE\s0\fR attribute.
+-.IP "\fB\-width\fR \fI\s-1WIDTH\s0\fR" 4
+-.IX Item "-width WIDTH"
+-Use the \fB\-width\fR option to specify the value of the applet tag
+-\&\fI\s-1WIDTH\s0\fR attribute.
+-.IP "\fB\-height\fR \fI\s-1HEIGHT\s0\fR" 4
+-.IX Item "-height HEIGHT"
+-Use the \fB\-height\fR option to specify the value of the applet tag
+-\&\fI\s-1HEIGHT\s0\fR attribute.
+-.IP "\fB\-param\fR \fI\s-1NAME\s0\fR\fB,\fR\fI\s-1VALUE\s0\fR" 4
+-.IX Item "-param NAME,VALUE"
+-Use the \fB\-param\fR option to specify values for the \fI\s-1NAME\s0\fR
+-and \fI\s-1VALUE\s0\fR attributes of an applet \s-1PARAM\s0 tag.
+-.PP
+-\&\s-1PLUGIN\s0 \s-1OPTION\s0
+-.IP "\fB\-plugin\fR \fI\s-1INPUT\s0\fR\fB,\fR\fI\s-1OUTPUT\s0\fR" 4
+-.IX Item "-plugin INPUT,OUTPUT"
+-\&\fBgcjwebplugin\fR uses the \fB\-plugin\fR option to specify the
+-named pipe the \fBappletviewer\fR should use for receiving commands
+-(\fI\s-1INPUT\s0\fR) and the one it should use for sending commands to
+-\&\fBgcjwebplugin\fR (\fI\s-1OUTPUT\s0\fR).
+-.PP
+-\&\s-1DEBUGGING\s0 \s-1OPTION\s0
+-.IP "\fB\-verbose\fR" 4
+-.IX Item "-verbose"
+-Use the \fB\-verbose\fR option to have the \fBappletviewer\fR print
+-debugging messages.
+-.PP
+-\&\s-1STANDARD\s0 \s-1OPTIONS\s0
+-.IP "\fB\-help\fR" 4
+-.IX Item "-help"
+-Use the \fB\-help\fR option to have the \fBappletviewer\fR print a
+-usage message, then exit.
+-.IP "\fB\-version\fR" 4
+-.IX Item "-version"
+-Use the \fB\-version\fR option to have the \fBappletviewer\fR print
+-its version, then exit.
+-.IP "\fB\-J\fR\fI\s-1OPTION\s0\fR" 4
+-.IX Item "-JOPTION"
+-Use the \fB\-J\fR option to pass \fI\s-1OPTION\s0\fR to the virtual machine that
+-will run the \fBappletviewer\fR.  Unlike other options, there must
+-not be a space between the \fB\-J\fR and \fI\s-1OPTION\s0\fR.
+-.SH "SEE ALSO"
+-.IX Header "SEE ALSO"
+diff -Naur gcc-4.3.2.orig/libjava/classpath/doc/gjar.1 gcc-4.3.2/libjava/classpath/doc/gjar.1
+--- gcc-4.3.2.orig/libjava/classpath/doc/gjar.1	2008-08-27 12:48:38.000000000 -0700
++++ gcc-4.3.2/libjava/classpath/doc/gjar.1	1969-12-31 16:00:00.000000000 -0800
+@@ -1,204 +0,0 @@
+-.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+-.\"
+-.\" Standard preamble:
+-.\" ========================================================================
+-.de Sh \" Subsection heading
+-.br
+-.if t .Sp
+-.ne 5
+-.PP
+-\fB\\$1\fR
+-.PP
+-..
+-.de Sp \" Vertical space (when we can't use .PP)
+-.if t .sp .5v
+-.if n .sp
+-..
+-.de Vb \" Begin verbatim text
+-.ft CW
+-.nf
+-.ne \\$1
+-..
+-.de Ve \" End verbatim text
+-.ft R
+-.fi
+-..
+-.\" Set up some character translations and predefined strings.  \*(-- will
+-.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+-.\" double quote, and \*(R" will give a right double quote.  | will give a
+-.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used to
+-.\" do unbreakable dashes and therefore won't be available.  \*(C` and \*(C'
+-.\" expand to `' in nroff, nothing in troff, for use with C<>.
+-.tr \(*W-|\(bv\*(Tr
+-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+-.ie n \{\
+-.    ds -- \(*W-
+-.    ds PI pi
+-.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+-.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+-.    ds L" ""
+-.    ds R" ""
+-.    ds C` ""
+-.    ds C' ""
+-'br\}
+-.el\{\
+-.    ds -- \|\(em\|
+-.    ds PI \(*p
+-.    ds L" ``
+-.    ds R" ''
+-'br\}
+-.\"
+-.\" If the F register is turned on, we'll generate index entries on stderr for
+-.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+-.\" entries marked with X<> in POD.  Of course, you'll have to process the
+-.\" output yourself in some meaningful fashion.
+-.if \nF \{\
+-.    de IX
+-.    tm Index:\\$1\t\\n%\t"\\$2"
+-..
+-.    nr % 0
+-.    rr F
+-.\}
+-.\"
+-.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+-.\" way too many mistakes in technical documents.
+-.hy 0
+-.if n .na
+-.\"
+-.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+-.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+-.    \" fudge factors for nroff and troff
+-.if n \{\
+-.    ds #H 0
+-.    ds #V .8m
+-.    ds #F .3m
+-.    ds #[ \f1
+-.    ds #] \fP
+-.\}
+-.if t \{\
+-.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+-.    ds #V .6m
+-.    ds #F 0
+-.    ds #[ \&
+-.    ds #] \&
+-.\}
+-.    \" simple accents for nroff and troff
+-.if n \{\
+-.    ds ' \&
+-.    ds ` \&
+-.    ds ^ \&
+-.    ds , \&
+-.    ds ~ ~
+-.    ds /
+-.\}
+-.if t \{\
+-.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+-.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+-.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+-.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+-.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+-.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+-.\}
+-.    \" troff and (daisy-wheel) nroff accents
+-.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+-.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+-.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+-.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+-.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+-.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+-.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+-.ds ae a\h'-(\w'a'u*4/10)'e
+-.ds Ae A\h'-(\w'A'u*4/10)'E
+-.    \" corrections for vroff
+-.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+-.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+-.    \" for low resolution devices (crt and lpr)
+-.if \n(.H>23 .if \n(.V>19 \
+-\{\
+-.    ds : e
+-.    ds 8 ss
+-.    ds o a
+-.    ds d- d\h'-1'\(ga
+-.    ds D- D\h'-1'\(hy
+-.    ds th \o'bp'
+-.    ds Th \o'LP'
+-.    ds ae ae
+-.    ds Ae AE
+-.\}
+-.rm #[ #] #H #V #F C
+-.\" ========================================================================
+-.\"
+-.IX Title "GJAR 1"
+-.TH GJAR 1 "2008-08-27" "0.96-pre" "GNU"
+-.SH "NAME"
+-gjar \- \- Archive tool for Java archives
+-.SH "SYNOPSIS"
+-.IX Header "SYNOPSIS"
+-gjar \fB\-ctxui\fR [\fI\s-1OPTIONS\s0\fR] \fIjar-file\fR [\fB\-C\fR \fI\s-1DIR\s0\fR \fI\s-1FILE\s0\fR] \fI\s-1FILE\s0\fR...
+-.SH "DESCRIPTION"
+-.IX Header "DESCRIPTION"
+-\&\fBgjar\fR is an implementation of Sun's jar utility that comes with
+-the \s-1JDK\s0.
+-.PP
+-If any file is a directory then it is processed recursively.  The
+-manifest file name and the archive file name needs to be specified in
+-the same order the \fB\-m\fR and \fB\-f\fR flags are specified.
+-.SH "OPTIONS"
+-.IX Header "OPTIONS"
+-Operation mode:
+-.IP "\fB\-c\fR" 4
+-.IX Item "-c"
+-Create new archive.
+-.IP "\fB\-t\fR" 4
+-.IX Item "-t"
+-List table of contents for archive.
+-.IP "\fB\-x\fR" 4
+-.IX Item "-x"
+-Extract named (or all) files from archive.
+-.IP "\fB\-u\fR" 4
+-.IX Item "-u"
+-Update existing archive.
+-.IP "\fB\-i\fR \fI\s-1FILE\s0\fR" 4
+-.IX Item "-i FILE"
+-Compute archive index.
+-.PP
+-Operation modifiers:
+-.IP "\fB\-f\fR \fI\s-1FILE\s0\fR" 4
+-.IX Item "-f FILE"
+-Specify archive file name.
+-.IP "\fB\-0\fR" 4
+-.IX Item "-0"
+-Store only; use no \s-1ZIP\s0 compression.
+-.IP "\fB\-v\fR" 4
+-.IX Item "-v"
+-Generate verbose output on standard output.
+-.IP "\fB\-M\fR" 4
+-.IX Item "-M"
+-Do not create a manifest file for the entries.
+-.IP "\fB\-m\fR \fImanifest\fR" 4
+-.IX Item "-m manifest"
+-Include manifest information from specified \fImanifest\fR file.
+-.PP
+-File name selection:
+-.IP "\fB\-C\fR \fI\s-1DIR\s0\fR\fB \fR\fI\s-1FILE\s0\fR" 4
+-.IX Item "-C DIR FILE"
+-Change to the \fI\s-1DIR\s0\fR and include the following \fI\s-1FILE\s0\fR.
+-.IP "\fB\-@\fR" 4
+-.IX Item "-@"
+-Read the names of the files to add to the archive from stdin.  This
+-option is supported only in combination with \fB\-c\fR or \fB\-u\fR.
+-Non standard option added in the \s-1GCC\s0 version.
+-.PP
+-Standard options:
+-.IP "\fB\-help\fR" 4
+-.IX Item "-help"
+-Print help text, then exit.
+-.IP "\fB\-version\fR" 4
+-.IX Item "-version"
+-Print version number, then exit.
+-.IP "\fB\-J\fR\fI\s-1OPTION\s0\fR" 4
+-.IX Item "-JOPTION"
+-Pass argument to the Java runtime.
+-.SH "SEE ALSO"
+-.IX Header "SEE ALSO"
+-\&\fIjava\fR\|(1), ...
+diff -Naur gcc-4.3.2.orig/libjava/classpath/doc/gjarsigner.1 gcc-4.3.2/libjava/classpath/doc/gjarsigner.1
+--- gcc-4.3.2.orig/libjava/classpath/doc/gjarsigner.1	2008-08-27 12:48:38.000000000 -0700
++++ gcc-4.3.2/libjava/classpath/doc/gjarsigner.1	1969-12-31 16:00:00.000000000 -0800
+@@ -1,209 +0,0 @@
+-.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+-.\"
+-.\" Standard preamble:
+-.\" ========================================================================
+-.de Sh \" Subsection heading
+-.br
+-.if t .Sp
+-.ne 5
+-.PP
+-\fB\\$1\fR
+-.PP
+-..
+-.de Sp \" Vertical space (when we can't use .PP)
+-.if t .sp .5v
+-.if n .sp
+-..
+-.de Vb \" Begin verbatim text
+-.ft CW
+-.nf
+-.ne \\$1
+-..
+-.de Ve \" End verbatim text
+-.ft R
+-.fi
+-..
+-.\" Set up some character translations and predefined strings.  \*(-- will
+-.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+-.\" double quote, and \*(R" will give a right double quote.  | will give a
+-.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used to
+-.\" do unbreakable dashes and therefore won't be available.  \*(C` and \*(C'
+-.\" expand to `' in nroff, nothing in troff, for use with C<>.
+-.tr \(*W-|\(bv\*(Tr
+-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+-.ie n \{\
+-.    ds -- \(*W-
+-.    ds PI pi
+-.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+-.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+-.    ds L" ""
+-.    ds R" ""
+-.    ds C` ""
+-.    ds C' ""
+-'br\}
+-.el\{\
+-.    ds -- \|\(em\|
+-.    ds PI \(*p
+-.    ds L" ``
+-.    ds R" ''
+-'br\}
+-.\"
+-.\" If the F register is turned on, we'll generate index entries on stderr for
+-.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+-.\" entries marked with X<> in POD.  Of course, you'll have to process the
+-.\" output yourself in some meaningful fashion.
+-.if \nF \{\
+-.    de IX
+-.    tm Index:\\$1\t\\n%\t"\\$2"
+-..
+-.    nr % 0
+-.    rr F
+-.\}
+-.\"
+-.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+-.\" way too many mistakes in technical documents.
+-.hy 0
+-.if n .na
+-.\"
+-.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+-.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+-.    \" fudge factors for nroff and troff
+-.if n \{\
+-.    ds #H 0
+-.    ds #V .8m
+-.    ds #F .3m
+-.    ds #[ \f1
+-.    ds #] \fP
+-.\}
+-.if t \{\
+-.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+-.    ds #V .6m
+-.    ds #F 0
+-.    ds #[ \&
+-.    ds #] \&
+-.\}
+-.    \" simple accents for nroff and troff
+-.if n \{\
+-.    ds ' \&
+-.    ds ` \&
+-.    ds ^ \&
+-.    ds , \&
+-.    ds ~ ~
+-.    ds /
+-.\}
+-.if t \{\
+-.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+-.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+-.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+-.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+-.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+-.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+-.\}
+-.    \" troff and (daisy-wheel) nroff accents
+-.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+-.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+-.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+-.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+-.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+-.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+-.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+-.ds ae a\h'-(\w'a'u*4/10)'e
+-.ds Ae A\h'-(\w'A'u*4/10)'E
+-.    \" corrections for vroff
+-.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+-.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+-.    \" for low resolution devices (crt and lpr)
+-.if \n(.H>23 .if \n(.V>19 \
+-\{\
+-.    ds : e
+-.    ds 8 ss
+-.    ds o a
+-.    ds d- d\h'-1'\(ga
+-.    ds D- D\h'-1'\(hy
+-.    ds th \o'bp'
+-.    ds Th \o'LP'
+-.    ds ae ae
+-.    ds Ae AE
+-.\}
+-.rm #[ #] #H #V #F C
+-.\" ========================================================================
+-.\"
+-.IX Title "GJARSIGNER 1"
+-.TH GJARSIGNER 1 "2008-08-27" "0.96-pre" "GNU"
+-.SH "NAME"
+-gjarsigner \- Java ARchive (JAR) file signing and verification tool
+-.SH "SYNOPSIS"
+-.IX Header "SYNOPSIS"
+-jarsigner [\fI\s-1OPTION\s0\fR]... \fI\s-1FILE\s0\fR \fI\s-1ALIAS\s0\fR
+-.PP
+-jarsigner \fB\-verify\fR [\fI\s-1OPTION\s0\fR]... \fI\s-1FILE\s0\fR
+-.SH "DESCRIPTION"
+-.IX Header "DESCRIPTION"
+-When the first form is used, the tool signs the designated \s-1JAR\s0 file. The second form, on the other hand, is used to verify a previously signed \s-1JAR\s0 file.
+-.PP
+-\&\fI\s-1FILE\s0\fR is the .JAR file to process; i.e. to sign if the first syntax form is used, or to verify if the second syntax form is used instead.
+-.PP
+-\&\fI\s-1ALIAS\s0\fR must be a known \fIAlias\fR of a \fIKey Entry\fR in the designated \fIKey Store\fR. The private key material associated with this \fIAlias\fR is then used for signing the designated .JAR file.
+-.SH "OPTIONS"
+-.IX Header "OPTIONS"
+-\fICommon options\fR
+-.IX Subsection "Common options"
+-.PP
+-The following options may be used when the tool is used for either signing, or verifying, a .JAR file.
+-.IP "\fB\-verbose\fR" 4
+-.IX Item "-verbose"
+-Use this option to force the tool to generate more verbose messages, during its processing.
+-.IP "\fB\-internalsf\fR" 4
+-.IX Item "-internalsf"
+-When present, the tool will include \-\-which otherwise it does not\*(-- the \f(CW\*(C`.SF\*(C'\fR file in the \f(CW\*(C`.DSA\*(C'\fR generated file.
+-.IP "\fB\-sectionsonly\fR" 4
+-.IX Item "-sectionsonly"
+-When present, the tool will include in the \f(CW\*(C`.SF\*(C'\fR generated file \-\-which otherwise it does not\*(-- a header containing a hash of the whole manifest file.  When that header is included, the tool can quickly check, during verification, if the hash (in the header) matches or not the manifest file.
+-.IP "\fB\-provider \s-1PROVIDER_CLASS_NAME\s0\fR" 4
+-.IX Item "-provider PROVIDER_CLASS_NAME"
+-A fully qualified class name of a \fISecurity Provider\fR to add to the current list of \fISecurity Providers\fR already installed in the \s-1JVM\s0 in\-use. If a provider class is specified with this option, and was successfully added to the runtime \-\-i.e. it was not already installed\*(-- then the tool will attempt to remove this \fISecurity Provider\fR before exiting.
+-.IP "\fB\-help\fR" 4
+-.IX Item "-help"
+-Prints a help text similar to this one.
+-.PP
+-\fISigning options\fR
+-.IX Subsection "Signing options"
+-.PP
+-The following options may be specified when using the tool for signing purposes.
+-.IP "\fB\-keystore\fR \fI\s-1URL\s0\fR" 4
+-.IX Item "-keystore URL"
+-Use this option to specify the location of the key store to use. The default value is a file \s-1URL\s0 referencing the file named \fI.keystore\fR located in the path returned by the call to \f(CW\*(C`java.lang.System#getProperty(String)\*(C'\fR using \f(CW\*(C`user.home\*(C'\fR as argument.
+-.Sp
+-If a \s-1URL\s0 was specified, but was found to be malformed \-\-e.g. missing protocol element\*(-- the tool will attempt to use the \s-1URL\s0 value as a file-name (with absolute or relative path\-name) of a key store \-\-as if the protocol was \f(CW\*(C`file:\*(C'\fR.
+-.IP "\fB\-storetype\fR \fI\s-1STORE_TYPE\s0\fR" 4
+-.IX Item "-storetype STORE_TYPE"
+-Use this option to specify the type of the key store to use. The default value, if this option is omitted, is that of the property \f(CW\*(C`keystore.type\*(C'\fR in the security properties file, which is obtained by invoking the static method call \f(CW\*(C`getDefaultType()\*(C'\fR in \f(CW\*(C`java.security.KeyStore\*(C'\fR.
+-.IP "\fB\-storepass\fR \fI\s-1PASSWORD\s0\fR" 4
+-.IX Item "-storepass PASSWORD"
+-Use this option to specify the password which will be used to unlock the key store. If this option is missing, the User will be prompted to provide a password.
+-.IP "\fB\-keypass\fR \fI\s-1PASSWORD\s0\fR" 4
+-.IX Item "-keypass PASSWORD"
+-Use this option to specify the password which the tool will use to unlock the \fIKey Entry\fR associated with the designated \fIAlias\fR.
+-.Sp
+-If this option is omitted, the tool will first attempt to unlock the \fIKey Entry\fR using the same password protecting the key store. If this fails, you will then be prompted to provide a password.
+-.IP "\fB\-sigfile\fR \fI\s-1NAME\s0\fR" 4
+-.IX Item "-sigfile NAME"
+-Use this option to designate a literal that will be used to construct file names for both the \f(CW\*(C`.SF\*(C'\fR and \f(CW\*(C`.DSA\*(C'\fR signature files. These files  will be generated, by the tool, and placed in the \fIMETA-INF\fR directory of the signed \s-1JAR\s0.  Permissible characters for \fI\s-1NAME\s0\fR must be in the range \*(L"a\-zA\-Z0\-9_\-\*(R".  All characters will be converted to upper-case ones.
+-.Sp
+-If this option is missing, the first eight characters of the \fI\s-1ALIAS\s0\fR argument will be used. When this is the case, any character in \fI\s-1ALIAS\s0\fR that is outside the permissible range of characters will be replaced by an underscore.
+-.IP "\fB\-signedjar\fR \fI\s-1FILE\s0\fR" 4
+-.IX Item "-signedjar FILE"
+-Use this option to specify the file name of the signed \s-1JAR\s0. If this option is omitted, then the signed \s-1JAR\s0 will be named the same as \fI\s-1FILE\s0\fR; i.e. the input \s-1JAR\s0 file will be replaced with the signed copy.
+-.PP
+-\fIVerification options\fR
+-.IX Subsection "Verification options"
+-.PP
+-The following options may be specified when using the tool for verification purposes.
+-.IP "\fB\-verify\fR" 4
+-.IX Item "-verify"
+-Use this option to indicate that the tool is to be used for verification purposes.
+-.IP "\fB\-certs\fR" 4
+-.IX Item "-certs"
+-This option is used in conjunction with the \fB\-verbose\fR option. When present, along with the \fB\-verbose\fR option, the tool will print more detailed information about the certificates of the signer(s) being processed.
+-.SH "SEE ALSO"
+-.IX Header "SEE ALSO"
+diff -Naur gcc-4.3.2.orig/libjava/classpath/doc/gjavah.1 gcc-4.3.2/libjava/classpath/doc/gjavah.1
+--- gcc-4.3.2.orig/libjava/classpath/doc/gjavah.1	2008-08-27 12:48:38.000000000 -0700
++++ gcc-4.3.2/libjava/classpath/doc/gjavah.1	1969-12-31 16:00:00.000000000 -0800
+@@ -1,200 +0,0 @@
+-.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+-.\"
+-.\" Standard preamble:
+-.\" ========================================================================
+-.de Sh \" Subsection heading
+-.br
+-.if t .Sp
+-.ne 5
+-.PP
+-\fB\\$1\fR
+-.PP
+-..
+-.de Sp \" Vertical space (when we can't use .PP)
+-.if t .sp .5v
+-.if n .sp
+-..
+-.de Vb \" Begin verbatim text
+-.ft CW
+-.nf
+-.ne \\$1
+-..
+-.de Ve \" End verbatim text
+-.ft R
+-.fi
+-..
+-.\" Set up some character translations and predefined strings.  \*(-- will
+-.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+-.\" double quote, and \*(R" will give a right double quote.  | will give a
+-.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used to
+-.\" do unbreakable dashes and therefore won't be available.  \*(C` and \*(C'
+-.\" expand to `' in nroff, nothing in troff, for use with C<>.
+-.tr \(*W-|\(bv\*(Tr
+-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+-.ie n \{\
+-.    ds -- \(*W-
+-.    ds PI pi
+-.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+-.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+-.    ds L" ""
+-.    ds R" ""
+-.    ds C` ""
+-.    ds C' ""
+-'br\}
+-.el\{\
+-.    ds -- \|\(em\|
+-.    ds PI \(*p
+-.    ds L" ``
+-.    ds R" ''
+-'br\}
+-.\"
+-.\" If the F register is turned on, we'll generate index entries on stderr for
+-.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+-.\" entries marked with X<> in POD.  Of course, you'll have to process the
+-.\" output yourself in some meaningful fashion.
+-.if \nF \{\
+-.    de IX
+-.    tm Index:\\$1\t\\n%\t"\\$2"
+-..
+-.    nr % 0
+-.    rr F
+-.\}
+-.\"
+-.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+-.\" way too many mistakes in technical documents.
+-.hy 0
+-.if n .na
+-.\"
+-.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+-.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+-.    \" fudge factors for nroff and troff
+-.if n \{\
+-.    ds #H 0
+-.    ds #V .8m
+-.    ds #F .3m
+-.    ds #[ \f1
+-.    ds #] \fP
+-.\}
+-.if t \{\
+-.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+-.    ds #V .6m
+-.    ds #F 0
+-.    ds #[ \&
+-.    ds #] \&
+-.\}
+-.    \" simple accents for nroff and troff
+-.if n \{\
+-.    ds ' \&
+-.    ds ` \&
+-.    ds ^ \&
+-.    ds , \&
+-.    ds ~ ~
+-.    ds /
+-.\}
+-.if t \{\
+-.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+-.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+-.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+-.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+-.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+-.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+-.\}
+-.    \" troff and (daisy-wheel) nroff accents
+-.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+-.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+-.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+-.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+-.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+-.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+-.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+-.ds ae a\h'-(\w'a'u*4/10)'e
+-.ds Ae A\h'-(\w'A'u*4/10)'E
+-.    \" corrections for vroff
+-.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+-.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+-.    \" for low resolution devices (crt and lpr)
+-.if \n(.H>23 .if \n(.V>19 \
+-\{\
+-.    ds : e
+-.    ds 8 ss
+-.    ds o a
+-.    ds d- d\h'-1'\(ga
+-.    ds D- D\h'-1'\(hy
+-.    ds th \o'bp'
+-.    ds Th \o'LP'
+-.    ds ae ae
+-.    ds Ae AE
+-.\}
+-.rm #[ #] #H #V #F C
+-.\" ========================================================================
+-.\"
+-.IX Title "GJAVAH 1"
+-.TH GJAVAH 1 "2008-08-27" "0.96-pre" "GNU"
+-.SH "NAME"
+-gjavah \- \- generate header files from Java class files
+-.SH "SYNOPSIS"
+-.IX Header "SYNOPSIS"
+-gjavah ...
+-.SH "DESCRIPTION"
+-.IX Header "DESCRIPTION"
+-The \fBgjavah\fR program is used to generate header files from class
+-files.  It can generate both \s-1CNI\s0 and \s-1JNI\s0 header files, as well as stub
+-implementation files which can be used as a basis for implementing the
+-required native methods.
+-.SH "OPTIONS"
+-.IX Header "OPTIONS"
+-.IP "\fB\-d\fR \fI\s-1DIR\s0\fR" 4
+-.IX Item "-d DIR"
+-Set output directory.
+-.IP "\fB\-o\fR \fI\s-1FILE\s0\fR" 4
+-.IX Item "-o FILE"
+-Set output file (only one of \fB\-d\fR or \fB\-o\fR may be used).
+-.IP "\fB\-cmdfile\fR \fI\s-1FILE\s0\fR" 4
+-.IX Item "-cmdfile FILE"
+-Read command file.
+-.IP "\fB\-all\fR \fI\s-1DIR\s0\fR" 4
+-.IX Item "-all DIR"
+-Operate on all class files under directory \fI\s-1DIR\s0\fR.
+-.IP "\fB\-stubs\fR" 4
+-.IX Item "-stubs"
+-Emit stub implementation.
+-.IP "\fB\-jni\fR" 4
+-.IX Item "-jni"
+-Emit \s-1JNI\s0 stubs or header (default).
+-.IP "\fB\-cni\fR" 4
+-.IX Item "-cni"
+-Emit \s-1CNI\s0 stubs or header (default \s-1JNI\s0).
+-.IP "\fB\-verbose\fR" 4
+-.IX Item "-verbose"
+-Set verbose mode.
+-.IP "\fB\-force\fR" 4
+-.IX Item "-force"
+-Output files should always be written.
+-.PP
+-Class path options:
+-.IP "\fB\-classpath\fR \fI\s-1PATH\s0\fR" 4
+-.IX Item "-classpath PATH"
+-Set the class path.
+-.IP "\fB\-I\fR\fI\s-1DIR\s0\fR" 4
+-.IX Item "-IDIR"
+-Add directory to class path.
+-.IP "\fB\-bootclasspath\fR \fI\s-1PATH\s0\fR" 4
+-.IX Item "-bootclasspath PATH"
+-Set the boot class path.
+-.IP "\fB\-extdirs\fR \fI\s-1PATH\s0\fR" 4
+-.IX Item "-extdirs PATH"
+-Set the extension directory path.
+-.PP
+-Standard options:
+-.IP "\fB\-help\fR" 4
+-.IX Item "-help"
+-Print help text, then exit.
+-.IP "\fB\-version\fR" 4
+-.IX Item "-version"
+-Print version number, then exit.
+-.IP "\fB\-J\fR\fI\s-1OPTION\s0\fR" 4
+-.IX Item "-JOPTION"
+-Pass argument to the Java runtime.
+-.SH "SEE ALSO"
+-.IX Header "SEE ALSO"
+-\&\fIjavac\fR\|(1), ...
+diff -Naur gcc-4.3.2.orig/libjava/classpath/doc/gkeytool.1 gcc-4.3.2/libjava/classpath/doc/gkeytool.1
+--- gcc-4.3.2.orig/libjava/classpath/doc/gkeytool.1	2008-08-27 12:48:38.000000000 -0700
++++ gcc-4.3.2/libjava/classpath/doc/gkeytool.1	1969-12-31 16:00:00.000000000 -0800
+@@ -1,685 +0,0 @@
+-.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+-.\"
+-.\" Standard preamble:
+-.\" ========================================================================
+-.de Sh \" Subsection heading
+-.br
+-.if t .Sp
+-.ne 5
+-.PP
+-\fB\\$1\fR
+-.PP
+-..
+-.de Sp \" Vertical space (when we can't use .PP)
+-.if t .sp .5v
+-.if n .sp
+-..
+-.de Vb \" Begin verbatim text
+-.ft CW
+-.nf
+-.ne \\$1
+-..
+-.de Ve \" End verbatim text
+-.ft R
+-.fi
+-..
+-.\" Set up some character translations and predefined strings.  \*(-- will
+-.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+-.\" double quote, and \*(R" will give a right double quote.  | will give a
+-.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used to
+-.\" do unbreakable dashes and therefore won't be available.  \*(C` and \*(C'
+-.\" expand to `' in nroff, nothing in troff, for use with C<>.
+-.tr \(*W-|\(bv\*(Tr
+-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+-.ie n \{\
+-.    ds -- \(*W-
+-.    ds PI pi
+-.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+-.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+-.    ds L" ""
+-.    ds R" ""
+-.    ds C` ""
+-.    ds C' ""
+-'br\}
+-.el\{\
+-.    ds -- \|\(em\|
+-.    ds PI \(*p
+-.    ds L" ``
+-.    ds R" ''
+-'br\}
+-.\"
+-.\" If the F register is turned on, we'll generate index entries on stderr for
+-.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+-.\" entries marked with X<> in POD.  Of course, you'll have to process the
+-.\" output yourself in some meaningful fashion.
+-.if \nF \{\
+-.    de IX
+-.    tm Index:\\$1\t\\n%\t"\\$2"
+-..
+-.    nr % 0
+-.    rr F
+-.\}
+-.\"
+-.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+-.\" way too many mistakes in technical documents.
+-.hy 0
+-.if n .na
+-.\"
+-.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+-.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+-.    \" fudge factors for nroff and troff
+-.if n \{\
+-.    ds #H 0
+-.    ds #V .8m
+-.    ds #F .3m
+-.    ds #[ \f1
+-.    ds #] \fP
+-.\}
+-.if t \{\
+-.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+-.    ds #V .6m
+-.    ds #F 0
+-.    ds #[ \&
+-.    ds #] \&
+-.\}
+-.    \" simple accents for nroff and troff
+-.if n \{\
+-.    ds ' \&
+-.    ds ` \&
+-.    ds ^ \&
+-.    ds , \&
+-.    ds ~ ~
+-.    ds /
+-.\}
+-.if t \{\
+-.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+-.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+-.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+-.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+-.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+-.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+-.\}
+-.    \" troff and (daisy-wheel) nroff accents
+-.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+-.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+-.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+-.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+-.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+-.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+-.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+-.ds ae a\h'-(\w'a'u*4/10)'e
+-.ds Ae A\h'-(\w'A'u*4/10)'E
+-.    \" corrections for vroff
+-.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+-.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+-.    \" for low resolution devices (crt and lpr)
+-.if \n(.H>23 .if \n(.V>19 \
+-\{\
+-.    ds : e
+-.    ds 8 ss
+-.    ds o a
+-.    ds d- d\h'-1'\(ga
+-.    ds D- D\h'-1'\(hy
+-.    ds th \o'bp'
+-.    ds Th \o'LP'
+-.    ds ae ae
+-.    ds Ae AE
+-.\}
+-.rm #[ #] #H #V #F C
+-.\" ========================================================================
+-.\"
+-.IX Title "GKEYTOOL 1"
+-.TH GKEYTOOL 1 "2008-08-27" "0.96-pre" "GNU"
+-.SH "NAME"
+-gkeytool \- Manage private keys and public certificates
+-.SH "SYNOPSIS"
+-.IX Header "SYNOPSIS"
+-keytool [\fI\s-1COMMAND\s0\fR] ...
+-.SH "DESCRIPTION"
+-.IX Header "DESCRIPTION"
+-Cryptographic credentials, in a Java environment, are usually stored in a \fIKey Store\fR. The Java \s-1SDK\s0 specifies a \fIKey Store\fR as a persistent container of two types of objects: \fIKey Entries\fR and \fITrusted Certificates\fR. The security tool \fBkeytool\fR is a Java-based application for managing those types of objects.
+-.PP
+-A \fIKey Entry\fR represents the private key part of a key-pair used in Public-Key Cryptography, and a signed X.509 certificate which authenticates the public key part for a known entity; i.e. the owner of the key\-pair. The X.509 certificate itself contains the public key part of the key\-pair.
+-.PP
+-A \fITrusted Certificate\fR is a signed X.509 certificate issued by a trusted entity. The \fITrust\fR in this context is relative to the User of the \fBkeytool\fR. In other words, the existence of a \fITrusted Certificate\fR in the \fIKey Store\fR processed by a \fBkeytool\fR command implies that the User trusts the \fIIssuer\fR of that \fITrusted Certificate\fR to also sign, and hence authenticates, other \fISubjects\fR the tool may process.
+-.PP
+-\&\fITrusted Certificates\fR are important because they allow the tool to mechanically construct \fIChains of Trust\fR starting from one of the \fITrusted Certificates\fR in a \fIKey Store\fR and ending with a certificate whose \fIIssuer\fR is potentially unknown. A valid chain is an ordered list, starting with a \fITrusted Certificate\fR (also called the \fIanchor\fR), ending with the target certificate, and satisfying the condition that the \fISubject\fR of certificate \f(CW\*(C`#i\*(C'\fR is the \fIIssuer\fR of certificate \f(CW\*(C`#i + 1\*(C'\fR.
+-.PP
+-The \fBkeytool\fR is invoked from the command line as follows:
+-.PP
+-.Vb 1
+-\&        keytool [COMMAND] ...
+-.Ve
+-.PP
+-Multiple \fI\s-1COMMAND\s0\fRs may be specified at once, each complete with its own options. \fBkeytool\fR will parse all the arguments, before processing, and executing, each \f(CW\*(C`COMMAND\*(C'\fR. If an exception occurs while executing one \fI\s-1COMMAND\s0\fR \fBkeytool\fR will abort. Note however that because the implementation of the tool uses code to parse command line options that also supports GNU-style options, you have to separate each command group with a double\-hyphen; e.g
+-.PP
+-.Vb 1
+-\&        keytool -list -- -printcert -alias mykey
+-.Ve
+-.SH "OPTIONS"
+-.IX Header "OPTIONS"
+-.IP "\- Add/Update commands" 4
+-.IX Item "- Add/Update commands"
+-.RS 4
+-.PD 0
+-.IP "\fB\-genkey [\fR\fI\s-1OPTION\s0\fR\fB]...\fR" 4
+-.IX Item "-genkey [OPTION]..."
+-.PD
+-Generate a new \fIKey Entry\fR, eventually creating a new key store.
+-.IP "\fB\-import [\fR\fI\s-1OPTION\s0\fR\fB]...\fR" 4
+-.IX Item "-import [OPTION]..."
+-Add, to a key store, \fIKey Entries\fR (private keys and certificate chains authenticating the public keys) and \fITrusted Certificates\fR (3rd party certificates which can be used as \fITrust Anchors\fR when building chains\-of\-trust).
+-.IP "\fB\-selfcert [\fR\fI\s-1OPTION\s0\fR\fB]...\fR" 4
+-.IX Item "-selfcert [OPTION]..."
+-Generate a new self-signed \fITrusted Certificate\fR.
+-.IP "\fB\-cacert [\fR\fI\s-1OPTION\s0\fR\fB]...\fR" 4
+-.IX Item "-cacert [OPTION]..."
+-Import a \s-1CA\s0 \fITrusted Certificate\fR.
+-.IP "\fB\-identitydb [\fR\fI\s-1OPTION\s0\fR\fB]...\fR" 4
+-.IX Item "-identitydb [OPTION]..."
+-\&\fB\s-1NOT\s0 \s-1IMPLEMENTED\s0 \s-1YET\s0\fR.Import a \s-1JDK\s0 1.1 style Identity Database.
+-.RE
+-.RS 4
+-.RE
+-.IP "\- Export commands" 4
+-.IX Item "- Export commands"
+-.RS 4
+-.PD 0
+-.IP "\fB\-certreq [\fR\fI\s-1OPTION\s0\fR\fB]...\fR" 4
+-.IX Item "-certreq [OPTION]..."
+-.PD
+-Issue a \fICertificate Signing Request\fR (\s-1CSR\s0) which can be then sent to a \fICertification Authority\fR (\s-1CA\s0) to issue a certificate signed (by the \s-1CA\s0) and authenticating the \fISubject\fR of the request.
+-.IP "\fB\-export [\fR\fI\s-1OPTION\s0\fR\fB]...\fR" 4
+-.IX Item "-export [OPTION]..."
+-Export a certificate from a key store.
+-.RE
+-.RS 4
+-.RE
+-.IP "\- Display commands" 4
+-.IX Item "- Display commands"
+-.RS 4
+-.PD 0
+-.IP "\fB\-list [\fR\fI\s-1OPTION\s0\fR\fB]...\fR" 4
+-.IX Item "-list [OPTION]..."
+-.PD
+-Print one or all certificates in a key store to \f(CW\*(C`STDOUT\*(C'\fR.
+-.IP "\fB\-printcert [\fR\fI\s-1OPTION\s0\fR\fB]...\fR" 4
+-.IX Item "-printcert [OPTION]..."
+-Print a human-readable form of a certificate, in a designated file, to \f(CW\*(C`STDOUT\*(C'\fR.
+-.RE
+-.RS 4
+-.RE
+-.IP "\- Management commands" 4
+-.IX Item "- Management commands"
+-.RS 4
+-.PD 0
+-.IP "\fB\-keyclone [\fR\fI\s-1OPTION\s0\fR\fB]...\fR" 4
+-.IX Item "-keyclone [OPTION]..."
+-.PD
+-Clone a \fIKey Entry\fR in a key store.
+-.IP "\fB\-storepasswd [\fR\fI\s-1OPTION\s0\fR\fB]...\fR" 4
+-.IX Item "-storepasswd [OPTION]..."
+-Change the password protecting a key store.
+-.IP "\fB\-keypasswd [\fR\fI\s-1OPTION\s0\fR\fB]...\fR" 4
+-.IX Item "-keypasswd [OPTION]..."
+-Change the password protecting a \fIKey Entry\fR in a key store.
+-.IP "\fB\-delete [\fR\fI\s-1OPTION\s0\fR\fB]...\fR" 4
+-.IX Item "-delete [OPTION]..."
+-Delete a \fIKey Entry\fR or a \fITrusted Certificate\fR from a key store.
+-.RE
+-.RS 4
+-.RE
+-.PP
+-\fICommon options\fR
+-.IX Subsection "Common options"
+-.PP
+-The following \fB\s-1OPTION\s0\fRs are used in more than one \fB\s-1COMMAND\s0\fR. They are described here to reduce redundancy.
+-.IP "\fB\-alias\fR \fIAlias\fR" 4
+-.IX Item "-alias Alias"
+-Every entry, be it a \fIKey Entry\fR or a \fITrusted Certificate\fR, in a key store is uniquely identified by a user-defined \fIAlias\fR string. Use this option to specify the \fIAlias\fR to use when referring to an entry in the key store. Unless specified otherwise, a default value of \f(CW\*(C`mykey\*(C'\fR shall be used when this option is omitted from the command line.
+-.IP "\fB\-keyalg\fR \fI\s-1ALGORITHM\s0\fR" 4
+-.IX Item "-keyalg ALGORITHM"
+-Use this option to specify the canonical name of the key-pair generation algorithm. The default value for this option is \f(CW\*(C`DSS\*(C'\fR (a synonym for the Digital Signature Algorithm also known as \s-1DSA\s0).
+-.IP "\fB\-keysize\fR \fI\s-1SIZE\s0\fR" 4
+-.IX Item "-keysize SIZE"
+-Use this option to specify the number of bits of the shared modulus (for both the public and private keys) to use when generating new keys. A default value of \f(CW1024\fR will be used if this option is omitted from the command line.
+-.IP "\fB\-validity\fR \fI\s-1DAY_COUNT\s0\fR" 4
+-.IX Item "-validity DAY_COUNT"
+-Use this option to specify the number of days a newly generated certificate will be valid for. The default value is \f(CW90\fR (days) if this option is omitted from the command line.
+-.IP "\fB\-storetype\fR \fI\s-1STORE_TYPE\s0\fR" 4
+-.IX Item "-storetype STORE_TYPE"
+-Use this option to specify the type of the key store to use. The default value, if this option is omitted, is that of the property \f(CW\*(C`keystore.type\*(C'\fR in the security properties file, which is obtained by invoking the static method call \f(CW\*(C`getDefaultType()\*(C'\fR in \f(CW\*(C`java.security.KeyStore\*(C'\fR.
+-.IP "\fB\-storepass\fR \fI\s-1PASSWORD\s0\fR" 4
+-.IX Item "-storepass PASSWORD"
+-Use this option to specify the password protecting the key store. If this option is omitted from the command line, you will be prompted to provide a password.
+-.IP "\fB\-keystore\fR \fI\s-1URL\s0\fR" 4
+-.IX Item "-keystore URL"
+-Use this option to specify the location of the key store to use. The default value is a file \s-1URL\s0 referencing the file named \fI.keystore\fR located in the path returned by the call to \f(CW\*(C`java.lang.System#getProperty(String)\*(C'\fR using \f(CW\*(C`user.home\*(C'\fR as argument.
+-.Sp
+-If a \s-1URL\s0 was specified, but was found to be malformed \-\-e.g. missing protocol element\*(-- the tool will attempt to use the \s-1URL\s0 value as a file-name (with absolute or relative path\-name) of a key store \-\-as if the protocol was \f(CW\*(C`file:\*(C'\fR.
+-.IP "\fB\-provider\fR \fI\s-1PROVIDER_CLASS_NAME\s0\fR" 4
+-.IX Item "-provider PROVIDER_CLASS_NAME"
+-A fully qualified class name of a \fISecurity Provider\fR to add to the current list of \fISecurity Providers\fR already installed in the \s-1JVM\s0 in\-use. If a provider class is specified with this option, and was successfully added to the runtime \-\-i.e. it was not already installed\*(-- then the tool will attempt to removed this \fISecurity Provider\fR before exiting.
+-.IP "\fB\-file\fR \fI\s-1FILE\s0\fR" 4
+-.IX Item "-file FILE"
+-Use this option to designate a file to use with a command. When specified with this option, the value is expected to be the fully qualified path of a file accessible by the File System. Depending on the command, the file may be used as input or as output. When this option is omitted from the command line, \f(CW\*(C`STDIN\*(C'\fR will be used instead, as the source of input, and \f(CW\*(C`STDOUT\*(C'\fR will be used instead as the output destination.
+-.IP "\fB\-v\fR" 4
+-.IX Item "-v"
+-Unless specified otherwise, use this option to enable more verbose output.
+-.PP
+-\fIAdd/Update commands\fR
+-.IX Subsection "Add/Update commands"
+-.PP
+-The \fB\-genkey\fR command
+-.IX Subsection "The -genkey command"
+-.PP
+-Use this command to generate a new key-pair (both private and public keys), and save these credentials in the key store as a \fIKey Entry\fR, associated with the designated (if was specified with the \fB\-alias\fR option) or default (if the \fB\-alias\fR option is omitted) \fIAlias\fR.
+-.PP
+-The private key material will be protected with a user-defined password (see \fB\-keypass\fR option). The public key on the other hand will be part of a self-signed X.509 certificate, which will form a 1\-element chain and will be saved in the key store.
+-.IP "\fB\-alias\fR \fI\s-1ALIAS\s0\fR" 4
+-.IX Item "-alias ALIAS"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-keyalg\fR \fI\s-1ALGORITHM\s0\fR" 4
+-.IX Item "-keyalg ALGORITHM"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-keysize\fR \fI\s-1KEY_SIZE\s0\fR" 4
+-.IX Item "-keysize KEY_SIZE"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-sigalg\fR \fI\s-1ALGORITHM\s0\fR" 4
+-.IX Item "-sigalg ALGORITHM"
+-The canonical name of the digital signature algorithm to use for signing certificates. If this option is omitted, a default value will be chosen based on the type of the key\-pair; i.e. the algorithm that ends up being used by the \-keyalg option. If the key-pair generation algorithm is \f(CW\*(C`DSA\*(C'\fR, the value for the signature algorithm will be \f(CW\*(C`SHA1withDSA\*(C'\fR. If on the other hand the key-pair generation algorithm is \f(CW\*(C`RSA\*(C'\fR, then the tool will use \f(CW\*(C`MD5withRSA\*(C'\fR as the signature algorithm.
+-.IP "\fB\-dname\fR \fI\s-1NAME\s0\fR" 4
+-.IX Item "-dname NAME"
+-This a mandatory value for the command. If no value is specified \-\-i.e. the \fB\-dname\fR option is omitted\*(-- the tool will prompt you to enter a \fIDistinguished Name\fR to use as both the \fIOwner\fR and \fIIssuer\fR of the generated self-signed certificate.
+-.Sp
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-keypass\fR \fI\s-1PASSWORD\s0\fR" 4
+-.IX Item "-keypass PASSWORD"
+-Use this option to specify the password which the tool will use to protect the newly created \fIKey Entry\fR.
+-.Sp
+-If this option is omitted, you will be prompted to provide a password.
+-.IP "\fB\-validity\fR \fI\s-1DAY_COUNT\s0\fR" 4
+-.IX Item "-validity DAY_COUNT"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-storetype\fR \fI\s-1STORE_TYPE\s0\fR" 4
+-.IX Item "-storetype STORE_TYPE"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-keystore\fR \fI\s-1URL\s0\fR" 4
+-.IX Item "-keystore URL"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-storepass\fR \fI\s-1PASSWORD\s0\fR" 4
+-.IX Item "-storepass PASSWORD"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-provider\fR \fI\s-1PROVIDER_CLASS_NAME\s0\fR" 4
+-.IX Item "-provider PROVIDER_CLASS_NAME"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-v\fR" 4
+-.IX Item "-v"
+-See \fICommon Options\fR for more details.
+-.PP
+-The \fB\-import\fR command
+-.IX Subsection "The -import command"
+-.PP
+-Use this command to read an X.509 certificate, or a PKCS#7 \fICertificate Reply\fR from a designated input source and incorporate the certificates into the key store.
+-.PP
+-If the \fIAlias\fR does not already exist in the key store, the tool treats the certificate read from the input source as a new \fITrusted Certificate\fR. It then attempts to discover a chain\-of\-trust, starting from that certificate and ending at another \fITrusted Certificate\fR, already stored in the key store. If the \fB\-trustcacerts\fR option is present, an additional key store, of type \f(CW\*(C`JKS\*(C'\fR named \fIcacerts\fR, and assumed to be present in \fI${\s-1JAVA_HOME\s0}/lib/security\fR will also be consulted if found \-\-\f(CW\*(C`${JAVA_HOME}\*(C'\fR refers to the location of an installed \fIJava Runtime Environment\fR (\s-1JRE\s0). If no chain-of-trust can be established, and unless the \f(CW\*(C`\-noprompt\*(C'\fR option has been specified, the certificate is printed to \f(CW\*(C`STDOUT\*(C'\fR and the user is prompted for a confirmation.
+-.PP
+-If \fIAlias\fR exists in the key store, the tool will treat the certificate(s) read from the input source as a \fICertificate Reply\fR, which can be a chain of certificates, that eventually would replace the chain of certificates associated with the \fIKey Entry\fR of that \fIAlias\fR. The substitution of the certificates only occurs if a chain-of-trust can be established between the bottom certificate of the chain read from the input file and the \fITrusted Certificates\fR already present in the key store. Again, if the \fB\-trustcacerts\fR option is specified, additional \fITrusted Certificates\fR in the same \fIcacerts\fR key store will be considered. If no chain-of-trust can be established, the operation will abort.
+-.IP "\fB\-alias\fR \fI\s-1ALIAS\s0\fR" 4
+-.IX Item "-alias ALIAS"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-file\fR \fI\s-1FILE\s0\fR" 4
+-.IX Item "-file FILE"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-keypass\fR \fI\s-1PASSWORD\s0\fR" 4
+-.IX Item "-keypass PASSWORD"
+-Use this option to specify the password which the tool will use to protect the \fIKey Entry\fR associated with the designated \fIAlias\fR, when replacing this \fIAlias\fR' chain of certificates with that found in the certificate reply.
+-.Sp
+-If this option is omitted, and the chain-of-trust for the certificate reply has been established, the tool will first attempt to unlock the \fIKey Entry\fR using the same password protecting the key store. If this fails, you will then be prompted to provide a password.
+-.IP "\fB\-noprompt\fR" 4
+-.IX Item "-noprompt"
+-Use this option to prevent the tool from prompting the user.
+-.IP "\fB\-trustcacerts\fR" 4
+-.IX Item "-trustcacerts"
+-Use this option to indicate to the tool that a key store, of type \f(CW\*(C`JKS\*(C'\fR, named \fIcacerts\fR, and usually located in \fIlib/security\fR in an installed \fIJava Runtime Environment\fR should be considered when trying to establish chain\-of\-trusts.
+-.IP "\fB\-storetype\fR \fI\s-1STORE_TYPE\s0\fR" 4
+-.IX Item "-storetype STORE_TYPE"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-keystore\fR \fI\s-1URL\s0\fR" 4
+-.IX Item "-keystore URL"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-storepass\fR \fI\s-1PASSWORD\s0\fR" 4
+-.IX Item "-storepass PASSWORD"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-provider\fR \fI\s-1PROVIDER_CLASS_NAME\s0\fR" 4
+-.IX Item "-provider PROVIDER_CLASS_NAME"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-v\fR" 4
+-.IX Item "-v"
+-See \fICommon Options\fR for more details.
+-.PP
+-The \fB\-selfcert\fR command
+-.IX Subsection "The -selfcert command"
+-.PP
+-Use this command to generate a self-signed X.509 version 1 certificate. The newly generated certificate will form a chain of one element which will replace the previous chain associated with the designated \fIAlias\fR (if \fB\-alias\fR option was specified), or the default \fIAlias\fR (if \fB\-alias\fR option was omitted).
+-.IP "\fB\-alias\fR \fI\s-1ALIAS\s0\fR" 4
+-.IX Item "-alias ALIAS"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-sigalg\fR \fI\s-1ALGORITHM\s0\fR" 4
+-.IX Item "-sigalg ALGORITHM"
+-The canonical name of the digital signature algorithm to use for signing the certificate. If this option is omitted, a default value will be chosen based on the type of the private key associated with the designated \fIAlias\fR. If the private key is a \f(CW\*(C`DSA\*(C'\fR one, the value for the signature algorithm will be \f(CW\*(C`SHA1withDSA\*(C'\fR. If on the other hand the private key is an \f(CW\*(C`RSA\*(C'\fR one, then the tool will use \f(CW\*(C`MD5withRSA\*(C'\fR as the signature algorithm.
+-.IP "\fB\-dname\fR \fI\s-1NAME\s0\fR" 4
+-.IX Item "-dname NAME"
+-Use this option to specify the \fIDistinguished Name\fR of the newly generated self-signed certificate. If this option is omitted, the existing \fIDistinguished Name\fR of the base certificate in the chain associated with the designated \fIAlias\fR will be used instead.
+-.Sp
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-validity\fR \fI\s-1DAY_COUNT\s0\fR" 4
+-.IX Item "-validity DAY_COUNT"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-keypass\fR \fI\s-1PASSWORD\s0\fR" 4
+-.IX Item "-keypass PASSWORD"
+-Use this option to specify the password which the tool will use to unlock the \fIKey Entry\fR associated with the designated \fIAlias\fR.
+-.Sp
+-If this option is omitted, the tool will first attempt to unlock the \fIKey Entry\fR using the same password protecting the key store. If this fails, you will then be prompted to provide a password.
+-.IP "\fB\-storetype\fR \fI\s-1STORE_TYPE\s0\fR" 4
+-.IX Item "-storetype STORE_TYPE"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-keystore\fR \fI\s-1URL\s0\fR" 4
+-.IX Item "-keystore URL"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-storepass\fR \fI\s-1PASSWORD\s0\fR" 4
+-.IX Item "-storepass PASSWORD"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-provider\fR \fI\s-1PROVIDER_CLASS_NAME\s0\fR" 4
+-.IX Item "-provider PROVIDER_CLASS_NAME"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-v\fR" 4
+-.IX Item "-v"
+-See \fICommon Options\fR for more details.
+-.PP
+-The \fB\-cacert\fR command
+-.IX Subsection "The -cacert command"
+-.PP
+-Use this command to import, a \s-1CA\s0 certificate and add it to the key store as a \fITrusted Certificate\fR. The \fIAlias\fR for this new entry will be constructed from the \s-1FILE\s0's base-name after replacing hyphens and dots with underscores.
+-.PP
+-This command is useful when used in a script that recursively visits a directory of \s-1CA\s0 certificates to populate a \f(CW\*(C`cacerts.gkr\*(C'\fR \fIKey Store\fR of trusted certificates which can then be used commands that specify the \fB\-trustcacerts\fR option.
+-.IP "\fB\-file\fR \fI\s-1FILE\s0\fR" 4
+-.IX Item "-file FILE"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-storetype\fR \fI\s-1STORE_TYPE\s0\fR" 4
+-.IX Item "-storetype STORE_TYPE"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-keystore\fR \fI\s-1URL\s0\fR" 4
+-.IX Item "-keystore URL"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-storepass\fR \fI\s-1PASSWORD\s0\fR" 4
+-.IX Item "-storepass PASSWORD"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-provider\fR \fI\s-1PROVIDER_CLASS_NAME\s0\fR" 4
+-.IX Item "-provider PROVIDER_CLASS_NAME"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-v\fR" 4
+-.IX Item "-v"
+-See \fICommon Options\fR for more details.
+-.PP
+-The \fB\-identitydb\fR command
+-.IX Subsection "The -identitydb command"
+-.PP
+-\&\fB\s-1NOT\s0 \s-1IMPLEMENTED\s0 \s-1YET\s0\fR.
+-.PP
+-Use this command to import a \s-1JDK\s0 1.1 style Identity Database.
+-.IP "\fB\-file\fR \fI\s-1FILE\s0\fR" 4
+-.IX Item "-file FILE"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-storetype\fR \fI\s-1STORE_TYPE\s0\fR" 4
+-.IX Item "-storetype STORE_TYPE"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-keystore\fR \fI\s-1URL\s0\fR" 4
+-.IX Item "-keystore URL"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-storepass\fR \fI\s-1PASSWORD\s0\fR" 4
+-.IX Item "-storepass PASSWORD"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-provider\fR \fI\s-1PROVIDER_CLASS_NAME\s0\fR" 4
+-.IX Item "-provider PROVIDER_CLASS_NAME"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-v\fR" 4
+-.IX Item "-v"
+-See \fICommon Options\fR for more details.
+-.PP
+-\fIExport commands\fR
+-.IX Subsection "Export commands"
+-.PP
+-The \fB\-certreq\fR command
+-.IX Subsection "The -certreq command"
+-.PP
+-Use this command to generate a PKCS#10 \fICertificate Signing Request\fR (\s-1CSR\s0) and write it to a designated output destination. The contents of the destination should look something like the following:
+-.PP
+-.Vb 6
+-\&        -----BEGIN NEW CERTIFICATE REQUEST-----
+-\&        MI...QAwXzEUMBIGA1UEAwwLcnNuQGdudS5vcmcxGzAZBgNVBAoMElUg
+-\&        Q2...A0GA1UEBwwGU3lkbmV5MQwwCgYDVQQIDANOU1cxCzAJBgNVBACC
+-\&        ...
+-\&        FC...IVwNVOfQLRX+O5kAhQ/a4RTZme2L8PnpvgRwrf7Eg8D6w==
+-\&        -----END NEW CERTIFICATE REQUEST-----
+-.Ve
+-.PP
+-\&\fB\s-1IMPORTANT\s0\fR: Some documentation (e.g. \s-1RSA\s0 examples) claims that the \f(CW\*(C`Attributes\*(C'\fR field, in the \s-1CSR\s0 is \f(CW\*(C`OPTIONAL\*(C'\fR while \s-1RFC\-2986\s0 implies the opposite. This implementation considers this field, by default, as \f(CW\*(C`OPTIONAL\*(C'\fR, unless the option \fB\-attributes\fR is specified on the command line.
+-.IP "\fB\-alias\fR \fI\s-1ALIAS\s0\fR" 4
+-.IX Item "-alias ALIAS"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-sigalg\fR \fI\s-1ALGORITHM\s0\fR" 4
+-.IX Item "-sigalg ALGORITHM"
+-The canonical name of the digital signature algorithm to use for signing the certificate. If this option is omitted, a default value will be chosen based on the type of the private key associated with the designated \fIAlias\fR. If the private key is a \f(CW\*(C`DSA\*(C'\fR one, the value for the signature algorithm will be \f(CW\*(C`SHA1withDSA\*(C'\fR. If on the other hand the private key is an \f(CW\*(C`RSA\*(C'\fR one, then the tool will use \f(CW\*(C`MD5withRSA\*(C'\fR as the signature algorithm.
+-.IP "\fB\-file\fR \fI\s-1FILE\s0\fR" 4
+-.IX Item "-file FILE"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-keypass\fR \fI\s-1PASSWORD\s0\fR" 4
+-.IX Item "-keypass PASSWORD"
+-Use this option to specify the password which the tool will use to unlock the \fIKey Entry\fR associated with the designated \fIAlias\fR.
+-.Sp
+-If this option is omitted, the tool will first attempt to unlock the \fIKey Entry\fR using the same password protecting the key store. If this fails, you will then be prompted to provide a password.
+-.IP "\fB\-storetype\fR \fI\s-1STORE_TYPE\s0\fR" 4
+-.IX Item "-storetype STORE_TYPE"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-keystore\fR \fI\s-1URL\s0\fR" 4
+-.IX Item "-keystore URL"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-storepass\fR \fI\s-1PASSWORD\s0\fR" 4
+-.IX Item "-storepass PASSWORD"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-provider\fR \fI\s-1PROVIDER_CLASS_NAME\s0\fR" 4
+-.IX Item "-provider PROVIDER_CLASS_NAME"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-v\fR" 4
+-.IX Item "-v"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-attributes\fR" 4
+-.IX Item "-attributes"
+-Use this option to force the tool to encode a \f(CW\*(C`NULL\*(C'\fR \s-1DER\s0 value in the \s-1CSR\s0 as the value of the \f(CW\*(C`Attributes\*(C'\fR field.
+-.PP
+-The \fB\-export\fR command
+-.IX Subsection "The -export command"
+-.PP
+-Use this command to export a certificate stored in a key store to a designated output destination, either in binary format (if the \fB\-v\fR option is specified), or in \s-1RFC\-1421\s0 compliant encoding (if the \fB\-rfc\fR option is specified instead).
+-.IP "\fB\-alias\fR \fI\s-1ALIAS\s0\fR" 4
+-.IX Item "-alias ALIAS"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-file\fR \fI\s-1FILE\s0\fR" 4
+-.IX Item "-file FILE"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-storetype\fR \fI\s-1STORE_TYPE\s0\fR" 4
+-.IX Item "-storetype STORE_TYPE"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-keystore\fR \fI\s-1URL\s0\fR" 4
+-.IX Item "-keystore URL"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-storepass\fR \fI\s-1PASSWORD\s0\fR" 4
+-.IX Item "-storepass PASSWORD"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-provider\fR \fI\s-1PROVIDER_CLASS_NAME\s0\fR" 4
+-.IX Item "-provider PROVIDER_CLASS_NAME"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-rfc\fR" 4
+-.IX Item "-rfc"
+-Use \s-1RFC\-1421\s0 specifications when encoding the output.
+-.IP "\fB\-v\fR" 4
+-.IX Item "-v"
+-Output the certificate in binary \s-1DER\s0 encoding. This is the default output format of the command if neither \fB\-rfc\fR nor \f(CW\*(C`\-v\*(C'\fR options were detected on the command line. If both this option and the \fB\-rfc\fR option are detected on the command line, the tool will opt for the \s-1RFC\-1421\s0 style encoding.
+-.PP
+-\fIDisplay commands\fR
+-.IX Subsection "Display commands"
+-.PP
+-The \fB\-list\fR command
+-.IX Subsection "The -list command"
+-.PP
+-Use this command to print one or all of a key store entries to \f(CW\*(C`STDOUT\*(C'\fR. Usually this command will only print a \fIfingerprint\fR of the certificate, unless either the \fB\-rfc\fR or the \fB\-v\fR option is specified.
+-.IP "\fB\-alias\fR \fI\s-1ALIAS\s0\fR" 4
+-.IX Item "-alias ALIAS"
+-If this option is omitted, the tool will print \s-1ALL\s0 the entries found in the key store.
+-.Sp
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-storetype\fR \fI\s-1STORE_TYPE\s0\fR" 4
+-.IX Item "-storetype STORE_TYPE"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-keystore\fR \fI\s-1URL\s0\fR" 4
+-.IX Item "-keystore URL"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-storepass\fR \fI\s-1PASSWORD\s0\fR" 4
+-.IX Item "-storepass PASSWORD"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-provider\fR \fI\s-1PROVIDER_CLASS_NAME\s0\fR" 4
+-.IX Item "-provider PROVIDER_CLASS_NAME"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-rfc\fR" 4
+-.IX Item "-rfc"
+-Use \s-1RFC\-1421\s0 specifications when encoding the output.
+-.IP "\fB\-v\fR" 4
+-.IX Item "-v"
+-Output the certificate in human-readable format. If both this option and the \fB\-rfc\fR option are detected on the command line, the tool will opt for the human-readable form and will not abort the command.
+-.PP
+-The \fB\-printcert\fR command
+-.IX Subsection "The -printcert command"
+-.PP
+-Use this command to read a certificate from a designated input source and print it to \f(CW\*(C`STDOUT\*(C'\fR in a human-readable form.
+-.IP "\fB\-file\fR \fI\s-1FILE\s0\fR" 4
+-.IX Item "-file FILE"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-v\fR" 4
+-.IX Item "-v"
+-See \fICommon Options\fR for more details.
+-.PP
+-\fIManagement commands\fR
+-.IX Subsection "Management commands"
+-.PP
+-The \fB\-keyclone\fR command
+-.IX Subsection "The -keyclone command"
+-.PP
+-Use this command to clone an existing \fIKey Entry\fR and store it under a new (different) \fIAlias\fR protecting, its private key material with possibly a new password.
+-.IP "\fB\-alias\fR \fI\s-1ALIAS\s0\fR" 4
+-.IX Item "-alias ALIAS"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-dest\fR \fI\s-1ALIAS\s0\fR" 4
+-.IX Item "-dest ALIAS"
+-Use this option to specify the new \fIAlias\fR which will be used to identify the cloned copy of the \fIKey Entry\fR.
+-.IP "\fB\-keypass\fR \fI\s-1PASSWORD\s0\fR" 4
+-.IX Item "-keypass PASSWORD"
+-Use this option to specify the password which the tool will use to unlock the \fIKey Entry\fR associated with the designated \fIAlias\fR.
+-.Sp
+-If this option is omitted, the tool will first attempt to unlock the \fIKey Entry\fR using the same password protecting the key store. If this fails, you will then be prompted to provide a password.
+-.IP "\fB\-new\fR \fI\s-1PASSWORD\s0\fR" 4
+-.IX Item "-new PASSWORD"
+-Use this option to specify the password protecting the private key material of the newly cloned copy of the \fIKey Entry\fR.
+-.IP "\fB\-storetype\fR \fI\s-1STORE_TYPE\s0\fR" 4
+-.IX Item "-storetype STORE_TYPE"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-keystore\fR \fI\s-1URL\s0\fR" 4
+-.IX Item "-keystore URL"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-storepass\fR \fI\s-1PASSWORD\s0\fR" 4
+-.IX Item "-storepass PASSWORD"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-provider\fR \fI\s-1PROVIDER_CLASS_NAME\s0\fR" 4
+-.IX Item "-provider PROVIDER_CLASS_NAME"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-v\fR" 4
+-.IX Item "-v"
+-See \fICommon Options\fR for more details.
+-.PP
+-The \fB\-storepasswd\fR command
+-.IX Subsection "The -storepasswd command"
+-.PP
+-Use this command to change the password protecting a key store.
+-.IP "\fB\-new\fR \fI\s-1PASSWORD\s0\fR" 4
+-.IX Item "-new PASSWORD"
+-The new, and different, password which will be used to protect the designated key store.
+-.IP "\fB\-storetype\fR \fI\s-1STORE_TYPE\s0\fR" 4
+-.IX Item "-storetype STORE_TYPE"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-keystore\fR \fI\s-1URL\s0\fR" 4
+-.IX Item "-keystore URL"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-storepass\fR \fI\s-1PASSWORD\s0\fR" 4
+-.IX Item "-storepass PASSWORD"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-provider\fR \fI\s-1PROVIDER_CLASS_NAME\s0\fR" 4
+-.IX Item "-provider PROVIDER_CLASS_NAME"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-v\fR" 4
+-.IX Item "-v"
+-See \fICommon Options\fR for more details.
+-.PP
+-The \fB\-keypasswd\fR command
+-.IX Subsection "The -keypasswd command"
+-.PP
+-Use this command to change the password protecting the private key material of a designated \fIKey Entry\fR.
+-.IP "\fB\-alias\fR \fI\s-1ALIAS\s0\fR" 4
+-.IX Item "-alias ALIAS"
+-See \fICommon Options\fR for more details.
+-.Sp
+-Use this option to specify the password which the tool will use to unlock the \fIKey Entry\fR associated with the designated \fIAlias\fR.
+-.Sp
+-If this option is omitted, the tool will first attempt to unlock the \fIKey Entry\fR using the same password protecting the key store. If this fails, you will then be prompted to provide a password.
+-.IP "\fB\-new\fR \fI\s-1PASSWORD\s0\fR" 4
+-.IX Item "-new PASSWORD"
+-The new, and different, password which will be used to protect the private key material of the designated \fIKey Entry\fR.
+-.IP "\fB\-storetype\fR \fI\s-1STORE_TYPE\s0\fR" 4
+-.IX Item "-storetype STORE_TYPE"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-keystore\fR \fI\s-1URL\s0\fR" 4
+-.IX Item "-keystore URL"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-storepass\fR \fI\s-1PASSWORD\s0\fR" 4
+-.IX Item "-storepass PASSWORD"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-provider\fR \fI\s-1PROVIDER_CLASS_NAME\s0\fR" 4
+-.IX Item "-provider PROVIDER_CLASS_NAME"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-v\fR" 4
+-.IX Item "-v"
+-See \fICommon Options\fR for more details.
+-.PP
+-The \fB\-delete\fR command
+-.IX Subsection "The -delete command"
+-.PP
+-Use this command to delete a designated key store entry.
+-.IP "\fB\-alias\fR \fI\s-1ALIAS\s0\fR" 4
+-.IX Item "-alias ALIAS"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-storetype\fR \fI\s-1STORE_TYPE\s0\fR" 4
+-.IX Item "-storetype STORE_TYPE"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-keystore\fR \fI\s-1URL\s0\fR" 4
+-.IX Item "-keystore URL"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-storepass\fR \fI\s-1PASSWORD\s0\fR" 4
+-.IX Item "-storepass PASSWORD"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-provider\fR \fI\s-1PROVIDER_CLASS_NAME\s0\fR" 4
+-.IX Item "-provider PROVIDER_CLASS_NAME"
+-See \fICommon Options\fR for more details.
+-.IP "\fB\-v\fR" 4
+-.IX Item "-v"
+-See \fICommon Options\fR for more details.
+-.SH "SEE ALSO"
+-.IX Header "SEE ALSO"
+diff -Naur gcc-4.3.2.orig/libjava/classpath/doc/gnative2ascii.1 gcc-4.3.2/libjava/classpath/doc/gnative2ascii.1
+--- gcc-4.3.2.orig/libjava/classpath/doc/gnative2ascii.1	2008-08-27 12:48:38.000000000 -0700
++++ gcc-4.3.2/libjava/classpath/doc/gnative2ascii.1	1969-12-31 16:00:00.000000000 -0800
+@@ -1,162 +0,0 @@
+-.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+-.\"
+-.\" Standard preamble:
+-.\" ========================================================================
+-.de Sh \" Subsection heading
+-.br
+-.if t .Sp
+-.ne 5
+-.PP
+-\fB\\$1\fR
+-.PP
+-..
+-.de Sp \" Vertical space (when we can't use .PP)
+-.if t .sp .5v
+-.if n .sp
+-..
+-.de Vb \" Begin verbatim text
+-.ft CW
+-.nf
+-.ne \\$1
+-..
+-.de Ve \" End verbatim text
+-.ft R
+-.fi
+-..
+-.\" Set up some character translations and predefined strings.  \*(-- will
+-.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+-.\" double quote, and \*(R" will give a right double quote.  | will give a
+-.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used to
+-.\" do unbreakable dashes and therefore won't be available.  \*(C` and \*(C'
+-.\" expand to `' in nroff, nothing in troff, for use with C<>.
+-.tr \(*W-|\(bv\*(Tr
+-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+-.ie n \{\
+-.    ds -- \(*W-
+-.    ds PI pi
+-.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+-.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+-.    ds L" ""
+-.    ds R" ""
+-.    ds C` ""
+-.    ds C' ""
+-'br\}
+-.el\{\
+-.    ds -- \|\(em\|
+-.    ds PI \(*p
+-.    ds L" ``
+-.    ds R" ''
+-'br\}
+-.\"
+-.\" If the F register is turned on, we'll generate index entries on stderr for
+-.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+-.\" entries marked with X<> in POD.  Of course, you'll have to process the
+-.\" output yourself in some meaningful fashion.
+-.if \nF \{\
+-.    de IX
+-.    tm Index:\\$1\t\\n%\t"\\$2"
+-..
+-.    nr % 0
+-.    rr F
+-.\}
+-.\"
+-.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+-.\" way too many mistakes in technical documents.
+-.hy 0
+-.if n .na
+-.\"
+-.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+-.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+-.    \" fudge factors for nroff and troff
+-.if n \{\
+-.    ds #H 0
+-.    ds #V .8m
+-.    ds #F .3m
+-.    ds #[ \f1
+-.    ds #] \fP
+-.\}
+-.if t \{\
+-.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+-.    ds #V .6m
+-.    ds #F 0
+-.    ds #[ \&
+-.    ds #] \&
+-.\}
+-.    \" simple accents for nroff and troff
+-.if n \{\
+-.    ds ' \&
+-.    ds ` \&
+-.    ds ^ \&
+-.    ds , \&
+-.    ds ~ ~
+-.    ds /
+-.\}
+-.if t \{\
+-.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+-.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+-.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+-.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+-.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+-.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+-.\}
+-.    \" troff and (daisy-wheel) nroff accents
+-.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+-.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+-.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+-.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+-.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+-.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+-.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+-.ds ae a\h'-(\w'a'u*4/10)'e
+-.ds Ae A\h'-(\w'A'u*4/10)'E
+-.    \" corrections for vroff
+-.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+-.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+-.    \" for low resolution devices (crt and lpr)
+-.if \n(.H>23 .if \n(.V>19 \
+-\{\
+-.    ds : e
+-.    ds 8 ss
+-.    ds o a
+-.    ds d- d\h'-1'\(ga
+-.    ds D- D\h'-1'\(hy
+-.    ds th \o'bp'
+-.    ds Th \o'LP'
+-.    ds ae ae
+-.    ds Ae AE
+-.\}
+-.rm #[ #] #H #V #F C
+-.\" ========================================================================
+-.\"
+-.IX Title "GNATIVE2ASCII 1"
+-.TH GNATIVE2ASCII 1 "2008-08-27" "0.96-pre" "GNU"
+-.SH "NAME"
+-gnative2ascii \- \- An encoding converter
+-.SH "SYNOPSIS"
+-.IX Header "SYNOPSIS"
+-gnative2ascii [\fI\s-1OPTIONS\s0\fR]... [\fI\s-1INPUTFILE\s0\fR [\fI\s-1OUTPUTFILE\s0\fR]]
+-.SH "DESCRIPTION"
+-.IX Header "DESCRIPTION"
+-To be written ...
+-.SH "OPTIONS"
+-.IX Header "OPTIONS"
+-.IP "\fB\-encoding\fR \fI\s-1NAME\s0\fR" 4
+-.IX Item "-encoding NAME"
+-Set the encoding to use.
+-.IP "\fB\-reversed\fR" 4
+-.IX Item "-reversed"
+-Convert from encoding to native.
+-.PP
+-Standard options:
+-.IP "\fB\-help\fR" 4
+-.IX Item "-help"
+-Print help text, then exit.
+-.IP "\fB\-version\fR" 4
+-.IX Item "-version"
+-Print version number, then exit.
+-.IP "\fB\-J\fR\fI\s-1OPTION\s0\fR" 4
+-.IX Item "-JOPTION"
+-Pass argument to the Java runtime.
+-.SH "SEE ALSO"
+-.IX Header "SEE ALSO"
+-\&\fIjavac\fR\|(1), ...
+diff -Naur gcc-4.3.2.orig/libjava/classpath/doc/gorbd.1 gcc-4.3.2/libjava/classpath/doc/gorbd.1
+--- gcc-4.3.2.orig/libjava/classpath/doc/gorbd.1	2008-08-27 12:48:38.000000000 -0700
++++ gcc-4.3.2/libjava/classpath/doc/gorbd.1	1969-12-31 16:00:00.000000000 -0800
+@@ -1,169 +0,0 @@
+-.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+-.\"
+-.\" Standard preamble:
+-.\" ========================================================================
+-.de Sh \" Subsection heading
+-.br
+-.if t .Sp
+-.ne 5
+-.PP
+-\fB\\$1\fR
+-.PP
+-..
+-.de Sp \" Vertical space (when we can't use .PP)
+-.if t .sp .5v
+-.if n .sp
+-..
+-.de Vb \" Begin verbatim text
+-.ft CW
+-.nf
+-.ne \\$1
+-..
+-.de Ve \" End verbatim text
+-.ft R
+-.fi
+-..
+-.\" Set up some character translations and predefined strings.  \*(-- will
+-.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+-.\" double quote, and \*(R" will give a right double quote.  | will give a
+-.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used to
+-.\" do unbreakable dashes and therefore won't be available.  \*(C` and \*(C'
+-.\" expand to `' in nroff, nothing in troff, for use with C<>.
+-.tr \(*W-|\(bv\*(Tr
+-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+-.ie n \{\
+-.    ds -- \(*W-
+-.    ds PI pi
+-.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+-.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+-.    ds L" ""
+-.    ds R" ""
+-.    ds C` ""
+-.    ds C' ""
+-'br\}
+-.el\{\
+-.    ds -- \|\(em\|
+-.    ds PI \(*p
+-.    ds L" ``
+-.    ds R" ''
+-'br\}
+-.\"
+-.\" If the F register is turned on, we'll generate index entries on stderr for
+-.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+-.\" entries marked with X<> in POD.  Of course, you'll have to process the
+-.\" output yourself in some meaningful fashion.
+-.if \nF \{\
+-.    de IX
+-.    tm Index:\\$1\t\\n%\t"\\$2"
+-..
+-.    nr % 0
+-.    rr F
+-.\}
+-.\"
+-.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+-.\" way too many mistakes in technical documents.
+-.hy 0
+-.if n .na
+-.\"
+-.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+-.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+-.    \" fudge factors for nroff and troff
+-.if n \{\
+-.    ds #H 0
+-.    ds #V .8m
+-.    ds #F .3m
+-.    ds #[ \f1
+-.    ds #] \fP
+-.\}
+-.if t \{\
+-.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+-.    ds #V .6m
+-.    ds #F 0
+-.    ds #[ \&
+-.    ds #] \&
+-.\}
+-.    \" simple accents for nroff and troff
+-.if n \{\
+-.    ds ' \&
+-.    ds ` \&
+-.    ds ^ \&
+-.    ds , \&
+-.    ds ~ ~
+-.    ds /
+-.\}
+-.if t \{\
+-.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+-.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+-.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+-.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+-.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+-.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+-.\}
+-.    \" troff and (daisy-wheel) nroff accents
+-.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+-.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+-.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+-.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+-.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+-.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+-.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+-.ds ae a\h'-(\w'a'u*4/10)'e
+-.ds Ae A\h'-(\w'A'u*4/10)'E
+-.    \" corrections for vroff
+-.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+-.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+-.    \" for low resolution devices (crt and lpr)
+-.if \n(.H>23 .if \n(.V>19 \
+-\{\
+-.    ds : e
+-.    ds 8 ss
+-.    ds o a
+-.    ds d- d\h'-1'\(ga
+-.    ds D- D\h'-1'\(hy
+-.    ds th \o'bp'
+-.    ds Th \o'LP'
+-.    ds ae ae
+-.    ds Ae AE
+-.\}
+-.rm #[ #] #H #V #F C
+-.\" ========================================================================
+-.\"
+-.IX Title "GORBD 1"
+-.TH GORBD 1 "2008-08-27" "0.96-pre" "GNU"
+-.SH "NAME"
+-gorbd \- \- An object request broker daemon
+-.SH "SYNOPSIS"
+-.IX Header "SYNOPSIS"
+-gorbd ...
+-.SH "DESCRIPTION"
+-.IX Header "DESCRIPTION"
+-To be written ...
+-.SH "OPTIONS"
+-.IX Header "OPTIONS"
+-.IP "\fB\-ORBInitialPort\fR \fI\s-1PORT\s0\fR" 4
+-.IX Item "-ORBInitialPort PORT"
+-Port on which persistent naming service is to be started.
+-.IP "\fB\-ior\fR \fI\s-1FILE\s0\fR" 4
+-.IX Item "-ior FILE"
+-File in which to store persistent naming service's \s-1IOR\s0 reference
+-.IP "\fB\-directory\fR \fI\s-1DIR\s0\fR" 4
+-.IX Item "-directory DIR"
+-Directory in which to store persistent data.
+-.IP "\fB\-restart\fR" 4
+-.IX Item "-restart"
+-Restart persistent naming service, clearing persistent naming
+-database.
+-.PP
+-Standard options:
+-.IP "\fB\-help\fR" 4
+-.IX Item "-help"
+-Print help text, then exit.
+-.IP "\fB\-version\fR" 4
+-.IX Item "-version"
+-Print version number, then exit.
+-.IP "\fB\-J\fR\fI\s-1OPTION\s0\fR" 4
+-.IX Item "-JOPTION"
+-Pass argument to the Java runtime.
+-.SH "SEE ALSO"
+-.IX Header "SEE ALSO"
+-\&\fIjava\fR\|(1), ...
+diff -Naur gcc-4.3.2.orig/libjava/classpath/doc/grmid.1 gcc-4.3.2/libjava/classpath/doc/grmid.1
+--- gcc-4.3.2.orig/libjava/classpath/doc/grmid.1	2008-08-27 12:48:38.000000000 -0700
++++ gcc-4.3.2/libjava/classpath/doc/grmid.1	1969-12-31 16:00:00.000000000 -0800
+@@ -1,181 +0,0 @@
+-.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+-.\"
+-.\" Standard preamble:
+-.\" ========================================================================
+-.de Sh \" Subsection heading
+-.br
+-.if t .Sp
+-.ne 5
+-.PP
+-\fB\\$1\fR
+-.PP
+-..
+-.de Sp \" Vertical space (when we can't use .PP)
+-.if t .sp .5v
+-.if n .sp
+-..
+-.de Vb \" Begin verbatim text
+-.ft CW
+-.nf
+-.ne \\$1
+-..
+-.de Ve \" End verbatim text
+-.ft R
+-.fi
+-..
+-.\" Set up some character translations and predefined strings.  \*(-- will
+-.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+-.\" double quote, and \*(R" will give a right double quote.  | will give a
+-.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used to
+-.\" do unbreakable dashes and therefore won't be available.  \*(C` and \*(C'
+-.\" expand to `' in nroff, nothing in troff, for use with C<>.
+-.tr \(*W-|\(bv\*(Tr
+-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+-.ie n \{\
+-.    ds -- \(*W-
+-.    ds PI pi
+-.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+-.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+-.    ds L" ""
+-.    ds R" ""
+-.    ds C` ""
+-.    ds C' ""
+-'br\}
+-.el\{\
+-.    ds -- \|\(em\|
+-.    ds PI \(*p
+-.    ds L" ``
+-.    ds R" ''
+-'br\}
+-.\"
+-.\" If the F register is turned on, we'll generate index entries on stderr for
+-.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+-.\" entries marked with X<> in POD.  Of course, you'll have to process the
+-.\" output yourself in some meaningful fashion.
+-.if \nF \{\
+-.    de IX
+-.    tm Index:\\$1\t\\n%\t"\\$2"
+-..
+-.    nr % 0
+-.    rr F
+-.\}
+-.\"
+-.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+-.\" way too many mistakes in technical documents.
+-.hy 0
+-.if n .na
+-.\"
+-.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+-.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+-.    \" fudge factors for nroff and troff
+-.if n \{\
+-.    ds #H 0
+-.    ds #V .8m
+-.    ds #F .3m
+-.    ds #[ \f1
+-.    ds #] \fP
+-.\}
+-.if t \{\
+-.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+-.    ds #V .6m
+-.    ds #F 0
+-.    ds #[ \&
+-.    ds #] \&
+-.\}
+-.    \" simple accents for nroff and troff
+-.if n \{\
+-.    ds ' \&
+-.    ds ` \&
+-.    ds ^ \&
+-.    ds , \&
+-.    ds ~ ~
+-.    ds /
+-.\}
+-.if t \{\
+-.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+-.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+-.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+-.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+-.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+-.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+-.\}
+-.    \" troff and (daisy-wheel) nroff accents
+-.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+-.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+-.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+-.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+-.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+-.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+-.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+-.ds ae a\h'-(\w'a'u*4/10)'e
+-.ds Ae A\h'-(\w'A'u*4/10)'E
+-.    \" corrections for vroff
+-.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+-.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+-.    \" for low resolution devices (crt and lpr)
+-.if \n(.H>23 .if \n(.V>19 \
+-\{\
+-.    ds : e
+-.    ds 8 ss
+-.    ds o a
+-.    ds d- d\h'-1'\(ga
+-.    ds D- D\h'-1'\(hy
+-.    ds th \o'bp'
+-.    ds Th \o'LP'
+-.    ds ae ae
+-.    ds Ae AE
+-.\}
+-.rm #[ #] #H #V #F C
+-.\" ========================================================================
+-.\"
+-.IX Title "GRMID 1"
+-.TH GRMID 1 "2008-08-27" "0.96-pre" "GNU"
+-.SH "NAME"
+-grmid \- \- RMI activation system daemon
+-.SH "SYNOPSIS"
+-.IX Header "SYNOPSIS"
+-grmid [\fI\s-1OPTIONS\s0\fR]...
+-.SH "DESCRIPTION"
+-.IX Header "DESCRIPTION"
+-\&\fBrmiregistry\fR starts a remote object registry on the current
+-host.  If no port number is specified, then port 1099 is used.
+-.SH "OPTIONS"
+-.IX Header "OPTIONS"
+-Activation process control:
+-.IP "\fB\-port\fR \fI\s-1PORT\s0\fR" 4
+-.IX Item "-port PORT"
+-Port on which activation system is to be started.
+-.IP "\fB\-restart\fR" 4
+-.IX Item "-restart"
+-Restart activation system, clearing persistent naming database, if
+-any.
+-.IP "\fB\-stop\fR" 4
+-.IX Item "-stop"
+-Stop activation system.
+-.PP
+-Persistence:
+-.IP "\fB\-persistent\fR" 4
+-.IX Item "-persistent"
+-Make activation system persistent.
+-.IP "\fB\-directory\fR \fI\s-1DIR\s0\fR" 4
+-.IX Item "-directory DIR"
+-Directory in which to store persistent data.
+-.PP
+-Debugging:
+-.IP "\fB\-verbose\fR" 4
+-.IX Item "-verbose"
+-Log binding events to standard out.
+-.PP
+-Standard options:
+-.IP "\fB\-help\fR" 4
+-.IX Item "-help"
+-Print help text, then exit.
+-.IP "\fB\-version\fR" 4
+-.IX Item "-version"
+-Print version number, then exit.
+-.IP "\fB\-J\fR\fI\s-1OPTION\s0\fR" 4
+-.IX Item "-JOPTION"
+-Pass argument to the Java runtime.
+-.SH "SEE ALSO"
+-.IX Header "SEE ALSO"
+-\&\fIjava\fR\|(1), ...
+diff -Naur gcc-4.3.2.orig/libjava/classpath/doc/grmiregistry.1 gcc-4.3.2/libjava/classpath/doc/grmiregistry.1
+--- gcc-4.3.2.orig/libjava/classpath/doc/grmiregistry.1	2008-08-27 12:48:39.000000000 -0700
++++ gcc-4.3.2/libjava/classpath/doc/grmiregistry.1	1969-12-31 16:00:00.000000000 -0800
+@@ -1,178 +0,0 @@
+-.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+-.\"
+-.\" Standard preamble:
+-.\" ========================================================================
+-.de Sh \" Subsection heading
+-.br
+-.if t .Sp
+-.ne 5
+-.PP
+-\fB\\$1\fR
+-.PP
+-..
+-.de Sp \" Vertical space (when we can't use .PP)
+-.if t .sp .5v
+-.if n .sp
+-..
+-.de Vb \" Begin verbatim text
+-.ft CW
+-.nf
+-.ne \\$1
+-..
+-.de Ve \" End verbatim text
+-.ft R
+-.fi
+-..
+-.\" Set up some character translations and predefined strings.  \*(-- will
+-.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+-.\" double quote, and \*(R" will give a right double quote.  | will give a
+-.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used to
+-.\" do unbreakable dashes and therefore won't be available.  \*(C` and \*(C'
+-.\" expand to `' in nroff, nothing in troff, for use with C<>.
+-.tr \(*W-|\(bv\*(Tr
+-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+-.ie n \{\
+-.    ds -- \(*W-
+-.    ds PI pi
+-.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+-.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+-.    ds L" ""
+-.    ds R" ""
+-.    ds C` ""
+-.    ds C' ""
+-'br\}
+-.el\{\
+-.    ds -- \|\(em\|
+-.    ds PI \(*p
+-.    ds L" ``
+-.    ds R" ''
+-'br\}
+-.\"
+-.\" If the F register is turned on, we'll generate index entries on stderr for
+-.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+-.\" entries marked with X<> in POD.  Of course, you'll have to process the
+-.\" output yourself in some meaningful fashion.
+-.if \nF \{\
+-.    de IX
+-.    tm Index:\\$1\t\\n%\t"\\$2"
+-..
+-.    nr % 0
+-.    rr F
+-.\}
+-.\"
+-.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+-.\" way too many mistakes in technical documents.
+-.hy 0
+-.if n .na
+-.\"
+-.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+-.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+-.    \" fudge factors for nroff and troff
+-.if n \{\
+-.    ds #H 0
+-.    ds #V .8m
+-.    ds #F .3m
+-.    ds #[ \f1
+-.    ds #] \fP
+-.\}
+-.if t \{\
+-.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+-.    ds #V .6m
+-.    ds #F 0
+-.    ds #[ \&
+-.    ds #] \&
+-.\}
+-.    \" simple accents for nroff and troff
+-.if n \{\
+-.    ds ' \&
+-.    ds ` \&
+-.    ds ^ \&
+-.    ds , \&
+-.    ds ~ ~
+-.    ds /
+-.\}
+-.if t \{\
+-.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+-.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+-.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+-.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+-.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+-.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+-.\}
+-.    \" troff and (daisy-wheel) nroff accents
+-.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+-.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+-.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+-.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+-.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+-.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+-.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+-.ds ae a\h'-(\w'a'u*4/10)'e
+-.ds Ae A\h'-(\w'A'u*4/10)'E
+-.    \" corrections for vroff
+-.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+-.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+-.    \" for low resolution devices (crt and lpr)
+-.if \n(.H>23 .if \n(.V>19 \
+-\{\
+-.    ds : e
+-.    ds 8 ss
+-.    ds o a
+-.    ds d- d\h'-1'\(ga
+-.    ds D- D\h'-1'\(hy
+-.    ds th \o'bp'
+-.    ds Th \o'LP'
+-.    ds ae ae
+-.    ds Ae AE
+-.\}
+-.rm #[ #] #H #V #F C
+-.\" ========================================================================
+-.\"
+-.IX Title "GRMIREGISTRY 1"
+-.TH GRMIREGISTRY 1 "2008-08-27" "0.96-pre" "GNU"
+-.SH "NAME"
+-grmiregistry \- \- Remote object registry
+-.SH "SYNOPSIS"
+-.IX Header "SYNOPSIS"
+-grmiregistry [\fI\s-1OPTIONS\s0\fR]... \fI\s-1PORT\s0\fR
+-.SH "DESCRIPTION"
+-.IX Header "DESCRIPTION"
+-\&\fBgrmiregistry\fR starts a remote object registry on the current
+-host.  If no port number is specified, then port 1099 is used.
+-.SH "OPTIONS"
+-.IX Header "OPTIONS"
+-Registry process control:
+-.IP "\fB\-restart\fR" 4
+-.IX Item "-restart"
+-Restart \s-1RMI\s0 naming service, clearing persistent naming database, if
+-any.
+-.IP "\fB\-stop\fR" 4
+-.IX Item "-stop"
+-Stop \s-1RMI\s0 naming service.
+-.PP
+-Persistence:
+-.IP "\fB\-persistent\fR" 4
+-.IX Item "-persistent"
+-Make \s-1RMI\s0 naming service persistent.
+-.IP "\fB\-directory\fR \fI\s-1DIR\s0\fR" 4
+-.IX Item "-directory DIR"
+-Directory in which to store persistent data.
+-.PP
+-Debugging:
+-.IP "\fB\-verbose\fR" 4
+-.IX Item "-verbose"
+-Log binding events to standard out.
+-.PP
+-Standard options:
+-.IP "\fB\-help\fR" 4
+-.IX Item "-help"
+-Print help text, then exit.
+-.IP "\fB\-version\fR" 4
+-.IX Item "-version"
+-Print version number, then exit.
+-.IP "\fB\-J\fR\fI\s-1OPTION\s0\fR" 4
+-.IX Item "-JOPTION"
+-Pass argument to the Java runtime.
+-.SH "SEE ALSO"
+-.IX Header "SEE ALSO"
+-\&\fIjava\fR\|(1), ...
+diff -Naur gcc-4.3.2.orig/libjava/classpath/doc/gserialver.1 gcc-4.3.2/libjava/classpath/doc/gserialver.1
+--- gcc-4.3.2.orig/libjava/classpath/doc/gserialver.1	2008-08-27 12:48:39.000000000 -0700
++++ gcc-4.3.2/libjava/classpath/doc/gserialver.1	1969-12-31 16:00:00.000000000 -0800
+@@ -1,159 +0,0 @@
+-.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+-.\"
+-.\" Standard preamble:
+-.\" ========================================================================
+-.de Sh \" Subsection heading
+-.br
+-.if t .Sp
+-.ne 5
+-.PP
+-\fB\\$1\fR
+-.PP
+-..
+-.de Sp \" Vertical space (when we can't use .PP)
+-.if t .sp .5v
+-.if n .sp
+-..
+-.de Vb \" Begin verbatim text
+-.ft CW
+-.nf
+-.ne \\$1
+-..
+-.de Ve \" End verbatim text
+-.ft R
+-.fi
+-..
+-.\" Set up some character translations and predefined strings.  \*(-- will
+-.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+-.\" double quote, and \*(R" will give a right double quote.  | will give a
+-.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used to
+-.\" do unbreakable dashes and therefore won't be available.  \*(C` and \*(C'
+-.\" expand to `' in nroff, nothing in troff, for use with C<>.
+-.tr \(*W-|\(bv\*(Tr
+-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+-.ie n \{\
+-.    ds -- \(*W-
+-.    ds PI pi
+-.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+-.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+-.    ds L" ""
+-.    ds R" ""
+-.    ds C` ""
+-.    ds C' ""
+-'br\}
+-.el\{\
+-.    ds -- \|\(em\|
+-.    ds PI \(*p
+-.    ds L" ``
+-.    ds R" ''
+-'br\}
+-.\"
+-.\" If the F register is turned on, we'll generate index entries on stderr for
+-.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+-.\" entries marked with X<> in POD.  Of course, you'll have to process the
+-.\" output yourself in some meaningful fashion.
+-.if \nF \{\
+-.    de IX
+-.    tm Index:\\$1\t\\n%\t"\\$2"
+-..
+-.    nr % 0
+-.    rr F
+-.\}
+-.\"
+-.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+-.\" way too many mistakes in technical documents.
+-.hy 0
+-.if n .na
+-.\"
+-.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+-.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+-.    \" fudge factors for nroff and troff
+-.if n \{\
+-.    ds #H 0
+-.    ds #V .8m
+-.    ds #F .3m
+-.    ds #[ \f1
+-.    ds #] \fP
+-.\}
+-.if t \{\
+-.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+-.    ds #V .6m
+-.    ds #F 0
+-.    ds #[ \&
+-.    ds #] \&
+-.\}
+-.    \" simple accents for nroff and troff
+-.if n \{\
+-.    ds ' \&
+-.    ds ` \&
+-.    ds ^ \&
+-.    ds , \&
+-.    ds ~ ~
+-.    ds /
+-.\}
+-.if t \{\
+-.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+-.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+-.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+-.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+-.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+-.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+-.\}
+-.    \" troff and (daisy-wheel) nroff accents
+-.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+-.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+-.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+-.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+-.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+-.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+-.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+-.ds ae a\h'-(\w'a'u*4/10)'e
+-.ds Ae A\h'-(\w'A'u*4/10)'E
+-.    \" corrections for vroff
+-.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+-.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+-.    \" for low resolution devices (crt and lpr)
+-.if \n(.H>23 .if \n(.V>19 \
+-\{\
+-.    ds : e
+-.    ds 8 ss
+-.    ds o a
+-.    ds d- d\h'-1'\(ga
+-.    ds D- D\h'-1'\(hy
+-.    ds th \o'bp'
+-.    ds Th \o'LP'
+-.    ds ae ae
+-.    ds Ae AE
+-.\}
+-.rm #[ #] #H #V #F C
+-.\" ========================================================================
+-.\"
+-.IX Title "GSERIALVER 1"
+-.TH GSERIALVER 1 "2008-08-27" "0.96-pre" "GNU"
+-.SH "NAME"
+-gserialver \- version command
+-.SH "SYNOPSIS"
+-.IX Header "SYNOPSIS"
+-gserialver [\fI\s-1OPTIONS\s0\fR]... \fI\s-1CLASS\s0\fR...
+-.SH "DESCRIPTION"
+-.IX Header "DESCRIPTION"
+-Print the serialVersionUID of the specified classes.
+-.SH "OPTIONS"
+-.IX Header "OPTIONS"
+-.IP "\fB\-classpath\fR \fI\s-1PATH\s0\fR" 4
+-.IX Item "-classpath PATH"
+-Class path to use to find classes.
+-.PP
+-Standard options:
+-.IP "\fB\-help\fR" 4
+-.IX Item "-help"
+-Print help text, then exit.
+-.IP "\fB\-version\fR" 4
+-.IX Item "-version"
+-Print version number, then exit.
+-.IP "\fB\-J\fR\fI\s-1OPTION\s0\fR" 4
+-.IX Item "-JOPTION"
+-Pass argument to the Java runtime.
+-.SH "SEE ALSO"
+-.IX Header "SEE ALSO"
+-\&\fIjavac\fR\|(1), ...
+diff -Naur gcc-4.3.2.orig/libjava/classpath/doc/gtnameserv.1 gcc-4.3.2/libjava/classpath/doc/gtnameserv.1
+--- gcc-4.3.2.orig/libjava/classpath/doc/gtnameserv.1	2008-08-27 12:48:39.000000000 -0700
++++ gcc-4.3.2/libjava/classpath/doc/gtnameserv.1	1969-12-31 16:00:00.000000000 -0800
+@@ -1,162 +0,0 @@
+-.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+-.\"
+-.\" Standard preamble:
+-.\" ========================================================================
+-.de Sh \" Subsection heading
+-.br
+-.if t .Sp
+-.ne 5
+-.PP
+-\fB\\$1\fR
+-.PP
+-..
+-.de Sp \" Vertical space (when we can't use .PP)
+-.if t .sp .5v
+-.if n .sp
+-..
+-.de Vb \" Begin verbatim text
+-.ft CW
+-.nf
+-.ne \\$1
+-..
+-.de Ve \" End verbatim text
+-.ft R
+-.fi
+-..
+-.\" Set up some character translations and predefined strings.  \*(-- will
+-.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+-.\" double quote, and \*(R" will give a right double quote.  | will give a
+-.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used to
+-.\" do unbreakable dashes and therefore won't be available.  \*(C` and \*(C'
+-.\" expand to `' in nroff, nothing in troff, for use with C<>.
+-.tr \(*W-|\(bv\*(Tr
+-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+-.ie n \{\
+-.    ds -- \(*W-
+-.    ds PI pi
+-.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+-.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+-.    ds L" ""
+-.    ds R" ""
+-.    ds C` ""
+-.    ds C' ""
+-'br\}
+-.el\{\
+-.    ds -- \|\(em\|
+-.    ds PI \(*p
+-.    ds L" ``
+-.    ds R" ''
+-'br\}
+-.\"
+-.\" If the F register is turned on, we'll generate index entries on stderr for
+-.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+-.\" entries marked with X<> in POD.  Of course, you'll have to process the
+-.\" output yourself in some meaningful fashion.
+-.if \nF \{\
+-.    de IX
+-.    tm Index:\\$1\t\\n%\t"\\$2"
+-..
+-.    nr % 0
+-.    rr F
+-.\}
+-.\"
+-.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+-.\" way too many mistakes in technical documents.
+-.hy 0
+-.if n .na
+-.\"
+-.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+-.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+-.    \" fudge factors for nroff and troff
+-.if n \{\
+-.    ds #H 0
+-.    ds #V .8m
+-.    ds #F .3m
+-.    ds #[ \f1
+-.    ds #] \fP
+-.\}
+-.if t \{\
+-.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+-.    ds #V .6m
+-.    ds #F 0
+-.    ds #[ \&
+-.    ds #] \&
+-.\}
+-.    \" simple accents for nroff and troff
+-.if n \{\
+-.    ds ' \&
+-.    ds ` \&
+-.    ds ^ \&
+-.    ds , \&
+-.    ds ~ ~
+-.    ds /
+-.\}
+-.if t \{\
+-.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+-.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+-.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+-.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+-.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+-.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+-.\}
+-.    \" troff and (daisy-wheel) nroff accents
+-.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+-.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+-.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+-.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+-.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+-.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+-.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+-.ds ae a\h'-(\w'a'u*4/10)'e
+-.ds Ae A\h'-(\w'A'u*4/10)'E
+-.    \" corrections for vroff
+-.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+-.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+-.    \" for low resolution devices (crt and lpr)
+-.if \n(.H>23 .if \n(.V>19 \
+-\{\
+-.    ds : e
+-.    ds 8 ss
+-.    ds o a
+-.    ds d- d\h'-1'\(ga
+-.    ds D- D\h'-1'\(hy
+-.    ds th \o'bp'
+-.    ds Th \o'LP'
+-.    ds ae ae
+-.    ds Ae AE
+-.\}
+-.rm #[ #] #H #V #F C
+-.\" ========================================================================
+-.\"
+-.IX Title "GTNAMESERV 1"
+-.TH GTNAMESERV 1 "2008-08-27" "0.96-pre" "GNU"
+-.SH "NAME"
+-gtnameserv \- Naming service
+-.SH "SYNOPSIS"
+-.IX Header "SYNOPSIS"
+-tnameserv [\fI\s-1OPTIONS\s0\fR]
+-.SH "DESCRIPTION"
+-.IX Header "DESCRIPTION"
+-To be written ...
+-.SH "OPTIONS"
+-.IX Header "OPTIONS"
+-.IP "\fB\-ORBInitialPort\fR \fI\s-1PORT\s0\fR" 4
+-.IX Item "-ORBInitialPort PORT"
+-Port on which naming service is to be started.
+-.IP "\fB\-ior\fR \fI\s-1FILE\s0\fR" 4
+-.IX Item "-ior FILE"
+-File in which to store naming service's \s-1IOR\s0 reference.
+-.PP
+-Standard options:
+-.IP "\fB\-help\fR" 4
+-.IX Item "-help"
+-Print help text, then exit.
+-.IP "\fB\-version\fR" 4
+-.IX Item "-version"
+-Print version number, then exit.
+-.IP "\fB\-J\fR\fI\s-1OPTION\s0\fR" 4
+-.IX Item "-JOPTION"
+-Pass argument to the Java runtime.
+-.SH "SEE ALSO"
+-.IX Header "SEE ALSO"
+-\&\fIjava\fR\|(1), ...
+diff -Naur gcc-4.3.2.orig/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c gcc-4.3.2/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c
+--- gcc-4.3.2.orig/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c	2007-08-04 03:53:49.000000000 -0700
++++ gcc-4.3.2/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c	2008-11-10 04:13:05.000000000 -0800
+@@ -353,7 +353,6 @@
+   for (i = 0; i < n; i++)
+     {
+       PangoFcFont *font = JLONG_TO_PTR(PangoFcFont, fonts[i]);
+-  gdk_threads_leave ();
+ 
+       /* Draw as many glyphs as possible with the current font */
+       int length = 0;
+diff -Naur gcc-4.3.2.orig/libjava/classpath/tools/classes/gnu/classpath/tools/javah/ClassWrapper.class gcc-4.3.2/libjava/classpath/tools/classes/gnu/classpath/tools/javah/ClassWrapper.class
+--- gcc-4.3.2.orig/libjava/classpath/tools/classes/gnu/classpath/tools/javah/ClassWrapper.class	2007-04-18 17:24:09.000000000 -0700
++++ gcc-4.3.2/libjava/classpath/tools/classes/gnu/classpath/tools/javah/ClassWrapper.class	2008-09-14 11:27:33.000000000 -0700
+@@ -1,4 +1,4 @@
+-ÊþºŸ1&gnu/classpath/tools/javah/ClassWrapper org/objectweb/asm/tree/ClassNode	classpath Lgnu/classpath/tools/javah/Main;
++ÊþºŸ1
+&gnu/classpath/tools/javah/ClassWrapper org/objectweb/asm/tree/ClassNode	classpath Lgnu/classpath/tools/javah/Main;
+ superClass(Lgnu/classpath/tools/javah/ClassWrapper;interfaceClassesLjava/util/ArrayList;vtable
+bridgeTargetsLjava/util/HashSet;
+methodNames
+methodNameMapLjava/util/HashMap;$assertionsDisabledZ<clinit>()VCode
+ java/lang/Class
+desiredAssertionStatus()Z	
+
+LineNumberTableLocalVariableTable<init>#(Lgnu/classpath/tools/javah/Main;)V
+ #
+ %java/util/HashSet
+@@ -36,42 +36,40 @@
+ cÆ
+ÇÈvalueOf&(Ljava/lang/Object;)Ljava/lang/String;
+ ÃÊ
+ Ë(Ljava/lang/String;)V
+ ÃÍ
+ÎÏappend-(Ljava/lang/String;)Ljava/lang/StringBuilder;
+-ÃÑ
+ÒÓtoString()Ljava/lang/String;mdesc
+printFields-(Lgnu/classpath/tools/javah/CniPrintStream;)V	Ù
+Ú5fieldsÜ org/objectweb/asm/tree/FieldNode	Û]
+-$ß
+àgcontains
+-âäã%gnu/classpath/tools/javah/FieldHelper
+åæprintx(Lgnu/classpath/tools/javah/CniPrintStream;Lorg/objectweb/asm/tree/FieldNode;Lgnu/classpath/tools/javah/ClassWrapper;Z)Zout*Lgnu/classpath/tools/javah/CniPrintStream;f"Lorg/objectweb/asm/tree/FieldNode;
+hasMethodName
+printMethods	Bî
+Õ_
+-)ð
+ñg
+containsKey
+-)ó
+ô&(Ljava/lang/Object;)Ljava/lang/Object;
+-cö
+÷ø
+lastIndexOf(I)I
+-cú
+ûü	substring(I)Ljava/lang/String;þ$
+-"gnu/classpath/tools/javah/Keywords
+
++ÃÑ
+ÒÓtoString()Ljava/lang/String;
++cÕ
+Ö×
+lastIndexOf(I)I
++cÙ
+ÚÛ	substring(I)Ljava/lang/String;Ý$
++)ß
+àáput8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;mdescsum	newTargetcnameindex
+printFields-(Lgnu/classpath/tools/javah/CniPrintStream;)V	ë
+ì5fieldsî org/objectweb/asm/tree/FieldNode	í]
++$ñ
+ògcontains
++ôöõ%gnu/classpath/tools/javah/FieldHelper
+÷øprintx(Lgnu/classpath/tools/javah/CniPrintStream;Lorg/objectweb/asm/tree/FieldNode;Lgnu/classpath/tools/javah/ClassWrapper;Z)Zout*Lgnu/classpath/tools/javah/CniPrintStream;f"Lorg/objectweb/asm/tree/FieldNode;
+hasMethodName
+printMethods	B
+ã_
++)
+&(Ljava/lang/Object;)Ljava/lang/Object;
++"gnu/classpath/tools/javah/Keywords
+	
+ getCxxName&(Ljava/lang/String;)Ljava/lang/String;
+-)
+put8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+-
+-
+å
+(Lgnu/classpath/tools/javah/CniPrintStream;Lorg/objectweb/asm/tree/MethodNode;Lgnu/classpath/tools/javah/ClassWrapper;Ljava/lang/String;)V	nameToUsesumcnameindex
+printTextList.(Ljava/io/PrintStream;ILjava/util/ArrayList;)V
+gnu/classpath/tools/javah/Text	
+Gtype
+-java/io/PrintStream
+println
+	  friend 
+-
+åË	!
+"_text
+-$
+ËLjava/io/PrintStream;whattextListfirstitem Lgnu/classpath/tools/javah/Text;,::./
+-c0
+12
++
+
+÷
+(Lgnu/classpath/tools/javah/CniPrintStream;Lorg/objectweb/asm/tree/MethodNode;Lgnu/classpath/tools/javah/ClassWrapper;Ljava/lang/String;)V	nameToUse
+printTextList.(Ljava/io/PrintStream;ILjava/util/ArrayList;)V
+gnu/classpath/tools/javah/Text	
+Gtype
++java/io/PrintStream
+println	  friend 
++
+
+÷Ë	
+ _text
++"
+ËLjava/io/PrintStream;whattextListfirstitem Lgnu/classpath/tools/javah/Text;*::,/
++c.
+/0
+ replaceAll8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+-45(gnu/classpath/tools/javah/CniPrintStream
+printContentsB(Lgnu/classpath/tools/javah/CniPrintStream;Ljava/util/ArrayList;)V
+-9
+
+-4<class >
++2
+3(gnu/classpath/tools/javah/CniPrintStream
+printContentsB(Lgnu/classpath/tools/javah/CniPrintStream;Ljava/util/ArrayList;)V
++7
+
++2:class <
+  : public 
+-@
+å×B{
+-4$
+-E
+ì×
+-G
+Ö×
+-4I
+JK
+setModifiers(I)VM$  static ::java::lang::Class class$;O}	E
+-IR
+SM
+isInterfaceU! __attribute__ ((java_interface))W;
++>
+÷é@{
++2"
++C
+þé
++E
+èé
++2G
+HI
+setModifiers(I)VK$  static ::java::lang::Class class$;M}	E
++IP
+QM
+isInterfaceS! __attribute__ ((java_interface))U;
+ printFully(Ljava/io/PrintStream;)V
+-o[
+\]getClassTextList)(Ljava/lang/String;)Ljava/util/ArrayList;_>// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-a__c_e#ifndef g#define i#pragma interfacek
+-#include <m.h>o
+java/io/ByteArrayOutputStream
+-n#
+-4r
+ s(Ljava/io/OutputStream;)V
+-4u
+vaddClass
+-x
+67
+-4z
+{YprintNamespaces
+-n}
+~swriteTo
++oY
+Z[getClassTextList)(Ljava/lang/String;)Ljava/util/ArrayList;]>// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-___a_c#ifndef e#define g#pragma interfacei
++#include <k.h>m
+java/io/ByteArrayOutputStream
++l#
++2p
+ q(Ljava/io/OutputStream;)V
++2s
+taddClass
++v
+45
++2x
+yWprintNamespaces
++l{
+|qwriteTo~
+ #endif // xnamebytesLjava/io/ByteArrayOutputStream;cxxOut
+ SourceFileClassWrapper.java!	
+ 
+
+@@ -84,14 +82,14 @@
+ 
+
+$-8AF4G0G
+ =QR!¡T
+¢G ,+ŽtÇ±+Žt¶£M§,¹<ÀN*-·€,¹Nÿë±
+" ¡¢£¥
+Š"£+š*,0,
+QR
+ŠÏ[*Ž2¹6L§G+¹<ÀBM*Ž',Ž§¶šW,ŽDž©§$*,·>
+ *Ž,¶W§
+*Ž
+,¶¬W+¹Nÿ¶±
+2
+¬
+ ­
+¯°#±-²0³6Ž;µG·Q­Z¹*[0
+-QQR:°T6¢G±VWTÀ*ŽÆ±*ŽhÆC*Žh·²*»yY*ŽhŽ·Žµ*»$Y*ŽhŽ··¹µ·*»)Y*ŽhŽ,·ºµ,§$*»yY·{µ*»$Y·&µ·*»)Y·+µ,*·œ**·*Ž2¹6L§3+¹<ÀBM,ž¿N-Æ *Ž·»ÃY,Ž§žÅ·É-¶Ì¶Ð¶šW+¹NÿÊ±
+RœŸ¿ÁÂ(Ã:ÄOÉZÊeËpÍtÎyÖ×ÙÚÛÜ¶×¿Þ*À0=QR&ÔT!Õ_Ö×¿C*ŽØ¹6M*ŽhN§*,¹<ÀÛ:*Ž'ŽÝ¶Þ6+-žáN,¹NÿÓ±
+&	â
+-ãäæ
+ç+è7é9äBë>C0Cçè
+-9QR4j
+
+éê+ëì×VW¿*·²*Ž2¹6M§§,¹<ÀBN»ÃY-Ž§žÅ·É-Ží¶Ì¶Ð:*Ž·¶ÞZ*Ž,¶ï*Ž,¶òÀc:§F*Ž\:/¶õ6`¶ù:»ÃYžÅ·Éý¶Ì-Ž§¶Ì¶Ð:§
+-Ž§žÿ:*Ž,¶W+-*ž	,¹NÿV±
+Fïóôöø5ùAûMü^dmx¡­	µôŸ
+f
+-¿0¿çè±QRÔT[
+_
+_¡
+_5
+_d1_m(GðR-Ç±-¶£:6§9¹<À:Ž
+ $
+-+¶6
+ 
+-+
+¶
++Ž ¶#¹NÿÃ±
+>
+
+&+/2
+7
+>GQ"HR0Rç%R&GR'
+-
+GQRD(
+*)*å×Z"+»ÃY+·É*Ž\-+¶/¶Ì¶Ð¶3±
+
+-&!'"0"çè67VW%*+,·8+¶:+;¶3+*Ž\-+¶/¶3*ŽhÆ+=¶3*Žh+¶?+¶:+A¶C*+,·8+¶:*+·D*+·F+¶H+L¶C*+,·8+N¶3*ŽPžQ
+-+T¶3+V¶C*+,·8±
+Z-.
+02#3*51698=9D;K<O@TAYC^DeFlHsI}JKMN 0çè'
+-XYVWÜ*·Y*Ž.*Ž\¶ZM+^¶#+¶»ÃY`·É*Ž\-b¶/¶Ì`¶Ì¶ÐN+»ÃYd·É-¶Ì¶Ð¶#+»ÃYf·É-¶Ì¶Ð¶#+¶+h¶#+¶*ŽhÆ+j¶
++*Žk¶
++l¶#»nY·p:»4Y·q:*¶t*,·w+¶y+¶|+¶+»ÃY·É-¶Ì¶Ð¶#±
+^RTVWX?YTZi[m\t]x_abchi©j¯k¶lŒmÂoÆpÛq>Ü0Üç%Ì'
+-?_>©3èÒÓ/*Ž\°
+u
+0
+
+\ No newline at end of file
++QQR:°T6¢G±VWÝ	*ŽÆ±*ŽhÆC*Žh·²*»yY*ŽhŽ·Žµ*»$Y*ŽhŽ··¹µ·*»)Y*ŽhŽ,·ºµ,§$*»yY·{µ*»$Y·&µ·*»)Y·+µ,*·œ**·*Ž2¹6L§|+¹<ÀBM,ž¿N-Æi»ÃY,Ž§žÅ·É-¶Ì¶Ð:*Ž·¶š6B*Ž\:/¶Ô6`¶Ø:*Ž,»ÃYžÅ·ÉÜ¶Ì,Ž§¶Ì¶Ð¶ÞW+¹Nÿ±
+jœŸ¿ÁÂ(Ã:ÄOÉZÊeËpÍtÎyÖ×ÙÚÛÝ°Þ»ßÀâÆãÏäÚåÿ×éR	0QRoâTjã_°Oä_»DåÆ9æ_Ï0çGèé¿C*Žê¹6M*ŽhN§*,¹<Àí:*Ž'Žï¶ð6+-žóN,¹NÿÓ±
+&	í
++îïñ
+ò+ó7ô9ïBö>C0Cùú
++9QR4j
+
+ûü+ýþéVW
+y*·²*Ž2¹6M§a,¹<ÀBN»ÃY-Ž§žÅ·É-Žÿ¶Ì¶Ð:*Ž·¶ð*Ž,¶Àc:§
+-Ž§ž:*Ž,¶ÞW+-*ž
++,¹Nÿ±
+2
+úþÿ5AR[g	oÿx
+Hy0yùúkQRTâTO
+_[
+_5:ä_ðR-Ç±-¶£:6§9¹<À:Ž
+ $
+++¶6
+ 
+++¶
++Ž
+¶!¹NÿÃ±
+>
+
+&+/2
+7
+>GQ"HR0Rù#R$GR%
++
+GQRD&
+*'(÷éZ"+»ÃY)·É*Ž\+)¶-¶Ì¶Ð¶1±
+
++&!'"0"ùú45VW%*+,·6+¶8+9¶1+*Ž\+)¶-¶1*ŽhÆ+;¶1*Žh+¶=+¶8+?¶A*+,·6+¶8*+·B*+·D+¶F+J¶A*+,·6+L¶1*ŽNžO
+++R¶1+T¶A*+,·6±
+Z-.
+02#3*51698=9D;K<O@TAYC^DeFlHsI}JKMN 0ùú%
++VWVWÜ*·Y*Ž.*Ž\¶XM+\¶!+¶»ÃY^·É*Ž\+`¶-¶Ì^¶Ì¶ÐN+»ÃYb·É-¶Ì¶Ð¶!+»ÃYd·É-¶Ì¶Ð¶!+¶+f¶!+¶*ŽhÆ+h¶
++*Žk¶
++j¶!»lY·n:»2Y·o:*¶r*,·u+¶w+¶z+¶+»ÃY}·É-¶Ì¶Ð¶!±
+^RTVWX?YTZi[m\t]x_abchi©j¯k¶lŒmÂoÆpÛq>Ü0Üù#Ì%
++?_>©3úÒÓ/*Ž\°
+u
+0
+\ No newline at end of file
+diff -Naur gcc-4.3.2.orig/libjava/classpath/tools/gnu/classpath/tools/javah/ClassWrapper.java gcc-4.3.2/libjava/classpath/tools/gnu/classpath/tools/javah/ClassWrapper.java
+--- gcc-4.3.2.orig/libjava/classpath/tools/gnu/classpath/tools/javah/ClassWrapper.java	2007-04-18 17:24:09.000000000 -0700
++++ gcc-4.3.2/libjava/classpath/tools/gnu/classpath/tools/javah/ClassWrapper.java	2008-09-14 11:27:33.000000000 -0700
+@@ -217,7 +217,18 @@
+         MethodNode m = (MethodNode) i.next();
+         String desc = MethodHelper.getBridgeTarget(m);
+         if (desc != null)
+-          bridgeTargets.add(m.name + desc);
++	  {
++	    String sum = m.name + desc;
++	    boolean newTarget = bridgeTargets.add(sum);
++	    if (newTarget)
++	      {
++		// Bridge target that is new in this class.
++		String cname = this.name;
++		int index = cname.lastIndexOf('/');
++		cname = cname.substring(index + 1);
++		methodNameMap.put(sum, cname + "$" + m.name);
++	      }
++	  }
+       }
+   }
+ 
+@@ -247,18 +258,7 @@
+ 	String nameToUse;
+ 	String sum = m.name + m.desc;
+ 	if (bridgeTargets.contains(sum))
+-	  {
+-	    if (methodNameMap.containsKey(sum))
+-	      nameToUse = (String) methodNameMap.get(sum);
+-	    else
+-	      {
+-		// Bridge target that is new in this class.
+-		String cname = this.name;
+-		int index = cname.lastIndexOf('/');
+-		cname = cname.substring(index + 1);
+-		nameToUse = cname + "$" + m.name;
+-	      }
+-	  }
++	  nameToUse = (String) methodNameMap.get(sum);
+ 	else
+ 	  nameToUse = Keywords.getCxxName(m.name);
+ 	methodNameMap.put(sum, nameToUse);
+diff -Naur gcc-4.3.2.orig/libmudflap/ChangeLog gcc-4.3.2/libmudflap/ChangeLog
+--- gcc-4.3.2.orig/libmudflap/ChangeLog	2008-08-27 11:00:51.000000000 -0700
++++ gcc-4.3.2/libmudflap/ChangeLog	2008-12-02 09:44:08.000000000 -0800
+@@ -1,3 +1,15 @@
++2008-12-02  Janis Johnson  <janis187@us.ibm.com>
++
++	Backport from mainline:
++	2008-11-26  Janis Johnson  <janis187@us.ibm.com>
++
++	PR testsuite/28870
++	* testsuite/lib/mfdg.exp (dg-test): Use new timeout support.
++	(dg-timeout): Remove.
++	(standard-wait): Remove.
++	* testsuite/lib/libmudflap.exp: Include new timeout library files.
++	(libmudflap_target_compile): Set timeout value from new proc.
++
+ 2008-08-27  Release Manager
+ 
+ 	* GCC 4.3.2 released.
+diff -Naur gcc-4.3.2.orig/libmudflap/testsuite/lib/libmudflap.exp gcc-4.3.2/libmudflap/testsuite/lib/libmudflap.exp
+--- gcc-4.3.2.orig/libmudflap/testsuite/lib/libmudflap.exp	2006-04-10 14:34:19.000000000 -0700
++++ gcc-4.3.2/libmudflap/testsuite/lib/libmudflap.exp	2008-12-02 09:44:08.000000000 -0800
+@@ -29,6 +29,8 @@
+ load_lib mfdg.exp
+ load_lib libgloss.exp
+ load_gcc_lib target-libpath.exp
++load_gcc_lib timeout.exp
++load_gcc_lib timeout-dg.exp
+ 
+ proc libmudflap-init { language } {
+     global env
+@@ -213,6 +215,7 @@
+     set cxx_final [concat $cxx_final $libs]
+ 
+     lappend options "compiler=$cxx_final"
++    lappend options "timeout=[timeout_value]"
+ 
+     # Picks up the freshly-built testsuite library corresponding to the
+     # multilib under test.
+diff -Naur gcc-4.3.2.orig/libmudflap/testsuite/lib/mfdg.exp gcc-4.3.2/libmudflap/testsuite/lib/mfdg.exp
+--- gcc-4.3.2.orig/libmudflap/testsuite/lib/mfdg.exp	2005-08-16 20:21:42.000000000 -0700
++++ gcc-4.3.2/libmudflap/testsuite/lib/mfdg.exp	2008-12-02 09:44:08.000000000 -0800
+@@ -40,8 +40,7 @@
+     set keep 0
+     set i 0
+     set dg-repetitions 1 ;# may be overridden by { dg-repetitions N }
+-    global dg-timeout
+-    set dg-timeout 0 ;# likewise by { dg-timeout N }
++    unset_timeout_vars
+ 
+     if { [string index [lindex $args 0] 0] == "-" } {
+ 	for { set i 0 } { $i < [llength $args] } { incr i } {
+@@ -347,31 +346,3 @@
+     upvar dg-repetitions repetitions
+     set repetitions $value
+ }
+-
+-
+-# 
+-# Indicate that this test case is to be run with a short timeout.
+-# The embedded format is "{ dg-timeout N }", where N is in seconds.
+-#
+-proc dg-timeout { line value } {
+-    global dg-timeout
+-    set dg-timeout $value
+-}
+-
+-
+-# dejagnu's config/unix.exp hard-codes 300 seconds as the timeout
+-# for any natively run executable.  That's too long for tests run
+-# multiple times and that may possibly hang.  So we override it here
+-# to provide some degree of control.
+-rename standard_wait hooked_standard_wait
+-proc standard_wait { dest timeout } {
+-    global dg-timeout
+-    if {[info exists dg-timeout]} {
+-	if {${dg-timeout} > 0} {
+-	    verbose -log "Overriding timeout = ${dg-timeout}"
+-	    set timeout ${dg-timeout}
+-	}
+-    }
+-
+-    hooked_standard_wait $dest $timeout
+-}
+diff -Naur gcc-4.3.2.orig/libstdc++-v3/ChangeLog gcc-4.3.2/libstdc++-v3/ChangeLog
+--- gcc-4.3.2.orig/libstdc++-v3/ChangeLog	2008-08-27 11:03:00.000000000 -0700
++++ gcc-4.3.2/libstdc++-v3/ChangeLog	2008-12-12 17:46:04.000000000 -0800
+@@ -1,3 +1,68 @@
++2008-12-12  H.J. Lu  <hongjiu.lu@intel.com>
++
++	Backport from mainline:
++	2008-12-12  H.J. Lu  <hongjiu.lu@intel.com>
++
++	PR libstdc++/37144
++	* testsuite/util/regression/trait/assoc/type_trait.hpp
++	(regression_test_type_traits): Add const to pair_type_rebind.
++
++2008-12-11  Jakub Jelinek  <jakub@redhat.com>
++
++	PR c++/37582
++	* include/bits/cpp_type_traits.h (struct __traitand): New.
++	* include/c_global/cmath (std::atan2, std::pow): Use __traitand
++	instead of && as first argument to __enable_if.
++	* include/c_std/cmath (std::atan2): Likewise.
++	* testsuite/26_numerics/headers/cmath/37582.cc: New.
++
++2008-12-04  Janis Johnson  <janis187@us.ibm.com>
++
++	Backport from mainline:
++	2008-10-18  Jakub Jelinek  <jakub@redhat.com>
++	            Janis Johnson  <janis187@us.ibm.com>
++
++	* testsuite/Makefile.am (AUTOMAKE_OPTIONS): Remove dejagnu.
++	(RUNTESTDEFAULTFLAGS, EXPECT, check_DEJAGNU_normal_targets): New
++	variables.
++	(%/site.exp, check-DEJAGNU%): New targets.
++	(check-am): Run $(MAKE) check-DEJAGNU.
++	* testsuite/Makefile.in: Regenerated.
++
++2008-12-02  Janis Johnson  <janis187@us.ibm.com>
++
++	Backport from mainline:
++	2008-11-26  Janis Johnson  <janis187@us.ibm.com>
++
++	PR testsuite/28870
++	* testsuite/lib/libstdc++.exp: Include new timeout library files.
++	(libstdc++_init): Define tool_timeout.
++	(dg-test): Override DejaGnu proc.
++	(v3_target_compile): Set timeout value from new proc.
++	(v3_target_compile_as_c): Ditto.
++
++2008-12-01  Benjamin Kosnik  <bkoz@redhat.com>
++
++	PR libstdc++/38080
++	* include/std/iostream: Correct URL.
++	* include/std/streambuf: Same.
++	* include/std/bitset: Same.
++	* include/std/iosfwd: Same.
++	* include/std/fstream: Same.
++	* include/std/istream: Same.
++	* include/std/ostream: Same.
++	* include/std/sstream: Same.
++	* include/bits/basic_ios.h: Same.
++	* include/bits/stl_map.h: Same.
++	* include/bits/stl_set.h: Same.
++	* include/bits/stl_multimap.h: Same.
++	* include/bits/ios_base.h: Same.
++	* include/bits/stl_multiset.h: Same.
++	* include/bits/char_traits.h: Same.
++	* include/bits/stl_relops.h: Same.
++	* testsuite/27_io/ios_base/cons/assign_neg.cc: Adjust line numbers.
++	* testsuite/27_io/ios_base/cons/copy_neg.cc: Ditto.
++
+ 2008-08-27  Release Manager
+ 
+ 	* GCC 4.3.2 released.
+diff -Naur gcc-4.3.2.orig/libstdc++-v3/include/bits/basic_ios.h gcc-4.3.2/libstdc++-v3/include/bits/basic_ios.h
+--- gcc-4.3.2.orig/libstdc++-v3/include/bits/basic_ios.h	2008-01-31 10:44:55.000000000 -0800
++++ gcc-4.3.2/libstdc++-v3/include/bits/basic_ios.h	2008-12-01 20:57:44.000000000 -0800
+@@ -398,7 +398,7 @@
+        *  with this stream, calls that buffer's @c pubimbue(loc).
+        *
+        *  Additional l10n notes are at
+-       *  http://gcc.gnu.org/onlinedocs/libstdc++/22_locale/howto.html
++       *  http://gcc.gnu.org/onlinedocs/libstdc++/manual/localization.html
+       */
+       locale
+       imbue(const locale& __loc);
+@@ -418,7 +418,7 @@
+        *  @endcode
+        *
+        *  Additional l10n notes are at
+-       *  http://gcc.gnu.org/onlinedocs/libstdc++/22_locale/howto.html
++       *  http://gcc.gnu.org/onlinedocs/libstdc++/manual/localization.html
+       */
+       char
+       narrow(char_type __c, char __dfault) const
+@@ -437,7 +437,7 @@
+        *  @endcode
+        *
+        *  Additional l10n notes are at
+-       *  http://gcc.gnu.org/onlinedocs/libstdc++/22_locale/howto.html
++       *  http://gcc.gnu.org/onlinedocs/libstdc++/manual/localization.html
+       */
+       char_type
+       widen(char __c) const
+diff -Naur gcc-4.3.2.orig/libstdc++-v3/include/bits/char_traits.h gcc-4.3.2/libstdc++-v3/include/bits/char_traits.h
+--- gcc-4.3.2.orig/libstdc++-v3/include/bits/char_traits.h	2008-03-26 16:21:44.000000000 -0700
++++ gcc-4.3.2/libstdc++-v3/include/bits/char_traits.h	2008-12-01 20:57:44.000000000 -0800
+@@ -81,7 +81,7 @@
+    *  may not be specialized for fundamental types, but classes in
+    *  namespace __gnu_cxx may be.
+    *
+-   *  See http://gcc.gnu.org/onlinedocs/libstdc++/21_strings/howto.html#5
++   *  See http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt05ch13s03.html
+    *  for advice on how to make use of this class for "unusual" character
+    *  types. Also, check out include/ext/pod_char_traits.h.  
+    */
+@@ -222,7 +222,7 @@
+    *  __gnu_cxx::char_traits, it is possible to achieve a more
+    *  appropriate definition by specializing __gnu_cxx::char_traits.
+    *
+-   *  See http://gcc.gnu.org/onlinedocs/libstdc++/21_strings/howto.html#5
++   *  See http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt05ch13s03.html
+    *  for advice on how to make use of this class for "unusual" character
+    *  types. Also, check out include/ext/pod_char_traits.h.
+   */
+diff -Naur gcc-4.3.2.orig/libstdc++-v3/include/bits/cpp_type_traits.h gcc-4.3.2/libstdc++-v3/include/bits/cpp_type_traits.h
+--- gcc-4.3.2.orig/libstdc++-v3/include/bits/cpp_type_traits.h	2007-10-27 05:07:04.000000000 -0700
++++ gcc-4.3.2/libstdc++-v3/include/bits/cpp_type_traits.h	2008-12-12 00:46:26.000000000 -0800
+@@ -100,6 +100,15 @@
+       typedef typename __truth_type<__value>::__type __type;
+     };
+ 
++  // N.B. The conversions to bool are needed due to the issue
++  // explained in c++/19404.
++  template<class _Sp, class _Tp>
++    struct __traitand
++    {
++      enum { __value = bool(_Sp::__value) && bool(_Tp::__value) };
++      typedef typename __truth_type<__value>::__type __type;
++    };
++
+   // Compare for equality of types.
+   template<typename, typename>
+     struct __are_same
+diff -Naur gcc-4.3.2.orig/libstdc++-v3/include/bits/ios_base.h gcc-4.3.2/libstdc++-v3/include/bits/ios_base.h
+--- gcc-4.3.2.orig/libstdc++-v3/include/bits/ios_base.h	2008-01-31 10:44:55.000000000 -0800
++++ gcc-4.3.2/libstdc++-v3/include/bits/ios_base.h	2008-12-01 20:57:44.000000000 -0800
+@@ -215,7 +215,7 @@
+       failure(const string& __str) throw();
+ 
+       // This declaration is not useless:
+-      // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118
++      // http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Vague-Linkage.html
+       virtual
+       ~failure() throw();
+ 
+@@ -368,8 +368,7 @@
+ 
+     /// Perform input and output in binary mode (as opposed to text mode).
+     /// This is probably not what you think it is; see
+-    /// http://gcc.gnu.org/onlinedocs/libstdc++/27_io/howto.html#3 and
+-    /// http://gcc.gnu.org/onlinedocs/libstdc++/27_io/howto.html#7 for more.
++    /// http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt11ch27s02.html
+     static const openmode binary =	_S_bin;
+ 
+     /// Open for input.  Default for @c ifstream and fstream.
+@@ -663,7 +662,7 @@
+      *  The synchronization referred to is @e only that between the standard
+      *  C facilities (e.g., stdout) and the standard C++ objects (e.g.,
+      *  cout).  User-declared streams are unaffected.  See
+-     *  http://gcc.gnu.org/onlinedocs/libstdc++/27_io/howto.html#8 for more.
++     *  http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt11ch28s02.html
+     */
+     static bool
+     sync_with_stdio(bool __sync = true);
+diff -Naur gcc-4.3.2.orig/libstdc++-v3/include/bits/stl_map.h gcc-4.3.2/libstdc++-v3/include/bits/stl_map.h
+--- gcc-4.3.2.orig/libstdc++-v3/include/bits/stl_map.h	2008-01-31 10:44:55.000000000 -0800
++++ gcc-4.3.2/libstdc++-v3/include/bits/stl_map.h	2008-12-01 20:57:44.000000000 -0800
+@@ -486,7 +486,7 @@
+        *  cause no gains in efficiency.
+        *
+        *  See
+-       *  http://gcc.gnu.org/onlinedocs/libstdc++/23_containers/howto.html#4
++       *  http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt07ch17.html
+        *  for more on "hinting".
+        *
+        *  Insertion requires logarithmic time (if the hint is not taken).
+diff -Naur gcc-4.3.2.orig/libstdc++-v3/include/bits/stl_multimap.h gcc-4.3.2/libstdc++-v3/include/bits/stl_multimap.h
+--- gcc-4.3.2.orig/libstdc++-v3/include/bits/stl_multimap.h	2008-03-13 10:48:42.000000000 -0700
++++ gcc-4.3.2/libstdc++-v3/include/bits/stl_multimap.h	2008-12-01 20:57:44.000000000 -0800
+@@ -422,8 +422,8 @@
+        *  improve the performance of the insertion process.  A bad hint would
+        *  cause no gains in efficiency.
+        *
+-       *  See http://gcc.gnu.org/onlinedocs/libstdc++/23_containers/howto.html#4
+-       *  for more on "hinting".
++       *  For more on "hinting," see:
++       *  http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt07ch17.html
+        *
+        *  Insertion requires logarithmic time (if the hint is not taken).
+        */
+@@ -432,7 +432,8 @@
+       { return _M_t._M_insert_equal_(__position, __x); }
+ 
+       /**
+-       *  @brief A template function that attempts to insert a range of elements.
++       *  @brief A template function that attempts to insert a range
++       *  of elements.
+        *  @param  first  Iterator pointing to the start of the range to be
+        *                 inserted.
+        *  @param  last  Iterator pointing to the end of the range.
+diff -Naur gcc-4.3.2.orig/libstdc++-v3/include/bits/stl_multiset.h gcc-4.3.2/libstdc++-v3/include/bits/stl_multiset.h
+--- gcc-4.3.2.orig/libstdc++-v3/include/bits/stl_multiset.h	2008-01-31 10:44:55.000000000 -0800
++++ gcc-4.3.2/libstdc++-v3/include/bits/stl_multiset.h	2008-12-01 20:57:44.000000000 -0800
+@@ -384,7 +384,7 @@
+        *  improve the performance of the insertion process.  A bad hint would
+        *  cause no gains in efficiency.
+        *
+-       *  See http://gcc.gnu.org/onlinedocs/libstdc++/23_containers/howto.html#4
++       *  See http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt07ch17.html
+        *  for more on "hinting".
+        *
+        *  Insertion requires logarithmic time (if the hint is not taken).
+diff -Naur gcc-4.3.2.orig/libstdc++-v3/include/bits/stl_relops.h gcc-4.3.2/libstdc++-v3/include/bits/stl_relops.h
+--- gcc-4.3.2.orig/libstdc++-v3/include/bits/stl_relops.h	2008-01-18 00:16:51.000000000 -0800
++++ gcc-4.3.2/libstdc++-v3/include/bits/stl_relops.h	2008-12-01 20:57:44.000000000 -0800
+@@ -60,8 +60,8 @@
+  *  Inclusion of this file has been removed from
+  *  all of the other STL headers for safety reasons, except std_utility.h.
+  *  For more information, see the thread of about twenty messages starting
+- *  with http://gcc.gnu.org/ml/libstdc++/2001-01/msg00223.html , or the
+- *  FAQ at http://gcc.gnu.org/onlinedocs/libstdc++/faq/index.html#4_4 .
++ *  with http://gcc.gnu.org/ml/libstdc++/2001-01/msg00223.html, or
++ *  http://gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.ambiguous_overloads
+  *
+  *  Short summary:  the rel_ops operators should be avoided for the present.
+  */
+diff -Naur gcc-4.3.2.orig/libstdc++-v3/include/bits/stl_set.h gcc-4.3.2/libstdc++-v3/include/bits/stl_set.h
+--- gcc-4.3.2.orig/libstdc++-v3/include/bits/stl_set.h	2008-01-31 10:44:55.000000000 -0800
++++ gcc-4.3.2/libstdc++-v3/include/bits/stl_set.h	2008-12-01 20:57:44.000000000 -0800
+@@ -396,9 +396,9 @@
+        *  potentially improve the performance of the insertion process.  A bad
+        *  hint would cause no gains in efficiency.
+        *
+-       *  See http://gcc.gnu.org/onlinedocs/libstdc++/23_containers/howto.html#4
+-       *  for more on "hinting".
+-       *
++       *  For more on "hinting", see:
++       *  http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt07ch17.html
++       *  
+        *  Insertion requires logarithmic time (if the hint is not taken).
+        */
+       iterator
+@@ -406,7 +406,8 @@
+       { return _M_t._M_insert_unique_(__position, __x); }
+ 
+       /**
+-       *  @brief A template function that attempts to insert a range of elements.
++       *  @brief A template function that attempts to insert a range
++       *  of elements.
+        *  @param  first  Iterator pointing to the start of the range to be
+        *                 inserted.
+        *  @param  last  Iterator pointing to the end of the range.
+diff -Naur gcc-4.3.2.orig/libstdc++-v3/include/c_global/cmath gcc-4.3.2/libstdc++-v3/include/c_global/cmath
+--- gcc-4.3.2.orig/libstdc++-v3/include/c_global/cmath	2007-11-26 10:24:54.000000000 -0800
++++ gcc-4.3.2/libstdc++-v3/include/c_global/cmath	2008-12-12 00:46:26.000000000 -0800
+@@ -168,8 +168,8 @@
+   template<typename _Tp, typename _Up>
+     inline
+     typename __gnu_cxx::__promote_2<
+-    typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value
+-				    && __is_arithmetic<_Up>::__value,
++    typename __gnu_cxx::__enable_if<__traitand<__is_arithmetic<_Tp>,
++					       __is_arithmetic<_Up> >::__value,
+ 				    _Tp>::__type, _Up>::__type
+     atan2(_Tp __y, _Up __x)
+     {
+@@ -383,8 +383,8 @@
+   template<typename _Tp, typename _Up>
+     inline
+     typename __gnu_cxx::__promote_2<
+-    typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value
+-				    && __is_arithmetic<_Up>::__value,
++    typename __gnu_cxx::__enable_if<__traitand<__is_arithmetic<_Tp>,
++					       __is_arithmetic<_Up> >::__value,
+ 				    _Tp>::__type, _Up>::__type
+     pow(_Tp __x, _Up __y)
+     {
+diff -Naur gcc-4.3.2.orig/libstdc++-v3/include/c_std/cmath gcc-4.3.2/libstdc++-v3/include/c_std/cmath
+--- gcc-4.3.2.orig/libstdc++-v3/include/c_std/cmath	2007-11-26 10:24:54.000000000 -0800
++++ gcc-4.3.2/libstdc++-v3/include/c_std/cmath	2008-12-12 00:46:26.000000000 -0800
+@@ -157,9 +157,10 @@
+   { return __builtin_atan2l(__y, __x); }
+ 
+   template<typename _Tp, typename _Up>
+-    inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value
+-    					   && __is_integer<_Up>::__value, 
+-					   double>::__type
++    inline
++    typename __gnu_cxx::__enable_if<__traitand<__is_integer<_Tp>,
++					       __is_integer<_Up> >::__value,
++				    double>::__type
+     atan2(_Tp __y, _Up __x)
+     { return __builtin_atan2(__y, __x); }
+ 
+diff -Naur gcc-4.3.2.orig/libstdc++-v3/include/std/bitset gcc-4.3.2/libstdc++-v3/include/std/bitset
+--- gcc-4.3.2.orig/libstdc++-v3/include/std/bitset	2008-01-31 10:44:55.000000000 -0800
++++ gcc-4.3.2/libstdc++-v3/include/std/bitset	2008-12-01 20:57:44.000000000 -0800
+@@ -634,7 +634,8 @@
+    *     }
+    *  @endcode
+    *
+-   *  Also see http://gcc.gnu.org/onlinedocs/libstdc++/ext/sgiexts.html#ch23
++   *  Also see:
++   *  http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt12ch33s02.html
+    *  for a description of extensions.
+    *
+    *  Most of the actual code isn't contained in %bitset<> itself, but in the
+diff -Naur gcc-4.3.2.orig/libstdc++-v3/include/std/fstream gcc-4.3.2/libstdc++-v3/include/std/fstream
+--- gcc-4.3.2.orig/libstdc++-v3/include/std/fstream	2008-01-31 10:44:55.000000000 -0800
++++ gcc-4.3.2/libstdc++-v3/include/std/fstream	2008-12-01 20:57:44.000000000 -0800
+@@ -325,7 +325,7 @@
+        *  If no file has been opened, and both @a s and @a n are zero, then
+        *  the stream becomes unbuffered.  Otherwise, @c s is used as a
+        *  buffer; see
+-       *  http://gcc.gnu.org/onlinedocs/libstdc++/27_io/howto.html#2
++       *  http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt11ch25s02.html
+        *  for more.
+       */
+       virtual __streambuf_type*
+diff -Naur gcc-4.3.2.orig/libstdc++-v3/include/std/iosfwd gcc-4.3.2/libstdc++-v3/include/std/iosfwd
+--- gcc-4.3.2.orig/libstdc++-v3/include/std/iosfwd	2007-04-11 03:12:47.000000000 -0700
++++ gcc-4.3.2/libstdc++-v3/include/std/iosfwd	2008-12-01 20:57:44.000000000 -0800
+@@ -125,7 +125,7 @@
+    *  themselves (e.g., "class ostream;") is not valid ISO C++.
+    *
+    *  For more specific declarations, see
+-   *  http://gcc.gnu.org/onlinedocs/libstdc++/27_io/howto.html#10
++   *  http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt11ch24.html
+    *
+    *  @{
+   */
+diff -Naur gcc-4.3.2.orig/libstdc++-v3/include/std/iostream gcc-4.3.2/libstdc++-v3/include/std/iostream
+--- gcc-4.3.2.orig/libstdc++-v3/include/std/iostream	2007-03-04 14:59:49.000000000 -0800
++++ gcc-4.3.2/libstdc++-v3/include/std/iostream	2008-12-01 20:57:44.000000000 -0800
+@@ -1,6 +1,6 @@
+ // Standard iostream objects -*- C++ -*-
+ 
+-// Copyright (C) 1997, 1998, 1999, 2001, 2002, 2005
++// Copyright (C) 1997, 1998, 1999, 2001, 2002, 2005, 2008
+ // Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+@@ -52,8 +52,8 @@
+    *
+    *  The &lt;iostream&gt; header declares the eight <em>standard stream
+    *  objects</em>.  For other declarations, see
+-   *  http://gcc.gnu.org/onlinedocs/libstdc++/27_io/howto.html#10 and the
+-   *  @link s27_2_iosfwd I/O forward declarations @endlink
++   *  http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt11ch24.html
++   *  and the @link s27_2_iosfwd I/O forward declarations @endlink
+    *
+    *  They are required by default to cooperate with the global C library's
+    *  @c FILE streams, and to be available during program startup and
+diff -Naur gcc-4.3.2.orig/libstdc++-v3/include/std/istream gcc-4.3.2/libstdc++-v3/include/std/istream
+--- gcc-4.3.2.orig/libstdc++-v3/include/std/istream	2008-02-10 07:48:10.000000000 -0800
++++ gcc-4.3.2/libstdc++-v3/include/std/istream	2008-12-01 20:57:44.000000000 -0800
+@@ -630,10 +630,7 @@
+    *  Objects of this class are created before all of the standard
+    *  extractors are run.  It is responsible for "exception-safe prefix and
+    *  suffix operations," although only prefix actions are currently required
+-   *  by the standard.  Additional actions may be added by the
+-   *  implementation, and we list them in
+-   *  http://gcc.gnu.org/onlinedocs/libstdc++/17_intro/howto.html#5
+-   *  under [27.6] notes.
++   *  by the standard. 
+   */
+   template<typename _CharT, typename _Traits>
+     class basic_istream<_CharT, _Traits>::sentry
+diff -Naur gcc-4.3.2.orig/libstdc++-v3/include/std/ostream gcc-4.3.2/libstdc++-v3/include/std/ostream
+--- gcc-4.3.2.orig/libstdc++-v3/include/std/ostream	2008-02-28 16:00:39.000000000 -0800
++++ gcc-4.3.2/libstdc++-v3/include/std/ostream	2008-12-01 20:57:44.000000000 -0800
+@@ -375,10 +375,7 @@
+    *
+    *  Objects of this class are created before all of the standard
+    *  inserters are run.  It is responsible for "exception-safe prefix and
+-   *  suffix operations."  Additional actions may be added by the
+-   *  implementation, and we list them in
+-   *  http://gcc.gnu.org/onlinedocs/libstdc++/17_intro/howto.html#5
+-   *  under [27.6] notes.
++   *  suffix operations." 
+   */
+   template <typename _CharT, typename _Traits>
+     class basic_ostream<_CharT, _Traits>::sentry
+diff -Naur gcc-4.3.2.orig/libstdc++-v3/include/std/sstream gcc-4.3.2/libstdc++-v3/include/std/sstream
+--- gcc-4.3.2.orig/libstdc++-v3/include/std/sstream	2008-01-18 00:16:51.000000000 -0800
++++ gcc-4.3.2/libstdc++-v3/include/std/sstream	2008-12-01 20:57:44.000000000 -0800
+@@ -193,7 +193,7 @@
+        *
+        *  If no buffer has already been created, and both @a s and @a n are
+        *  non-zero, then @c s is used as a buffer; see
+-       *  http://gcc.gnu.org/onlinedocs/libstdc++/27_io/howto.html#2
++       *  http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt11ch25s02.html
+        *  for more.
+       */
+       virtual __streambuf_type*
+diff -Naur gcc-4.3.2.orig/libstdc++-v3/include/std/streambuf gcc-4.3.2/libstdc++-v3/include/std/streambuf
+--- gcc-4.3.2.orig/libstdc++-v3/include/std/streambuf	2008-01-31 10:44:55.000000000 -0800
++++ gcc-4.3.2/libstdc++-v3/include/std/streambuf	2008-12-01 20:57:44.000000000 -0800
+@@ -563,8 +563,8 @@
+        *
+        *  Each derived class provides its own appropriate behavior.  See
+        *  the next-to-last paragraph of 
+-       *  http://gcc.gnu.org/onlinedocs/libstdc++/27_io/howto.html#2 for
+-       *  more on this function.
++       *  http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt11ch25s02.html
++       *  for more on this function.
+        *
+        *  @note  Base class version does nothing, returns @c this.
+       */
+@@ -660,7 +660,7 @@
+        *
+        *  A functioning input streambuf can be created by overriding only
+        *  this function (no buffer area will be used).  For an example, see
+-       *  http://gcc.gnu.org/onlinedocs/libstdc++/27_io/howto.html#6
++       *  http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt11ch25.html
+        *
+        *  @note  Base class version does nothing, returns eof().
+       */
+diff -Naur gcc-4.3.2.orig/libstdc++-v3/testsuite/26_numerics/headers/cmath/37582.cc gcc-4.3.2/libstdc++-v3/testsuite/26_numerics/headers/cmath/37582.cc
+--- gcc-4.3.2.orig/libstdc++-v3/testsuite/26_numerics/headers/cmath/37582.cc	1969-12-31 16:00:00.000000000 -0800
++++ gcc-4.3.2/libstdc++-v3/testsuite/26_numerics/headers/cmath/37582.cc	2008-12-12 00:46:26.000000000 -0800
+@@ -0,0 +1,44 @@
++// Copyright (C) 2008 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 2, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING.  If not, write to the Free
++// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
++// USA.
++
++// As a special exception, you may use this file as part of a free software
++// library without restriction.  Specifically, if other files instantiate
++// templates or use macros or inline functions from this file, or you compile
++// this file and link it with other files to produce an executable, this
++// file does not by itself cause the resulting executable to be covered by
++// the GNU General Public License.  This exception does not however
++// invalidate any other reasons why the executable file might be covered by
++// the GNU General Public License.
++
++// { dg-do compile }
++
++#include <cmath>
++
++struct foo
++{
++  foo (double);
++};
++
++bool operator &&(int, const foo &);
++
++// libstdc++/37582
++double
++test01(double x)
++{
++  return std::pow (x, 2.0);
++}
+diff -Naur gcc-4.3.2.orig/libstdc++-v3/testsuite/27_io/ios_base/cons/assign_neg.cc gcc-4.3.2/libstdc++-v3/testsuite/27_io/ios_base/cons/assign_neg.cc
+--- gcc-4.3.2.orig/libstdc++-v3/testsuite/27_io/ios_base/cons/assign_neg.cc	2008-01-18 00:16:51.000000000 -0800
++++ gcc-4.3.2/libstdc++-v3/testsuite/27_io/ios_base/cons/assign_neg.cc	2008-12-01 20:57:44.000000000 -0800
+@@ -43,5 +43,5 @@
+ }
+ // { dg-error "synthesized" "" { target *-*-* } 42 } 
+ // { dg-error "within this context" "" { target *-*-* } 35 } 
+-// { dg-error "is private" "" { target *-*-* } 786 } 
++// { dg-error "is private" "" { target *-*-* } 785 } 
+ // { dg-error "operator=" "" { target *-*-* } 0 } 
+diff -Naur gcc-4.3.2.orig/libstdc++-v3/testsuite/27_io/ios_base/cons/copy_neg.cc gcc-4.3.2/libstdc++-v3/testsuite/27_io/ios_base/cons/copy_neg.cc
+--- gcc-4.3.2.orig/libstdc++-v3/testsuite/27_io/ios_base/cons/copy_neg.cc	2008-01-18 00:16:51.000000000 -0800
++++ gcc-4.3.2/libstdc++-v3/testsuite/27_io/ios_base/cons/copy_neg.cc	2008-12-01 20:57:44.000000000 -0800
+@@ -43,5 +43,5 @@
+ }
+ // { dg-error "within this context" "" { target *-*-* } 36 } 
+ // { dg-error "synthesized" "" { target *-*-* } 42 } 
+-// { dg-error "is private" "" { target *-*-* } 783 } 
++// { dg-error "is private" "" { target *-*-* } 782 } 
+ // { dg-error "copy constructor" "" { target *-*-* } 0 } 
+diff -Naur gcc-4.3.2.orig/libstdc++-v3/testsuite/Makefile.am gcc-4.3.2/libstdc++-v3/testsuite/Makefile.am
+--- gcc-4.3.2.orig/libstdc++-v3/testsuite/Makefile.am	2008-01-18 00:16:51.000000000 -0800
++++ gcc-4.3.2/libstdc++-v3/testsuite/Makefile.am	2008-12-04 15:00:19.000000000 -0800
+@@ -21,7 +21,9 @@
+ ## Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ ## USA.
+ 
+-AUTOMAKE_OPTIONS = dejagnu nostdinc
++AUTOMAKE_OPTIONS = nostdinc
++RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir
++EXPECT = expect
+ 
+ include $(top_srcdir)/fragment.am
+ 
+@@ -86,6 +88,80 @@
+ 	  fi; \
+ 	  ${extract_symvers} ../src/.libs/libstdc++.so $${output})
+ 
++%/site.exp: site.exp
++	-test -d $* || mkdir $*
++	@srcdir=`cd $(srcdir); ${PWD_COMMAND}`;
++	objdir=`${PWD_COMMAND}`/$*; \
++	sed -e "s|^set srcdir .*$$|set srcdir $$srcdir|" \
++	    -e "s|^set objdir .*$$|set objdir $$objdir|" \
++	    site.exp > $*/site.exp.tmp
++	@-rm -f $*/site.bak
++	@test ! -f $*/site.exp || mv $*/site.exp $*/site.bak
++	@mv $*/site.exp.tmp $*/site.exp
++
++check_DEJAGNU_normal_targets = $(patsubst %,check-DEJAGNUnormal%,0 1 2 3)
++$(check_DEJAGNU_normal_targets): check-DEJAGNUnormal%: normal%/site.exp
++
++# Run the testsuite in normal mode.
++check-DEJAGNU $(check_DEJAGNU_normal_targets): check-DEJAGNU%: site.exp
++	if [ -z "$*$(filter-out --target_board=%, $(RUNTESTFLAGS))" ] \
++	    && [ "$(filter -j, $(MFLAGS))" = "-j" ]; then \
++	  $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNUnormal0 check-DEJAGNUnormal1 \
++		  check-DEJAGNUnormal2 check-DEJAGNUnormal3; \
++	  for idx in 0 1 2 3; do \
++	    mv -f normal$$idx/libstdc++.sum normal$$idx/libstdc++.sum.sep; \
++	    mv -f normal$$idx/libstdc++.log normal$$idx/libstdc++.log.sep; \
++	  done; \
++	  mv -f libstdc++.sum libstdc++.sum.sep; \
++	  mv -f libstdc++.log libstdc++.log.sep; \
++	  $(SHELL) $(srcdir)/../../contrib/dg-extract-results.sh \
++	    libstdc++.sum.sep normal0/libstdc++.sum.sep \
++	    normal1/libstdc++.sum.sep normal2/libstdc++.sum.sep \
++	    normal3/libstdc++.sum.sep > libstdc++.sum; \
++	  $(SHELL) $(srcdir)/../../contrib/dg-extract-results.sh -L \
++	    libstdc++.log.sep normal0/libstdc++.log.sep \
++	    normal1/libstdc++.log.sep normal2/libstdc++.log.sep \
++	    normal3/libstdc++.log.sep > libstdc++.log; \
++	  exit 0; \
++	fi; \
++	srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \
++	EXPECT=$(EXPECT); export EXPECT; \
++	runtest=$(RUNTEST); \
++	if [ -z "$$runtest" ]; then runtest=runtest; fi; \
++	tool=libstdc++; \
++	dirs=; \
++	case "$*" in \
++	  normal0) \
++	    if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
++	      $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) \
++			$(RUNTESTFLAGS) abi.exp; \
++	    else echo "WARNING: could not find \`runtest'" 1>&2; :;\
++	    fi; \
++	    dirs="`cd $$srcdir; echo [013-9][0-9]_*/* [abep]*/*`";; \
++	  normal1) \
++	    dirs="`cd $$srcdir; echo 2[0-2]_*/*`";; \
++	  normal2) \
++	    dirs="`cd $$srcdir; echo 2[4-9]_*/*`";; \
++	  normal3) \
++	    dirs="`cd $$srcdir; echo 23_*/* t*/*`";; \
++	esac; \
++	if [ -n "$*" ]; then cd "$*"; fi; \
++	if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
++	  if [ -n "$$dirs" ]; then \
++	    $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) \
++		    $(RUNTESTFLAGS) \
++		    "conformance.exp=`echo $$dirs | sed 's/ /* /g;s/$$/*/'`"; \
++	  else \
++	    $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) \
++		    $(RUNTESTFLAGS); \
++	  fi; \
++	else echo "WARNING: could not find \`runtest'" 1>&2; :;\
++	fi
++
++check-am:
++	$(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU
++.PHONY: check-DEJAGNU
++
+ # Use 'new-abi-baseline' to create an initial symbol file.  Then run
+ # 'check-abi' to test for changes against that file.
+ check-abi: site.exp baseline_symbols 
+diff -Naur gcc-4.3.2.orig/libstdc++-v3/testsuite/Makefile.in gcc-4.3.2/libstdc++-v3/testsuite/Makefile.in
+--- gcc-4.3.2.orig/libstdc++-v3/testsuite/Makefile.in	2008-02-11 02:05:33.000000000 -0800
++++ gcc-4.3.2/libstdc++-v3/testsuite/Makefile.in	2008-12-04 15:00:19.000000000 -0800
+@@ -63,10 +63,6 @@
+ am__depfiles_maybe =
+ SOURCES =
+ DIST_SOURCES =
+-DEJATOOL = $(PACKAGE)
+-RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir
+-EXPECT = expect
+-RUNTEST = runtest
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ ABI_TWEAKS_SRCDIR = @ABI_TWEAKS_SRCDIR@
+ ACLOCAL = @ACLOCAL@
+@@ -256,7 +252,9 @@
+ target_os = @target_os@
+ target_vendor = @target_vendor@
+ toplevel_srcdir = @toplevel_srcdir@
+-AUTOMAKE_OPTIONS = dejagnu nostdinc
++AUTOMAKE_OPTIONS = nostdinc
++RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir
++EXPECT = expect
+ 
+ # May be used by various substitution variables.
+ gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
+@@ -288,6 +286,7 @@
+ 
+ baseline_file = ${baseline_dir}/baseline_symbols.txt
+ extract_symvers = $(glibcxx_srcdir)/scripts/extract_symvers
++check_DEJAGNU_normal_targets = $(patsubst %,check-DEJAGNUnormal%,0 1 2 3)
+ 
+ # Runs the testsuite, but in compile only mode.
+ # Can be used to test sources with non-GNU FE's at various warning
+@@ -365,23 +364,6 @@
+ CTAGS:
+ 
+ 
+-check-DEJAGNU: site.exp
+-	srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \
+-	EXPECT=$(EXPECT); export EXPECT; \
+-	runtest=$(RUNTEST); \
+-	if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
+-	  l='$(DEJATOOL)'; for tool in $$l; do \
+-	    $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) $(RUNTESTFLAGS); \
+-	  done; \
+-	else echo "WARNING: could not find \`runtest'" 1>&2; :;\
+-	fi
+-
+-distclean-DEJAGNU:
+-	-rm -f site.exp site.bak
+-	-l='$(DEJATOOL)'; for tool in $$l; do \
+-	  rm -f $$tool.sum $$tool.log; \
+-	done
+-
+ distdir: $(DISTFILES)
+ 	$(mkdir_p) $(distdir)/..
+ 	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+@@ -411,7 +393,6 @@
+ 	  fi; \
+ 	done
+ check-am: all-am
+-	$(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU
+ check: check-am
+ all-am: Makefile
+ installdirs:
+@@ -446,8 +427,7 @@
+ 
+ distclean: distclean-am
+ 	-rm -f Makefile
+-distclean-am: clean-am distclean-DEJAGNU distclean-generic \
+-	distclean-libtool
++distclean-am: clean-am distclean-generic distclean-libtool
+ 
+ dvi: dvi-am
+ 
+@@ -487,16 +467,15 @@
+ 
+ uninstall-am: uninstall-info-am
+ 
+-.PHONY: all all-am check check-DEJAGNU check-am clean clean-generic \
+-	clean-libtool clean-local distclean distclean-DEJAGNU \
+-	distclean-generic distclean-libtool distdir dvi dvi-am html \
+-	html-am info info-am install install-am install-data \
+-	install-data-am install-exec install-exec-am install-info \
+-	install-info-am install-man install-strip installcheck \
+-	installcheck-am installdirs maintainer-clean \
+-	maintainer-clean-generic mostlyclean mostlyclean-generic \
+-	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+-	uninstall-info-am
++.PHONY: all all-am check check-am clean clean-generic clean-libtool \
++	clean-local distclean distclean-generic distclean-libtool \
++	distdir dvi dvi-am html html-am info info-am install \
++	install-am install-data install-data-am install-exec \
++	install-exec-am install-info install-info-am install-man \
++	install-strip installcheck installcheck-am installdirs \
++	maintainer-clean maintainer-clean-generic mostlyclean \
++	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
++	uninstall uninstall-am uninstall-info-am
+ 
+ 
+ # This rule generates all of the testsuite_files* lists at once.
+@@ -549,6 +528,78 @@
+ 	  fi; \
+ 	  ${extract_symvers} ../src/.libs/libstdc++.so $${output})
+ 
++%/site.exp: site.exp
++	-test -d $* || mkdir $*
++	@srcdir=`cd $(srcdir); ${PWD_COMMAND}`;
++	objdir=`${PWD_COMMAND}`/$*; \
++	sed -e "s|^set srcdir .*$$|set srcdir $$srcdir|" \
++	    -e "s|^set objdir .*$$|set objdir $$objdir|" \
++	    site.exp > $*/site.exp.tmp
++	@-rm -f $*/site.bak
++	@test ! -f $*/site.exp || mv $*/site.exp $*/site.bak
++	@mv $*/site.exp.tmp $*/site.exp
++$(check_DEJAGNU_normal_targets): check-DEJAGNUnormal%: normal%/site.exp
++
++# Run the testsuite in normal mode.
++check-DEJAGNU $(check_DEJAGNU_normal_targets): check-DEJAGNU%: site.exp
++	if [ -z "$*$(filter-out --target_board=%, $(RUNTESTFLAGS))" ] \
++	    && [ "$(filter -j, $(MFLAGS))" = "-j" ]; then \
++	  $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNUnormal0 check-DEJAGNUnormal1 \
++		  check-DEJAGNUnormal2 check-DEJAGNUnormal3; \
++	  for idx in 0 1 2 3; do \
++	    mv -f normal$$idx/libstdc++.sum normal$$idx/libstdc++.sum.sep; \
++	    mv -f normal$$idx/libstdc++.log normal$$idx/libstdc++.log.sep; \
++	  done; \
++	  mv -f libstdc++.sum libstdc++.sum.sep; \
++	  mv -f libstdc++.log libstdc++.log.sep; \
++	  $(SHELL) $(srcdir)/../../contrib/dg-extract-results.sh \
++	    libstdc++.sum.sep normal0/libstdc++.sum.sep \
++	    normal1/libstdc++.sum.sep normal2/libstdc++.sum.sep \
++	    normal3/libstdc++.sum.sep > libstdc++.sum; \
++	  $(SHELL) $(srcdir)/../../contrib/dg-extract-results.sh -L \
++	    libstdc++.log.sep normal0/libstdc++.log.sep \
++	    normal1/libstdc++.log.sep normal2/libstdc++.log.sep \
++	    normal3/libstdc++.log.sep > libstdc++.log; \
++	  exit 0; \
++	fi; \
++	srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \
++	EXPECT=$(EXPECT); export EXPECT; \
++	runtest=$(RUNTEST); \
++	if [ -z "$$runtest" ]; then runtest=runtest; fi; \
++	tool=libstdc++; \
++	dirs=; \
++	case "$*" in \
++	  normal0) \
++	    if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
++	      $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) \
++			$(RUNTESTFLAGS) abi.exp; \
++	    else echo "WARNING: could not find \`runtest'" 1>&2; :;\
++	    fi; \
++	    dirs="`cd $$srcdir; echo [013-9][0-9]_*/* [abep]*/*`";; \
++	  normal1) \
++	    dirs="`cd $$srcdir; echo 2[0-2]_*/*`";; \
++	  normal2) \
++	    dirs="`cd $$srcdir; echo 2[4-9]_*/*`";; \
++	  normal3) \
++	    dirs="`cd $$srcdir; echo 23_*/* t*/*`";; \
++	esac; \
++	if [ -n "$*" ]; then cd "$*"; fi; \
++	if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
++	  if [ -n "$$dirs" ]; then \
++	    $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) \
++		    $(RUNTESTFLAGS) \
++		    "conformance.exp=`echo $$dirs | sed 's/ /* /g;s/$$/*/'`"; \
++	  else \
++	    $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) \
++		    $(RUNTESTFLAGS); \
++	  fi; \
++	else echo "WARNING: could not find \`runtest'" 1>&2; :;\
++	fi
++
++check-am:
++	$(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU
++.PHONY: check-DEJAGNU
++
+ # Use 'new-abi-baseline' to create an initial symbol file.  Then run
+ # 'check-abi' to test for changes against that file.
+ check-abi: site.exp baseline_symbols 
+diff -Naur gcc-4.3.2.orig/libstdc++-v3/testsuite/lib/libstdc++.exp gcc-4.3.2/libstdc++-v3/testsuite/lib/libstdc++.exp
+--- gcc-4.3.2.orig/libstdc++-v3/testsuite/lib/libstdc++.exp	2007-10-05 20:06:37.000000000 -0700
++++ gcc-4.3.2/libstdc++-v3/testsuite/lib/libstdc++.exp	2008-12-02 09:44:08.000000000 -0800
+@@ -53,6 +53,8 @@
+ load_lib prune.exp
+ load_lib dg-options.exp
+ load_gcc_lib target-libpath.exp
++load_gcc_lib timeout.exp
++load_gcc_lib timeout-dg.exp
+ load_gcc_lib wrapper.exp
+ 
+ # Useful for debugging.  Pass the name of a variable and the verbosity
+@@ -89,6 +91,7 @@
+     global ld_library_path
+     global target_triplet
+     global flags_file
++    global tool_timeout
+ 
+     # We set LC_ALL and LANG to C so that we get the same error
+     # messages as expected.
+@@ -181,6 +184,9 @@
+ 	set compiler [transform "g++"]
+     }
+ 
++    # Set the default timeout for v3 tests.
++    set tool_timeout 600
++
+     # Default settings.
+     set cxx [transform "g++"]
+     set cxxflags "-g -O2 -D_GLIBCXX_ASSERT -fmessage-length=0"
+@@ -343,6 +349,24 @@
+     return [list $comp_output $output_file]
+ }
+ 
++# Override the DejaGnu dg-test in order to clear flags after a test, as
++# is done for compiler tests in gcc-dg.exp.
++
++if { [info procs saved-dg-test] == [list] } {
++    rename dg-test saved-dg-test
++
++    proc dg-test { args } {
++	global errorInfo
++
++	if { [ catch { eval saved-dg-test $args } errmsg ] } {
++	    set saved_info $errorInfo
++	    unset_timeout_vars
++	    error $errmsg $saved_info
++	}
++	unset_timeout_vars
++    }
++}
++
+ # True if the library supports wchar_t.
+ set v3-wchar_t 0
+ 
+@@ -386,7 +410,7 @@
+     }
+ 
+     lappend options "compiler=$cxx_final"
+-    lappend options "timeout=600"
++    lappend options "timeout=[timeout_value]"
+ 
+     return [target_compile $source $dest $type $options]
+ }
+@@ -451,7 +475,7 @@
+     set cc_final [concat $cc_final "-L$libsup"]
+ 
+     lappend options "compiler=$cc_final"
+-    lappend options "timeout=600"
++    lappend options "timeout=[timeout_value]"
+ 
+     return [target_compile $source $dest $type $options]
+ }
+diff -Naur gcc-4.3.2.orig/libstdc++-v3/testsuite/util/regression/trait/assoc/type_trait.hpp gcc-4.3.2/libstdc++-v3/testsuite/util/regression/trait/assoc/type_trait.hpp
+--- gcc-4.3.2.orig/libstdc++-v3/testsuite/util/regression/trait/assoc/type_trait.hpp	2007-09-12 16:06:27.000000000 -0700
++++ gcc-4.3.2/libstdc++-v3/testsuite/util/regression/trait/assoc/type_trait.hpp	2008-12-12 17:46:04.000000000 -0800
+@@ -87,7 +87,7 @@
+ 	
+ 	typedef typename basic_type_rebind::const_reference basic_type_const_reference;
+ 
+-	typedef typename cntnr::allocator::template rebind<std::pair<basic_type, basic_type> >::other pair_type_rebind;
++	typedef typename cntnr::allocator::template rebind<std::pair<const basic_type, basic_type> >::other pair_type_rebind;
+ 	typedef typename pair_type_rebind::const_reference pair_type_const_reference;
+ 
+ 	template<typename Gen>
