rpms/gcc/devel gcc4-java-rh163099.patch, NONE, 1.1 gcc4-java-urls.patch, NONE, 1.1 gcc4-libjava-ia64-backtrace.patch, NONE, 1.1 gcc4-pr22052.patch, NONE, 1.1 gcc4-vsb-stack.patch, NONE, 1.1 .cvsignore, 1.99, 1.100 gcc4-libstdc++-pr22309.patch, 1.1, 1.2 gcc4-stack-protector.patch, 1.2, 1.3 gcc4.spec, 1.56, 1.57 sources, 1.101, 1.102 gcc4-fortran-forall.patch, 1.1, NONE gcc4-fortran-hollerith.patch, 1.1, NONE gcc4-fortran-legacy.patch, 1.1, NONE gcc4-fortran-logical-integer.patch, 1.1, NONE gcc4-stack-protector-shortsize.patch, 1.1, NONE
fedora-cvs-commits at redhat.com
fedora-cvs-commits at redhat.com
Thu Jul 14 18:50:52 UTC 2005
Author: jakub
Update of /cvs/dist/rpms/gcc/devel
In directory cvs.devel.redhat.com:/tmp/cvs-serv22583
Modified Files:
.cvsignore gcc4-libstdc++-pr22309.patch
gcc4-stack-protector.patch gcc4.spec sources
Added Files:
gcc4-java-rh163099.patch gcc4-java-urls.patch
gcc4-libjava-ia64-backtrace.patch gcc4-pr22052.patch
gcc4-vsb-stack.patch
Removed Files:
gcc4-fortran-forall.patch gcc4-fortran-hollerith.patch
gcc4-fortran-legacy.patch gcc4-fortran-logical-integer.patch
gcc4-stack-protector-shortsize.patch
Log Message:
4.0.1-3
gcc4-java-rh163099.patch:
jvspec.c | 23 +++++++++++++++--------
1 files changed, 15 insertions(+), 8 deletions(-)
--- NEW FILE gcc4-java-rh163099.patch ---
2005-07-13 Tom Tromey <tromey at redhat.com>
* jvspec.c (lang_specific_driver): Put filelist_filename first on
command line.
--- gcc/java/jvspec.c 12 Jul 2005 22:35:48 -0000 1.72
+++ gcc/java/jvspec.c 13 Jul 2005 15:21:33 -0000
@@ -458,7 +458,7 @@
if (filelist_file == NULL)
pfatal_with_name (filelist_filename);
num_args -= java_files_count + class_files_count + zip_files_count;
- num_args += 2; /* for the combined arg and "-xjava" */
+ num_args += 3; /* for the combined arg "-xjava", and "-xnone" */
}
/* If we know we don't have to do anything, bail now. */
#if 0
@@ -493,11 +493,23 @@
arglist = xmalloc ((num_args + 1) * sizeof (char *));
j = 0;
- for (i = 0; i < argc; i++, j++)
+ arglist[j++] = argv[0];
+
+ if (combine_inputs || indirect_files_count > 0)
+ arglist[j++] = "-ffilelist-file";
+
+ if (combine_inputs)
+ {
+ arglist[j++] = "-xjava";
+ arglist[j++] = filelist_filename;
+ arglist[j++] = "-xnone";
+ }
+
+ for (i = 1; i < argc; i++, j++)
{
arglist[j] = argv[i];
- if ((args[i] & PARAM_ARG) || i == 0)
+ if ((args[i] & PARAM_ARG))
continue;
if ((args[i] & RESOURCE_FILE_ARG) != 0)
@@ -559,15 +571,10 @@
}
}
- if (combine_inputs || indirect_files_count > 0)
- arglist[j++] = "-ffilelist-file";
-
if (combine_inputs)
{
if (fclose (filelist_file))
pfatal_with_name (filelist_filename);
- arglist[j++] = "-xjava";
- arglist[j++] = filelist_filename;
}
/* If we saw no -O or -g option, default to -g1, for javac compatibility. */
gcc4-java-urls.patch:
gnu/java/net/protocol/file/Connection.java | 51 ++++++++++++++++++++++++++++-
gnu/java/net/protocol/jar/Connection.java | 13 +++++--
java/net/URL.java | 12 +++---
java/net/URLConnection.java | 17 ++++++---
4 files changed, 76 insertions(+), 17 deletions(-)
--- NEW FILE gcc4-java-urls.patch ---
2005-07-13 Andrew Haley <aph at redhat.com>
* gnu/java/net/protocol/file/Connection.java (unquote): New
method.
(connect): Unquote filename.
gnu/java/net/protocol/jar/Connection.java (getInputStream):
Likewise.
(getJarFile): Likewise.
* java/net/URLConnection.java (getContentHandler): Guard cast with
instaceof.
* java/net/URL.java (URL): If the file part of a spec is absolute,
ignore the file part of its context.
--- libjava/gnu/java/net/protocol/file/Connection.java 10 Sep 2004 11:06:38 -0000 1.9
+++ libjava/gnu/java/net/protocol/file/Connection.java 13 Jul 2005 15:49:37 -0000
@@ -57,6 +57,7 @@
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
+import java.net.MalformedURLException;
/**
* This subclass of java.net.URLConnection models a URLConnection via
@@ -113,6 +114,54 @@
}
/**
+ * Unquote "%" + hex quotes characters
+ *
+ * @param str The string to unquote or null.
+ *
+ * @return The unquoted string or null if str was null.
+ *
+ * @exception MalformedURLException If the given string contains invalid
+ * escape sequences.
+ *
+ * Sadly the same as URI.unquote, but there's nothing we can do to
+ * make it accessible.
+ *
+ */
+ public static String unquote(String str) throws MalformedURLException
+ {
+ if (str == null)
+ return null;
+ byte[] buf = new byte[str.length()];
+ int pos = 0;
+ for (int i = 0; i < str.length(); i++)
+ {
+ char c = str.charAt(i);
+ if (c > 127)
+ throw new MalformedURLException(str + " : Invalid character");
+ if (c == '%')
+ {
+ if (i + 2 >= str.length())
+ throw new MalformedURLException(str + " : Invalid quoted character");
+ int hi = Character.digit(str.charAt(++i), 16);
+ int lo = Character.digit(str.charAt(++i), 16);
+ if (lo < 0 || hi < 0)
+ throw new MalformedURLException(str + " : Invalid quoted character");
+ buf[pos++] = (byte) (hi * 16 + lo);
+ }
+ else
+ buf[pos++] = (byte) c;
+ }
+ try
+ {
+ return new String(buf, 0, pos, "utf-8");
+ }
+ catch (java.io.UnsupportedEncodingException x2)
+ {
+ throw (Error) new InternalError().initCause(x2);
+ }
+ }
+
+ /**
* "Connects" to the file by opening it.
*/
public void connect() throws IOException
@@ -122,7 +171,7 @@
return;
// If not connected, then file needs to be openned.
- file = new File (getURL().getFile());
+ file = new File (unquote(getURL().getFile()));
if (! file.isDirectory())
{
--- libjava/gnu/java/net/protocol/jar/Connection.java 20 May 2005 20:02:16 -0000 1.8.6.1
+++ libjava/gnu/java/net/protocol/jar/Connection.java 13 Jul 2005 15:49:37 -0000
@@ -152,7 +152,8 @@
if (jarfile != null)
{
// this is the easy way...
- ZipEntry entry = jarfile.getEntry(getEntryName());
+ ZipEntry entry = jarfile.getEntry
+ (gnu.java.net.protocol.file.Connection.unquote(getEntryName()));
if (entry != null)
return jarfile.getInputStream (entry);
@@ -163,12 +164,14 @@
JarInputStream zis = new JarInputStream(
jarFileURLConnection.getInputStream ());
+ String entryName = gnu.java.net.protocol.file.Connection.unquote(getEntryName());
+
// This is hideous, we're doing a linear search...
for (ZipEntry entry = zis.getNextEntry();
entry != null;
entry = zis.getNextEntry())
{
- if (getEntryName().equals(entry.getName()))
+ if (entryName.equals(entry.getName()))
{
int size = (int) entry.getSize();
byte[] data = new byte[size];
@@ -205,12 +208,14 @@
jar_file = (JarFile) file_cache.get (jarFileURL);
if (jar_file == null)
{
- jar_file = new JarFile (jarFileURL.getFile());
+ jar_file = new JarFile
+ (gnu.java.net.protocol.file.Connection.unquote(jarFileURL.getFile()));
file_cache.put (jarFileURL, jar_file);
}
}
else
- jar_file = new JarFile (jarFileURL.getFile());
+ jar_file = new JarFile
+ (gnu.java.net.protocol.file.Connection.unquote(jarFileURL.getFile()));
}
else
{
--- libjava/java/net/URL.java 28 Apr 2005 01:34:48 -0000 1.46.2.2
+++ libjava/java/net/URL.java 13 Jul 2005 15:49:38 -0000
@@ -408,10 +408,7 @@
// The 1.2 doc specifically says these are copied to the new URL.
host = context.host;
port = context.port;
- file = context.file;
userInfo = context.userInfo;
- if (file == null || file.length() == 0)
- file = "/";
authority = context.authority;
}
}
@@ -423,10 +420,13 @@
protocol = context.protocol;
host = context.host;
port = context.port;
- file = context.file;
userInfo = context.userInfo;
- if (file == null || file.length() == 0)
- file = "/";
+ if (spec.indexOf(":/", 1) < 0)
+ {
+ file = context.file;
+ if (file == null || file.length() == 0)
+ file = "/";
+ }
authority = context.authority;
}
else // Protocol NOT specified in spec. and no context available.
--- libjava/java/net/URLConnection.java 28 Sep 2004 11:02:35 -0000 1.34
+++ libjava/java/net/URLConnection.java 13 Jul 2005 15:49:39 -0000
@@ -979,17 +979,22 @@
if (contentType == null || contentType.equals(""))
return null;
- ContentHandler handler;
+ ContentHandler handler = null;
// See if a handler has been cached for this content type.
// For efficiency, if a content type has been searched for but not
// found, it will be in the hash table but as the contentType String
// instead of a ContentHandler.
- if ((handler = (ContentHandler) handlers.get(contentType)) != null)
- if (handler instanceof ContentHandler)
- return handler;
- else
- return null;
+ {
+ Object cachedHandler;
+ if ((cachedHandler = handlers.get(contentType)) != null)
+ {
+ if (cachedHandler instanceof ContentHandler)
+ return (ContentHandler)cachedHandler;
+ else
+ return null;
+ }
+ }
// If a non-default factory has been set, use it.
if (factory != null)
gcc4-libjava-ia64-backtrace.patch:
configure | 3 ---
configure.ac | 3 ---
2 files changed, 6 deletions(-)
--- NEW FILE gcc4-libjava-ia64-backtrace.patch ---
2005-07-14 Jakub Jelinek <jakub at redhat.com>
* configure.ac (HAVE_BACKTRACE): Define even on ia64.
* configure: Rebuilt.
--- libjava/configure.ac.jj 2005-04-12 22:28:45.000000000 +0200
+++ libjava/configure.ac 2005-07-14 18:09:23.000000000 +0200
@@ -769,9 +769,6 @@ else
AC_CHECK_HEADERS(execinfo.h unistd.h dlfcn.h)
AC_CHECK_FUNC(backtrace, [
case "$host" in
- ia64-*-linux*)
- # Has broken backtrace()
- ;;
mips*-*-linux*)
# Has broken backtrace(), but we supply our own.
if test -d sysdep; then true; else mkdir -p sysdep; fi
--- libjava/configure.jj 2005-04-12 22:28:34.000000000 +0200
+++ libjava/configure 2005-07-14 18:11:07.000000000 +0200
@@ -9303,9 +9303,6 @@ echo "${ECHO_T}$ac_cv_func_backtrace" >&
if test $ac_cv_func_backtrace = yes; then
case "$host" in
- ia64-*-linux*)
- # Has broken backtrace()
- ;;
mips*-*-linux*)
# Has broken backtrace(), but we supply our own.
if test -d sysdep; then true; else mkdir -p sysdep; fi
gcc4-pr22052.patch:
c-decl.c | 55 ++++++++++++++++-----------------------------
testsuite/gcc.dg/inline1.c | 8 ++++++
testsuite/gcc.dg/inline2.c | 5 ++++
testsuite/gcc.dg/inline3.c | 7 +++++
testsuite/gcc.dg/inline4.c | 6 ++++
testsuite/gcc.dg/inline5.c | 6 ++++
6 files changed, 52 insertions(+), 35 deletions(-)
--- NEW FILE gcc4-pr22052.patch ---
2005-06-28 Eric Christopher <echristo at redhat.com>
PR c/22052
PR c/21975
* c-decl.c (diagnose_mismatched_decls): Define DECL_EXTERN_INLINE.
Use. Fix detection of invalid extern inline redefinition.
* gcc.dg/inline1.c: New test.
* gcc.dg/inline2.c: Ditto.
* gcc.dg/inline3.c: Ditto.
* gcc.dg/inline4.c: Ditto.
* gcc.dg/inline5.c: Ditto.
--- gcc/c-decl.c 28 Jun 2005 19:51:24 -0000 1.668
+++ gcc/c-decl.c 29 Jun 2005 00:10:39 -0000 1.669
@@ -1154,6 +1154,9 @@ diagnose_mismatched_decls (tree newdecl,
bool warned = false;
bool retval = true;
+#define DECL_EXTERN_INLINE(DECL) (DECL_DECLARED_INLINE_P (DECL) \
+ && DECL_EXTERNAL (DECL))
+
/* If we have error_mark_node for either decl or type, just discard
the previous decl - we're in an error cascade already. */
if (olddecl == error_mark_node || newdecl == error_mark_node)
@@ -1282,6 +1285,7 @@ diagnose_mismatched_decls (tree newdecl,
Multiple definitions are not allowed (6.9p3,5) but GCC permits
two definitions if one is 'extern inline' and one is not. The non-
extern-inline definition supersedes the extern-inline definition. */
+
else if (TREE_CODE (newdecl) == FUNCTION_DECL)
{
/* If you declare a built-in function name as static, or
@@ -1304,45 +1308,25 @@ diagnose_mismatched_decls (tree newdecl,
{
if (DECL_INITIAL (olddecl))
{
- /* If both decls have extern inline and are in the same TU,
- reject the new decl. */
- if (DECL_DECLARED_INLINE_P (olddecl)
- && DECL_EXTERNAL (olddecl)
- && DECL_DECLARED_INLINE_P (newdecl)
- && DECL_EXTERNAL (newdecl)
+ /* If both decls are in the same TU and the new declaration
+ isn't overridding an extern inline reject the new decl.
+ When we handle c99 style inline rules we'll want to reject
+ the following:
+
+ DECL_EXTERN_INLINE (olddecl)
+ && !DECL_EXTERN_INLINE (newdecl)
+
+ if they're in the same translation unit. Until we implement
+ the full semantics we accept the construct. */
+ if (!(DECL_EXTERN_INLINE (olddecl)
+ && !DECL_EXTERN_INLINE (newdecl))
&& same_translation_unit_p (newdecl, olddecl))
{
error ("%Jredefinition of %qD", newdecl, newdecl);
locate_old_decl (olddecl, error);
return false;
}
- /* If both decls have not extern inline, reject the new decl. */
- if (!DECL_DECLARED_INLINE_P (olddecl)
- && !DECL_EXTERNAL (olddecl)
- && !DECL_DECLARED_INLINE_P (newdecl)
- && !DECL_EXTERNAL (newdecl))
- {
- error ("%Jredefinition of %qD", newdecl, newdecl);
- locate_old_decl (olddecl, error);
- return false;
- }
- /* If the new decl is declared as extern inline, error if they are
- in the same TU, otherwise retain the old decl. */
- if (!DECL_DECLARED_INLINE_P (olddecl)
- && !DECL_EXTERNAL (olddecl)
- && DECL_DECLARED_INLINE_P (newdecl)
- && DECL_EXTERNAL (newdecl))
- {
- if (same_translation_unit_p (newdecl, olddecl))
- {
- error ("%Jredefinition of %qD", newdecl, newdecl);
- locate_old_decl (olddecl, error);
- return false;
- }
- else
- retval = false;
- }
- }
+ }
}
/* If we have a prototype after an old-style function definition,
the argument types must be checked specially. */
@@ -1371,8 +1355,7 @@ diagnose_mismatched_decls (tree newdecl,
occur only in Objective C; see also above. (FIXME: Make
Objective C use normal builtins.) */
if (!DECL_IS_BUILTIN (olddecl)
- && !(DECL_EXTERNAL (olddecl)
- && DECL_DECLARED_INLINE_P (olddecl)))
+ && !DECL_EXTERN_INLINE (olddecl))
{
error ("%Jstatic declaration of %qD follows "
"non-static declaration", newdecl, newdecl);
@@ -1585,6 +1568,8 @@ diagnose_mismatched_decls (tree newdecl,
if (warned || pedwarned)
locate_old_decl (olddecl, pedwarned ? pedwarn : warning0);
+#undef DECL_EXTERN_INLINE
+
return retval;
}
--- gcc/testsuite/gcc.dg/inline1.c 1 Jan 1970 00:00:00 -0000
+++ gcc/testsuite/gcc.dg/inline1.c 29 Jun 2005 00:11:36 -0000 1.1
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-Wall -std=gnu89" } */
+/* This test is expected to fail with an error for the redefinition of foo.
+ This violates the constraint of 6.9#3 (no more than one external definition
+ of an identifier with internal linkage in the same translation unit). */
+static inline int foo(void) { return 1; } /* { dg-error "previous definition of" } */
+static inline int foo(void) { return 0; } /* { dg-error "redefinition of" } */
+
--- gcc/testsuite/gcc.dg/inline2.c 1 Jan 1970 00:00:00 -0000
+++ gcc/testsuite/gcc.dg/inline2.c 29 Jun 2005 00:11:36 -0000 1.1
@@ -0,0 +1,5 @@
+/* { dg-do compile } */
+/* { dg-options "-Wall -std=gnu89" } */
+/* This test should compile successfully. */
+extern inline int foo (void) { return 0; }
+inline int foo (void) { return 1; }
--- gcc/testsuite/gcc.dg/inline3.c 1 Jan 1970 00:00:00 -0000
+++ gcc/testsuite/gcc.dg/inline3.c 29 Jun 2005 00:11:36 -0000 1.1
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+/* { dg-options "-Wall -std=gnu89" } */
+/* This testcase should fail since we're redefining foo in the same
+ translation unit. */
+extern inline int foo(void) { return 0; }
+inline int foo (void) { return 1; } /* { dg-error "previous definition of" } */
+int foo (void) { return 2; } /* { dg-error "error: redefinition of" } */
--- gcc/testsuite/gcc.dg/inline4.c 1 Jan 1970 00:00:00 -0000
+++ gcc/testsuite/gcc.dg/inline4.c 29 Jun 2005 00:11:36 -0000 1.1
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-Wall -std=gnu89" } */
+/* This testcase should fail since we're redefining foo in the same
+ translation unit. */
+int foo (void) { return 2; } /* { dg-error "previous definition of" } */
+extern inline int foo (void) { return 1; } /* { dg-error "redefinition of" } */
--- gcc/testsuite/gcc.dg/inline5.c 1 Jan 1970 00:00:00 -0000
+++ gcc/testsuite/gcc.dg/inline5.c 29 Jun 2005 00:11:36 -0000 1.1
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-Wall -std=gnu89" } */
+/* This testcase should fail since we're redefining foo in the same
+ translation unit. */
+extern inline int foo (void) { return 2; } /* { dg-error "previous definition of" } */
+extern inline int foo (void) { return 1; } /* { dg-error "redefinition of" } */
gcc4-vsb-stack.patch:
c-pragma.c | 22 ++++++++++++----------
doc/invoke.texi | 4 ++--
2 files changed, 14 insertions(+), 12 deletions(-)
--- NEW FILE gcc4-vsb-stack.patch ---
2005-05-18 H.J. Lu <hongjiu.lu at intel.com>
PR middle-end/20303
* c-pragma.c: Include "vec.h".
(handle_pragma_visibility): Use VEC.
* doc/invoke.texi: Remove the nested visibility push limit.
--- gcc/c-pragma.c.jj 2004-11-29 15:47:36.000000000 -0800
+++ gcc/c-pragma.c 2005-05-18 09:14:46.000000000 -0700
@@ -34,6 +34,7 @@ Software Foundation, 59 Temple Place - S
#include "c-common.h"
#include "output.h"
#include "tm_p.h"
+#include "vec.h"
#include "target.h"
#define GCC_BAD(msgid) do { warning (msgid); return; } while (0)
@@ -583,15 +584,19 @@ maybe_apply_renaming_pragma (tree decl,
#ifdef HANDLE_PRAGMA_VISIBILITY
static void handle_pragma_visibility (cpp_reader *);
+typedef enum symbol_visibility visibility;
+DEF_VEC_MALLOC_P (visibility);
+
/* Sets the default visibility for symbols to something other than that
specified on the command line. */
static void
handle_pragma_visibility (cpp_reader *dummy ATTRIBUTE_UNUSED)
-{ /* Form is #pragma GCC visibility push(hidden)|pop */
- static int visstack [16], visidx;
+{
+ /* Form is #pragma GCC visibility push(hidden)|pop */
tree x;
enum cpp_ttype token;
enum { bad, push, pop } action = bad;
+ static VEC (visibility) *visstack;
token = c_lex (&x);
if (token == CPP_NAME)
@@ -608,14 +613,15 @@ handle_pragma_visibility (cpp_reader *du
{
if (pop == action)
{
- if (!visidx)
+ if (!VEC_length (visibility, visstack))
{
GCC_BAD ("No matching push for %<#pragma GCC visibility pop%>");
}
else
{
- default_visibility = visstack[--visidx];
- visibility_options.inpragma = (visidx>0);
+ default_visibility = VEC_pop (visibility, visstack);
+ visibility_options.inpragma
+ = VEC_length (visibility, visstack) != 0;
}
}
else
@@ -627,14 +633,10 @@ handle_pragma_visibility (cpp_reader *du
{
GCC_BAD ("malformed #pragma GCC visibility push");
}
- else if (visidx >= 16)
- {
- GCC_BAD ("No more than sixteen #pragma GCC visibility pushes allowed at once");
- }
else
{
const char *str = IDENTIFIER_POINTER (x);
- visstack[visidx++] = default_visibility;
+ VEC_safe_push (visibility, visstack, default_visibility);
if (!strcmp (str, "default"))
default_visibility = VISIBILITY_DEFAULT;
else if (!strcmp (str, "internal"))
--- gcc/doc/invoke.texi.jj 2005-05-18 09:09:40.000000000 -0700
+++ gcc/doc/invoke.texi 2005-05-18 09:09:40.000000000 -0700
@@ -12445,8 +12445,8 @@ For those adding visibility support to e
@samp{#pragma GCC visibility} of use. This works by you enclosing
the declarations you wish to set visibility for with (for example)
@samp{#pragma GCC visibility push(hidden)} and
- at samp{#pragma GCC visibility pop}. These can be nested up to sixteen
-times. Bear in mind that symbol visibility should be viewed @strong{as
+ at samp{#pragma GCC visibility pop}.
+Bear in mind that symbol visibility should be viewed @strong{as
part of the API interface contract} and thus all new code should
always specify visibility when it is not the default ie; declarations
only for use within the local DSO should @strong{always} be marked explicitly
Index: .cvsignore
===================================================================
RCS file: /cvs/dist/rpms/gcc/devel/.cvsignore,v
retrieving revision 1.99
retrieving revision 1.100
diff -u -r1.99 -r1.100
--- .cvsignore 10 Jul 2005 12:46:57 -0000 1.99
+++ .cvsignore 14 Jul 2005 18:50:49 -0000 1.100
@@ -1 +1 @@
-gcc-4.0.1-20050710.tar.bz2
+gcc-4.0.1-20050714.tar.bz2
gcc4-libstdc++-pr22309.patch:
mt_allocator.cc | 168 +++++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 118 insertions(+), 50 deletions(-)
Index: gcc4-libstdc++-pr22309.patch
===================================================================
RCS file: /cvs/dist/rpms/gcc/devel/gcc4-libstdc++-pr22309.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- gcc4-libstdc++-pr22309.patch 8 Jul 2005 21:09:22 -0000 1.1
+++ gcc4-libstdc++-pr22309.patch 14 Jul 2005 18:50:49 -0000 1.2
@@ -1,12 +1,25 @@
-2005-07-07 Jakub Jelinek <jakub at redhat.com>
+2005-07-14 Jakub Jelinek <jakub at redhat.com>
PR libstdc++/22309
- * src/mt_allocator.cc (__gnu_internal::__freelist_key): New type.
- (__gnu_internal::freelist_key): Change to the above type.
- (_M_initialize, _M_get_thread_id): Adjust users.
+ * src/mt_allocator.cc (__gnu_internal::freelist_mutex): Make static.
+ (__gnu_internal::__freelist_key): New type.
+ (__gnu_internal::freelist): New variable.
+ (__gnu_internal::_M_destroy_thread_key): New function.
+ (__gnu_cxx::__pool<true>::_M_destroy): Don't delete
+ _M_thread_freelist_initial.
+ (__gnu_cxx::__pool<true>::_M_initialize): Add unused attribute to __d
+ argument. Don't use _M_thread_freelist and _M_thread_freelist_initial
+ __pool<true> fields, instead use __gnu_cxx::freelist fields, call
+ gthread_key_create just once. Use
+ __gnu_internal::_M_destroy_thread_key as key destructor.
+ (__gnu_cxx::__pool<true>::_M_get_thread_id): Store size_t id rather than
+ _Thread_record* in the thread specific value. Don't use
+ _M_thread_freelist __pool<true> field, instead use __gnu_cxx::freelist
+ fields.
+ (__gnu_cxx::__pool<true>::_M_destroy_thread_key): Do nothing.
---- libstdc++-v3/src/mt_allocator.cc.jj 2005-06-07 12:31:09.000000000 +0200
-+++ libstdc++-v3/src/mt_allocator.cc 2005-07-07 19:43:31.000000000 +0200
+--- libstdc++-v3/src/mt_allocator.cc.jj 2004-10-17 17:22:03.000000000 +0200
++++ libstdc++-v3/src/mt_allocator.cc 2005-07-14 14:26:30.000000000 +0200
@@ -1,8 +1,8 @@
// Allocator details.
@@ -18,49 +31,224 @@
// 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)
-@@ -40,7 +40,14 @@ namespace __gnu_internal
- __glibcxx_mutex_define_initialized(freelist_mutex);
+@@ -37,10 +37,39 @@
+
+ namespace __gnu_internal
+ {
+- __glibcxx_mutex_define_initialized(freelist_mutex);
++ static __glibcxx_mutex_define_initialized(freelist_mutex);
#ifdef __GTHREADS
- __gthread_key_t freelist_key;
-+ struct __freelist_key
++ static struct __freelist
+ {
-+ bool _M_init;
++ typedef __gnu_cxx::__pool<true>::_Thread_record _Thread_record;
++ _Thread_record* _M_thread_freelist;
++ _Thread_record* _M_thread_freelist_array;
++ size_t _M_max_threads;
+ __gthread_key_t _M_key;
-+ ~__freelist_key() { if (_M_init) __gthread_key_delete (_M_key); }
-+ } freelist_key
-+ /* Ensure freelist_key is destructed last. */
++ ~__freelist()
++ {
++ if (_M_thread_freelist_array)
++ {
++ __gthread_key_delete (_M_key);
++ ::operator delete(static_cast<void*>(_M_thread_freelist_array));
++ }
++ }
++ } freelist
++ /* Ensure freelist is destructed last. */
+ __attribute__((init_priority (101)));
++
++ static void _M_destroy_thread_key (void* __id)
++ {
++ // Return this thread id record to front of thread_freelist.
++ typedef __gnu_cxx::__pool<true>::_Thread_record _Thread_record;
++ __gnu_cxx::lock sentry(__gnu_internal::freelist_mutex);
++ size_t _M_id = (size_t)__id;
++ _Thread_record* __tr
++ = &__gnu_internal::freelist._M_thread_freelist_array[_M_id - 1];
++ __tr->_M_next = __gnu_internal::freelist._M_thread_freelist;
++ __gnu_internal::freelist._M_thread_freelist = __tr;
++ }
#endif
}
-@@ -454,8 +461,9 @@ namespace __gnu_cxx
-
- // Initialize per thread key to hold pointer to
- // _M_thread_freelist.
+@@ -194,7 +223,6 @@ namespace __gnu_cxx
+ ::operator delete(__bin._M_used);
+ ::operator delete(__bin._M_mutex);
+ }
+- ::operator delete(_M_thread_freelist_initial);
+ }
+ else
+ {
+@@ -386,8 +414,9 @@ namespace __gnu_cxx
+ return reinterpret_cast<char*>(__block) + __options._M_align;
+ }
+
+- void
+- __pool<true>::_M_initialize(__destroy_handler __d)
++ void
++ __pool<true>::_M_initialize(__destroy_handler __d
++ __attribute__((__unused__)))
+ {
+ // _M_force_new must not change after the first allocate(),
+ // which in turn calls this method, so if it's false, it's false
+@@ -397,7 +426,7 @@ namespace __gnu_cxx
+ _M_init = true;
+ return;
+ }
+-
++
+ // Create the bins.
+ // Calculate the number of bins required based on _M_max_bytes.
+ // _M_bin_size is statically-initialized to one.
+@@ -433,29 +462,70 @@ namespace __gnu_cxx
+ // directly and have no need for this.
+ if (__gthread_active_p())
+ {
+- const size_t __k = sizeof(_Thread_record) * _M_options._M_max_threads;
+- __v = ::operator new(__k);
+- _M_thread_freelist = static_cast<_Thread_record*>(__v);
+- _M_thread_freelist_initial = __v;
+-
+- // NOTE! The first assignable thread id is 1 since the
+- // global pool uses id 0
+- size_t __i;
+- for (__i = 1; __i < _M_options._M_max_threads; ++__i)
+- {
+- _Thread_record& __tr = _M_thread_freelist[__i - 1];
+- __tr._M_next = &_M_thread_freelist[__i];
+- __tr._M_id = __i;
+- }
+-
+- // Set last record.
+- _M_thread_freelist[__i - 1]._M_next = NULL;
+- _M_thread_freelist[__i - 1]._M_id = __i;
+-
+- // Initialize per thread key to hold pointer to
+- // _M_thread_freelist.
- __gthread_key_create(&__gnu_internal::freelist_key, __d);
-
-+ __gthread_key_create(&__gnu_internal::freelist_key._M_key, __d);
-+ __gnu_internal::freelist_key._M_init = true;
++ {
++ __gnu_cxx::lock sentry(__gnu_internal::freelist_mutex);
++
++ if (!__gnu_internal::freelist._M_thread_freelist_array
++ || __gnu_internal::freelist._M_max_threads
++ < _M_options._M_max_threads)
++ {
++ const size_t __k = sizeof(_Thread_record)
++ * _M_options._M_max_threads;
++ __v = ::operator new(__k);
++ _Thread_record* _M_thread_freelist
++ = static_cast<_Thread_record*>(__v);
++
++ // NOTE! The first assignable thread id is 1 since the
++ // global pool uses id 0
++ size_t __i;
++ for (__i = 1; __i < _M_options._M_max_threads; ++__i)
++ {
++ _Thread_record& __tr = _M_thread_freelist[__i - 1];
++ __tr._M_next = &_M_thread_freelist[__i];
++ __tr._M_id = __i;
++ }
++
++ // Set last record.
++ _M_thread_freelist[__i - 1]._M_next = NULL;
++ _M_thread_freelist[__i - 1]._M_id = __i;
++
++ if (!__gnu_internal::freelist._M_thread_freelist_array)
++ {
++ // Initialize per thread key to hold pointer to
++ // _M_thread_freelist.
++ __gthread_key_create(&__gnu_internal::freelist._M_key,
++ __gnu_internal::_M_destroy_thread_key);
++ __gnu_internal::freelist._M_thread_freelist
++ = _M_thread_freelist;
++ }
++ else
++ {
++ _Thread_record* _M_old_freelist
++ = __gnu_internal::freelist._M_thread_freelist;
++ _Thread_record* _M_old_array
++ = __gnu_internal::freelist._M_thread_freelist_array;
++ __gnu_internal::freelist._M_thread_freelist
++ = &_M_thread_freelist[_M_old_freelist - _M_old_array];
++ while (_M_old_freelist)
++ {
++ size_t next_id;
++ if (_M_old_freelist->_M_next)
++ next_id = _M_old_freelist->_M_next - _M_old_array;
++ else
++ next_id = __gnu_internal::freelist._M_max_threads;
++ _M_thread_freelist[_M_old_freelist->_M_id - 1]._M_next
++ = &_M_thread_freelist[next_id];
++ _M_old_freelist = _M_old_freelist->_M_next;
++ }
++ ::operator delete(static_cast<void*>(_M_old_array));
++ }
++ __gnu_internal::freelist._M_thread_freelist_array
++ = _M_thread_freelist;
++ __gnu_internal::freelist._M_max_threads
++ = _M_options._M_max_threads;
++ }
++ }
+
const size_t __max_threads = _M_options._M_max_threads + 1;
for (size_t __n = 0; __n < _M_bin_size; ++__n)
{
-@@ -514,7 +522,7 @@ namespace __gnu_cxx
+@@ -514,23 +584,24 @@ namespace __gnu_cxx
// returns it's id.
if (__gthread_active_p())
{
- void* v = __gthread_getspecific(__gnu_internal::freelist_key);
-+ void* v = __gthread_getspecific(__gnu_internal::freelist_key._M_key);
- _Thread_record* __freelist_pos = static_cast<_Thread_record*>(v);
- if (__freelist_pos == NULL)
- {
-@@ -527,7 +535,7 @@ namespace __gnu_cxx
- _M_thread_freelist = _M_thread_freelist->_M_next;
+- _Thread_record* __freelist_pos = static_cast<_Thread_record*>(v);
+- if (__freelist_pos == NULL)
+- {
+- // Since _M_options._M_max_threads must be larger than
+- // the theoretical max number of threads of the OS the
+- // list can never be empty.
++ void* v = __gthread_getspecific(__gnu_internal::freelist._M_key);
++ size_t _M_id = (size_t)v;
++ if (_M_id == 0)
++ {
+ {
+ __gnu_cxx::lock sentry(__gnu_internal::freelist_mutex);
+- __freelist_pos = _M_thread_freelist;
+- _M_thread_freelist = _M_thread_freelist->_M_next;
++ if (__gnu_internal::freelist._M_thread_freelist)
++ {
++ _M_id = __gnu_internal::freelist._M_thread_freelist->_M_id;
++ __gnu_internal::freelist._M_thread_freelist
++ = __gnu_internal::freelist._M_thread_freelist->_M_next;
++ }
}
-
+-
- __gthread_setspecific(__gnu_internal::freelist_key,
-+ __gthread_setspecific(__gnu_internal::freelist_key._M_key,
- static_cast<void*>(__freelist_pos));
+- static_cast<void*>(__freelist_pos));
++
++ __gthread_setspecific(__gnu_internal::freelist._M_key,
++ (void*)_M_id);
}
- return __freelist_pos->_M_id;
+- return __freelist_pos->_M_id;
++ return _M_id >= _M_options._M_max_threads ? 0 : _M_id;
+ }
+
+ // Otherwise (no thread support or inactive) all requests are
+@@ -538,14 +609,11 @@ namespace __gnu_cxx
+ return 0;
+ }
+
++ // Compatibility
+ void
+- __pool<true>::_M_destroy_thread_key(void* __freelist_pos)
++ __pool<true>::_M_destroy_thread_key(void* __freelist_pos
++ __attribute__((__unused__)))
+ {
+- // Return this thread id record to front of thread_freelist.
+- __gnu_cxx::lock sentry(__gnu_internal::freelist_mutex);
+- _Thread_record* __tr = static_cast<_Thread_record*>(__freelist_pos);
+- __tr->_M_next = _M_thread_freelist;
+- _M_thread_freelist = __tr;
+ }
+ #endif
+
gcc4-stack-protector.patch:
Makefile.in | 10 +-
c-cppbuiltin.c | 6 +
cfgexpand.c | 216 +++++++++++++++++++++++++++++++++++++++++++++++-
common.opt | 12 ++
config.in | 6 +
config/i386/i386.c | 25 +++++
config/i386/i386.h | 1
config/i386/i386.md | 184 ++++++++++++++++++++++++++++++----------
config/i386/linux.h | 5 +
config/i386/linux64.h | 6 +
config/rs6000/darwin.h | 14 +--
config/rs6000/linux.h | 5 +
config/rs6000/linux64.h | 6 +
config/rs6000/rs6000.c | 162 +++++++++++++++++++++++++++++++-----
config/rs6000/rs6000.h | 93 ++++++++++----------
config/rs6000/rs6000.md | 82 ++++++++++++++++++
config/rs6000/sysv4.h | 5 -
config/s390/s390.c | 24 +++--
config/s390/s390.h | 10 +-
config/sparc/linux.h | 5 +
config/sparc/linux64.h | 6 +
config/sparc/sparc.c | 10 ++
config/sparc/sparc.h | 1
config/sparc/sparc.md | 93 ++++++++++++++++++++
configure | 48 ++++++++++
configure.ac | 39 ++++++++
doc/md.texi | 34 ++++++-
doc/tm.texi | 26 +++++
function.c | 104 +++++++++++++++++++++++
function.h | 4
gcc.c | 12 ++
params.def | 5 +
regrename.c | 6 +
target-def.h | 5 +
target.h | 11 ++
targhooks.c | 91 ++++++++++++++++++++
targhooks.h | 4
toplev.c | 10 ++
tree.h | 1
39 files changed, 1231 insertions(+), 156 deletions(-)
Index: gcc4-stack-protector.patch
===================================================================
RCS file: /cvs/dist/rpms/gcc/devel/gcc4-stack-protector.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- gcc4-stack-protector.patch 8 Jul 2005 21:26:40 -0000 1.2
+++ gcc4-stack-protector.patch 14 Jul 2005 18:50:49 -0000 1.3
@@ -1,3 +1,9 @@
+2005-07-11 Jakub Jelinek <jakub at redhat.com>
+
+ * cfgexpand.c (stack_protect_classify_type): Use TYPE_SIZE_UNIT (type)
+ instead of TYPE_MAX_VALUE (TYPE_DOMAIN (type)) to get array size in
+ bytes.
+
2005-07-07 Jakub Jelinek <jakub at redhat.com>
* config/sparc/sparc.md (stack_protect_testsi): Put clobbers after
@@ -309,9 +315,9 @@
/* A straightforward target hook doesn't work, because of problems
linking that hook's body when part of non-C front ends. */
# define preprocessing_asm_p() (cpp_get_options (pfile)->lang == CLK_ASM)
---- gcc/cfgexpand.c 26 Jun 2005 05:18:13 -0000 2.44
-+++ gcc/cfgexpand.c 27 Jun 2005 07:40:50 -0000 2.45
-@@ -37,6 +37,8 @@ Boston, MA 02110-1301, USA. */
+--- gcc/cfgexpand.c 26 Jun 2005 05:18:13 -0000
++++ gcc/cfgexpand.c 27 Jun 2005 07:40:50 -0000
+@@ -37,6 +37,8 @@ Boston, MA 02111-1307, USA. */
#include "flags.h"
#include "diagnostic.h"
#include "toplev.h"
@@ -320,7 +326,7 @@
/* Verify that there is exactly single jump instruction since last and attach
REG_BR_PROB note specifying probability.
-@@ -137,6 +139,13 @@ static size_t stack_vars_conflict_alloc;
+@@ -139,6 +141,13 @@ static size_t stack_vars_conflict_alloc;
(frame_offset+frame_phase) % PREFERRED_STACK_BOUNDARY == 0. */
static int frame_phase;
@@ -334,7 +340,7 @@
/* Discover the byte alignment to use for DECL. Ignore alignment
we can't do with expected alignment of the stack boundary. */
-@@ -487,7 +496,7 @@ expand_one_stack_var_at (tree decl, HOST
+@@ -489,7 +498,7 @@ expand_one_stack_var_at (tree decl, HOST
with that location. */
static void
@@ -343,7 +349,7 @@
{
size_t si, i, j, n = stack_vars_num;
-@@ -501,6 +510,16 @@ expand_stack_vars (void)
+@@ -503,6 +512,16 @@ expand_stack_vars (void)
if (stack_vars[i].representative != i)
continue;
@@ -360,7 +366,7 @@
offset = alloc_stack_frame_space (stack_vars[i].size,
stack_vars[i].alignb);
-@@ -620,6 +639,11 @@ expand_one_error_var (tree var)
+@@ -622,6 +641,11 @@ expand_one_error_var (tree var)
static bool
defer_stack_allocation (tree var, bool toplevel)
{
@@ -372,7 +378,7 @@
/* Variables in the outermost scope automatically conflict with
every other variable. The only reason to want to defer them
at all is that, after sorting, we can more efficiently pack
-@@ -725,6 +749,144 @@ clear_tree_used (tree block)
+@@ -727,6 +751,143 @@ clear_tree_used (tree block)
clear_tree_used (t);
}
@@ -397,15 +403,14 @@
+ || t == signed_char_type_node
+ || t == unsigned_char_type_node)
+ {
-+ HOST_WIDE_INT max = PARAM_VALUE (PARAM_SSP_BUFFER_SIZE);
-+ HOST_WIDE_INT len;
++ unsigned HOST_WIDE_INT max = PARAM_VALUE (PARAM_SSP_BUFFER_SIZE);
++ unsigned HOST_WIDE_INT len;
+
-+ if (!TYPE_DOMAIN (type)
-+ || !TYPE_MAX_VALUE (TYPE_DOMAIN (type))
-+ || !host_integerp (TYPE_MAX_VALUE (TYPE_DOMAIN (type)), 1))
-+ len = max + 1;
++ if (!TYPE_SIZE_UNIT (type)
++ || !host_integerp (TYPE_SIZE_UNIT (type), 1))
++ len = max;
+ else
-+ len = tree_low_cst (TYPE_MAX_VALUE (TYPE_DOMAIN (type)), 1);
++ len = tree_low_cst (TYPE_SIZE_UNIT (type), 1);
+
+ if (len < max)
+ ret = SPCT_HAS_SMALL_CHAR_ARRAY | SPCT_HAS_ARRAY;
@@ -517,7 +522,7 @@
/* Expand all variables used in the function. */
static void
-@@ -746,6 +908,10 @@ expand_used_vars (void)
+@@ -748,6 +909,10 @@ expand_used_vars (void)
/* Clear TREE_USED on all variables associated with a block scope. */
clear_tree_used (outer_block);
@@ -528,7 +533,7 @@
/* At this point all variables on the unexpanded_var_list with TREE_USED
set are not associated with any block scope. Lay them out. */
for (t = cfun->unexpanded_var_list; t; t = TREE_CHAIN (t))
-@@ -794,14 +960,44 @@ expand_used_vars (void)
+@@ -796,14 +961,44 @@ expand_used_vars (void)
reflect this. */
add_alias_set_conflicts ();
@@ -575,7 +580,7 @@
/* Free up stack variable graph data. */
XDELETEVEC (stack_vars);
-@@ -1288,6 +1484,16 @@ tree_expand_cfg (void)
+@@ -1280,6 +1475,16 @@ tree_expand_cfg (void)
/* Expand the variables recorded during gimple lowering. */
expand_used_vars ();
@@ -592,7 +597,7 @@
/* Set up parameters and prepare for return, for the function. */
expand_function_start (current_function_decl);
-@@ -1298,6 +1504,11 @@ tree_expand_cfg (void)
+@@ -1290,6 +1495,11 @@ tree_expand_cfg (void)
&& DECL_FILE_SCOPE_P (current_function_decl))
expand_main_function ();
Index: gcc4.spec
===================================================================
RCS file: /cvs/dist/rpms/gcc/devel/gcc4.spec,v
retrieving revision 1.56
retrieving revision 1.57
diff -u -r1.56 -r1.57
--- gcc4.spec 10 Jul 2005 12:50:19 -0000 1.56
+++ gcc4.spec 14 Jul 2005 18:50:49 -0000 1.57
@@ -1,6 +1,6 @@
-%define DATE 20050710
+%define DATE 20050714
%define gcc_version 4.0.1
-%define gcc_release 2
+%define gcc_release 3
%define _unpackaged_files_terminate_build 0
%define multilib_64_archs sparc64 ppc64 s390x x86_64
%ifarch %{ix86} alpha ia64 x86_64 s390 sparc sparc64
@@ -82,15 +82,15 @@
Patch9: gcc4-struct-layout.patch
Patch10: gcc4-ppc32-hwint32.patch
Patch11: gcc4-pr17965.patch
-Patch12: gcc4-fortran-forall.patch
+Patch12: gcc4-vsb-stack.patch
Patch13: gcc4-libltdl-multilib.patch
-Patch14: gcc4-fortran-legacy.patch
-Patch15: gcc4-fortran-logical-integer.patch
-Patch16: gcc4-fortran-hollerith.patch
+Patch14: gcc4-java-rh163099.patch
+Patch15: gcc4-java-urls.patch
+Patch16: gcc4-libjava-ia64-backtrace.patch
Patch17: gcc4-stack-protector.patch
Patch18: gcc4-ia64-stack-protector.patch
Patch19: gcc4-s390-stack-protector.patch
-Patch20: gcc4-stack-protector-shortsize.patch
+Patch20: gcc4-pr22052.patch
Patch21: gcc4-libstdc++-pr22309.patch
%define _gnu %{nil}
@@ -412,15 +412,15 @@
%patch9 -p0 -b .struct-layout~
#%patch10 -p0 -b .ppc32-hwint32~
%patch11 -p0 -b .pr17965~
-%patch12 -p0 -b .fortran-forall~
+%patch12 -p0 -b .vsb-stack~
%patch13 -p0 -b .libltdl-multilib~
-%patch14 -p0 -b .fortran-legacy~
-%patch15 -p0 -b .fortran-logical-integer~
-%patch16 -p0 -b .fortran-hollerith~
+%patch14 -p0 -b .java-rh163099~
+%patch15 -p0 -b .java-urls~
+%patch16 -p0 -b .libjava-ia64-backtrace~
%patch17 -p0 -b .stack-protector~
%patch18 -p0 -b .ia64-stack-protector~
%patch19 -p0 -b .s390-stack-protector~
-%patch20 -p0 -b .stack-protector-shortsize~
+%patch20 -p0 -b .pr22052~
%patch21 -p0 -b .libstdc++-pr22309~
perl -pi -e 's/4\.0\.2/4.0.1/' gcc/version.c
@@ -1446,6 +1446,23 @@
%endif
%changelog
+* Thu Jul 14 2005 Jakub Jelinek <jakub at redhat.com> 4.0.1-3
+- update from CVS
+ - PRs bootstrap/21704, c++/10611, c++/20563, c++/20637, c++/20678,
+ c++/20746, c++/20789, c++/21903, c++/21929, fortran/15966,
+ fortran/16531, fortran/18781, fortran/22327, fortran/22417,
+ libfortran/16435, libfortran/21875, libgfortran/22412,
+ libstdc++/22102, middle-end/20593, tree-opt/22105
+- another attempt to fix libstdc++ mt allocator (#161061,
+ PR libstdc++/22309)
+- diagnose invalid uses of inline (Eric Christopher, #162216, #159731,
+ PRs c/22052, c/21975)
+- fix linker command line ordering when compiling multiple
+ java source files (Tom Tromey, #163099)
+- use backtrace () in libgcj even on ia64
+- fix java handling of URLs (Andrew Haley)
+- support more than 16 nested GCC visibility pragmas (H.J.Lu)
+
* Sun Jul 10 2005 Jakub Jelinek <jakub at redhat.com> 4.0.1-2
- update from CVS
- PRs fortran/17792, fortran/19926, fortran/21257, fortran/21375
@@ -1467,7 +1484,7 @@
- make sure libstdc++ mt allocator calls pthread_key_delete before
libstdc++ dlclose (#161061, PR libstdc++/22309)
- accept fortran ENTRY without () even in FUNCTIONs (#161634)
-- fix fortran handling of ENTRY return var names as rvalues (161669)
+- fix fortran handling of ENTRY return var names as rvalues (#161669)
- fix fortran ICE on invalid preprocessor line (#161679)
- fix fortran handling of long preprocessor lines (#161680)
- add -std=legacy gfortran option (Roger Sayle)
Index: sources
===================================================================
RCS file: /cvs/dist/rpms/gcc/devel/sources,v
retrieving revision 1.101
retrieving revision 1.102
diff -u -r1.101 -r1.102
--- sources 10 Jul 2005 12:46:57 -0000 1.101
+++ sources 14 Jul 2005 18:50:49 -0000 1.102
@@ -1 +1 @@
-158f94a28dc1e04943d0e29dae3bb9b8 gcc-4.0.1-20050710.tar.bz2
+47e6bed61cb2e0bd68cc52c048dec062 gcc-4.0.1-20050714.tar.bz2
--- gcc4-fortran-forall.patch DELETED ---
--- gcc4-fortran-hollerith.patch DELETED ---
--- gcc4-fortran-legacy.patch DELETED ---
--- gcc4-fortran-logical-integer.patch DELETED ---
--- gcc4-stack-protector-shortsize.patch DELETED ---
More information about the fedora-cvs-commits
mailing list