From 8b341f87025466bd97643e21dab7caa6f909d955 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 8 Dec 2006 20:55:43 +0000 Subject: [PATCH] 4.1.1-45 --- .cvsignore | 2 +- gcc41-tests.patch | 158 +++++++++++++++++++++++++ gcc41.spec | 29 +++-- protoize.1 | 291 ++++++++++++++++++++++++++++++++++++++++++++++ sources | 2 +- 5 files changed, 473 insertions(+), 9 deletions(-) create mode 100644 protoize.1 diff --git a/.cvsignore b/.cvsignore index 0598ba5..634144d 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -gcc-4.1.1-20061130.tar.bz2 +gcc-4.1.1-20061208.tar.bz2 diff --git a/gcc41-tests.patch b/gcc41-tests.patch index d9b9791..63ef171 100644 --- a/gcc41-tests.patch +++ b/gcc41-tests.patch @@ -1,3 +1,13 @@ +2006-12-08 Jakub Jelinek + + * g++.dg/debug/vartrack1.C: New test. + + * g++.dg/opt/ifcvt1.C: New test. + +2006-12-08 Alexandre Oliva + + * g++.dg/template/array17.C: New test. + 2006-05-05 Jakub Jelinek * gcc.dg/tls/opt-13.c: New test. @@ -232,3 +242,151 @@ + __builtin_strcpy (thr.b, "abcd"); + return 0; +} +--- gcc/testsuite/g++.dg/debug/vartrack1.C 2004-06-24 14:04:38.000000000 -0400 ++++ gcc/testsuite/g++.dg/debug/vartrack1.C 2006-12-08 05:29:41.000000000 -0500 +@@ -0,0 +1,99 @@ ++// This testcase used to hang the compiler in vt_find_locations. ++// { dg-do compile } ++// { dg-options "-O2 -g" } ++ ++struct S ++{ ++ int a; ++ S *b, *c, *d; ++}; ++ ++struct T ++{ ++ void f1 (S *x); ++ void f2 (S *x); ++ void f3 (S *x, S *y); ++ S *e; ++}; ++ ++void ++T::f3 (S *x, S *y) ++{ ++ while (x != this->e && (!x || x->a == 1)) ++ { ++ if (x == y->c) ++ { ++ S *w = y->d; ++ if (w && w->a == 0) ++ { ++ w->a = 1; ++ y->a = 0; ++ f2 (y); ++ w = y->d; ++ } ++ if (w && (!w->c || w->c->a == 1) && (!w->d || w->d->a == 1)) ++ { ++ w->a = 0; ++ x = y; ++ y = x->b; ++ } ++ else ++ { ++ if (w && (!w->d || w->d->a == 1)) ++ { ++ if (w->c) ++ w->c->a = 1; ++ w->a = 0; ++ f1 (w); ++ w = y->d; ++ } ++ if (w) ++ { ++ w->a = y->a; ++ if (w->d) ++ w->d->a = 1; ++ } ++ y->a = 1; ++ f2 (y); ++ x = e; ++ } ++ } ++ else ++ { ++ S *w = y->c; ++ if (w && w->a == 0) ++ { ++ w->a = 1; ++ y->a = 0; ++ f1 (y); ++ w = y->c; ++ } ++ if (w && (!w->c || w->c->a == 1) && (!w->d || w->d->a == 1)) ++ { ++ w->a = 0; ++ x = y; ++ y = x->b; ++ } ++ else ++ { ++ if (w && (!w->c || w->c->a == 1)) ++ { ++ w->a = 0; ++ if (w->d) ++ w->d->a = 1; ++ f2 (w); ++ w = y->c; ++ } ++ if (w) ++ { ++ w->a = y->a; ++ if (w->c) ++ w->c->a = 1; ++ } ++ y->a = 1; ++ f1 (y); ++ x = e; ++ } ++ } ++ } ++} +--- gcc/testsuite/g++.dg/opt/ifcvt1.C 2006-10-04 16:28:56.502613000 +0200 ++++ gcc/testsuite/g++.dg/opt/ifcvt1.C 2006-12-08 12:23:23.000000000 +0100 +@@ -0,0 +1,17 @@ ++// { dg-do compile } ++// { dg-options "-O2 -fnon-call-exceptions" } ++ ++struct S { ~S () throw () {} }; ++double bar (); ++ ++int ++foo () ++{ ++ S a; ++ int i = 0; ++ double c = bar (); ++ c = c < 0 ? -c : c; ++ if (c <= 1.e-8) ++ i += 24; ++ return i; ++} +--- gcc/testsuite/g++.dg/template/array17.C 2006-10-04 16:28:56.502613000 +0200 ++++ gcc/testsuite/g++.dg/template/array17.C 2006-12-08 12:38:27.000000000 +0100 +@@ -0,0 +1,23 @@ ++// { dg-do compile } ++ ++template ++struct V { ++ T& operator[](int); ++}; ++ ++struct S { ++ S operator +(int); ++ template T value(); ++}; ++ ++template ++void R (T v) ++{ ++ v[(S() + 0).template value()][0] = 0; ++} ++ ++int ++main () ++{ ++ R(V >()); ++} diff --git a/gcc41.spec b/gcc41.spec index b5cb1ac..144f815 100644 --- a/gcc41.spec +++ b/gcc41.spec @@ -1,6 +1,6 @@ -%define DATE 20061130 +%define DATE 20061208 %define gcc_version 4.1.1 -%define gcc_release 44 +%define gcc_release 45 %define _unpackaged_files_terminate_build 0 %define multilib_64_archs sparc64 ppc64 s390x x86_64 %ifarch %{ix86} x86_64 ia64 @@ -30,6 +30,7 @@ Group: Development/Languages Source0: gcc-%{version}-%{DATE}.tar.bz2 Source1: libgcc_post_upgrade.c Source2: README.libgcjwebplugin.so +Source3: protoize.1 URL: http://gcc.gnu.org BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root # Need binutils with -pie support >= 2.14.90.0.4-4 @@ -137,8 +138,8 @@ Patch29: gcc41-pr29703.patch Patch30: gcc41-pr29299.patch Patch31: gcc41-libjava-anonverscript.patch Patch32: gcc41-ppc64-libffi-unwind.patch -Patch33: gcc41-pr29965.patch -Patch34: gcc41-pr29949.patch +Patch33: gcc41-pr27761.patch +Patch34: gcc41-pr30110.patch %define _gnu %{nil} %ifarch sparc @@ -447,8 +448,8 @@ which are required to run programs compiled with the GNAT. %patch30 -p0 -b .pr29299~ %patch31 -p0 -b .libjava-anonverscript~ %patch32 -p0 -b .ppc64-libffi-unwind~ -%patch33 -p0 -b .pr29965~ -%patch34 -p0 -b .pr29949~ +%patch33 -p0 -b .pr27761~ +%patch34 -p0 -b .pr30110~ sed -i -e 's/4\.1\.2/4.1.1/' gcc/BASE-VER gcc/version.c sed -i -e 's/" (Red Hat[^)]*)"/" (Red Hat %{version}-%{gcc_release})"/' gcc/version.c @@ -975,6 +976,10 @@ chmod 755 $RPM_BUILD_ROOT%{_prefix}/share/java/gcj-endorsed \ touch $RPM_BUILD_ROOT%{_prefix}/%{_lib}/gcj-%{version}/classmap.db %endif +install -m644 %{SOURCE3} $RPM_BUILD_ROOT%{_mandir}/man1/protoize.1 +echo '.so man1/protoize.1' > $RPM_BUILD_ROOT%{_mandir}/man1/unprotoize.1 +chmod 644 $RPM_BUILD_ROOT%{_mandir}/man1/unprotoize.1 + %clean rm -rf $RPM_BUILD_ROOT @@ -1099,6 +1104,8 @@ fi %{_prefix}/bin/%{gcc_target_platform}-gcc %{_mandir}/man1/gcc.1* %{_mandir}/man1/gcov.1* +%{_mandir}/man1/protoize.1* +%{_mandir}/man1/unprotoize.1* %{_infodir}/gcc* %dir %{_prefix}/lib/gcc %dir %{_prefix}/lib/gcc/%{gcc_target_platform} @@ -1508,8 +1515,16 @@ fi %doc rpm.doc/changelogs/libmudflap/ChangeLog* %changelog +* Fri Dec 8 2006 Jakub Jelinek 4.1.1-45 +- update from gcc-4_1-branch (-r119343:119654) + - PRs c++/14329, c++/28284, c++/29632, c++/29728, c++/29729, c++/29730, + c++/29733, c++/30022, libfortran/29810 +- add protoize.1 and unprotoize.1 man pages (#188914) +- fix RTL sharing problem in combine (#218603, PR rtl-optimization/27761) +- additions to libgcj-src (Ben Konrath, PR libgcj/30110) + * Fri Dec 1 2006 Jakub Jelinek 4.1.1-44 -- fix OpenMP loops with 0 iterations (PR libgomp/29949) +- fix OpenMP loops with 0 iterations (PR libgomp/29947) * Thu Nov 30 2006 Jakub Jelinek 4.1.1-43 - update from gcc-4_1-branch (-r119167:119343) diff --git a/protoize.1 b/protoize.1 new file mode 100644 index 0000000..5dde73d --- /dev/null +++ b/protoize.1 @@ -0,0 +1,291 @@ +.\" Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation +.\" See section COPYING for conditions for redistribution +.\" +.TH protoize 1 "8 December 2006" "GCC" "GNU" +.SH NAME +protoize, unprotoize \- automatically add or remove function prototypes +.SH SYNOPSIS +.HP 7 +\fBprotoize\fR [\-CfgklNnqv] [\-B \fIDIRECTORY\fR] [\-c \fICOMPILATION-OPTIONS\fR] [\-d \fIDIRECTORY\fR] [\-i \fISTRING\fR] [\-p \fIPROGRAM\fR] [\-x \fIFILE\fR] [\fIFILE\fR...] +.HP 7 +\fBunprotoize\fR [\-fkNnqv] [\-c \fICOMPILATION-OPTIONS\fR] [\-d \fIDIRECTORY\fR] [\-i \fISTRING\fR] [\-p \fIPROGRAM\fR] [\-x \fIFILE\fR] [\fIFILE\fR...] +.SH DESCRIPTION +.PP +\fBprotoize\fR is an optional part of GCC. +You can use it to add prototypes to a program, +thus converting the program to ANSI C in one respect. +The companion program +\fBunprotoize\fR does the reverse: it removes argument types from any prototypes that are found. +.PP +When you run these programs, you must specify a set of source files +as command line arguments. +The conversion programs start out by compiling these files +to see what functions they define. +The information gathered about a file +\fIFOO\fR is saved in a file named \fIFOO.X\fR. +.PP +After scanning comes the actual conversion. +The specified files are all eligible to be converted; +any files they include (whether sources or just headers) are eligible as well. +.PP +But not all the eligible files are converted. +By default, +\fBprotoize\fR and \fBunprotoize\fR +convert only source and header files in the current directory. +You can specify additional directories whose files +should be converted with the +\fB\-d\fR \fIDIRECTORY\fR option. +You can also specify particular files to exclude with the +\fB\-x\fR \fIFILE\fR option. +A file is converted if it is eligible, its directory name matches one of the +specified directory names, and its name within the directory has not +been excluded. +.PP +Basic conversion with +\fBprotoize\fR consists of rewriting most function definitions and function declarations +to specify the types of the arguments. +The only ones not rewritten are those for varargs functions. +.PP +\fBprotoize\fR optionally inserts prototype declarations at the beginning of the source file, +to make them available for any calls that precede the function's definition. +Or it can insert prototype declarations with block scope +in the blocks where undeclared functions are called. +.PP +Basic conversion with +\fBunprotoize\fR +consists of rewriting most function declarations to remove any argument types, +and rewriting function definitions to the old-style pre-ANSI form. +.PP +Both conversion programs print a warning for any function +declaration or definition that they can't convert. +You can suppress these warnings with the +\fB\-q\fR option. +.PP +The output from +\fBprotoize\fR or \fBunprotoize\fR +replaces the original source file. +The original file is renamed to a name ending with +\fI.save\fR. +If the \fI.save\fR file already exists, then the source file is simply discarded. +.PP +\fBprotoize\fR and \fBunprotoize\fR both depend on +\fBgcc\fR\|(1) to scan the program and collect information about the functions it uses. +.PP +The options are as follows: +.TP +\fB\-B\fR \fIDIRECTORY\fR +Look for the file +\fISYSCALLS.c.X\fR in \fIdirectory\fR, +instead of the usual directory (normally \fI/usr/local/lib\fR). +This file contains prototype information about standard system functions. +This option applies only to \fBprotoize\fR. +.TP +\fB\-C\fR +Rename files to end in +\fI.C\fR instead of \fI.c\fR. +This is convenient if you are converting a C program to C++. +This option applies only to +\fBprotoize\fR. +.TP +\fB\-c\fR \fICOMPILATION-OPTIONS\fR +Use \fICOMPILATION-OPTIONS\fR as the options when running \fBgcc\fR\|(1) to produce the +\fI.X\fR files. +The special option \fB\-aux-info\fR is always passed in addition, to tell gcc to write a +\fI.X\fR file. +Note that the compilation options must be given as a single argument to +\fBprotoize\fR or \fBunprotoize\fR. +If you want to specify several gcc options, you must quote the entire set of +compilation options to make them a single word in the shell. +There are certain gcc arguments that you cannot use, because they +would produce the wrong kind of output. +These include +\fB\-g\fR, \fB\-O\fR, \fB\-c\fR, \fB\-S\fR,\fB\-o\fR. +If you include these in the \fICOMPILATION-OPTIONS\fR, they are ignored. +.TP +\fB\-d\fR \fIDIRECTORY\fR +Specify additional directories whose files should be converted. +.TP +\fB\-g\fR +Add explicit global declarations. +This means inserting explicit declarations at the beginning of each +source file for each function that is called in the file and was not declared. +These declarations precede the first function definition that contains a +call to an undeclared function. +This option applies only to +.\fBprotoize\fR. +.TP +\fB\-i\fR \fISTRING\fR +Indent old-style parameter declarations with the string +\fISTRING\fR. +This option applies only to +\fBprotoize\fR. +\fBunprotoize\fR converts prototyped function definitions to old-style +function definitions, where the arguments are declared between the +argument list and the initial +\fB{\fR. +By default, +\fBunprotoize\fR uses five spaces as the indentation. +If you want to indent with just one space instead, use +\fB\-i " "\fR. +.TP +\fB\-k\fR +Keep the +\fI.X\fR files. +Normally, they are deleted after conversion is finished. +.TP +\fB\-l\fR +Add explicit local declarations. +\fBprotoize\fR with +\fB\-l\fR inserts a prototype declaration for each function in each block which calls +the function without any declaration. +This option applies only to +\fBprotoize\fR. +.TP +\fB\-N\fR +Make no \fI.save\fR files. +The original files are simply deleted. +Use this option with caution. +.TP +\fB\-n\fR +Make no real changes. +This mode just prints information about the conversions +that would have been done without +\fB\-n\fR. +.TP +\fB\-p\fR \fIPROGRAM\fR +Use the program +\fBPROGRAM\fR as the compiler. +Normally, the name +\fBgcc\fR is used. +.TP +\fB\-q\fR +Work quietly. +Most warnings are suppressed. +.TP +\fB\-v\fR +Print the version number, just like +\fB\-v\fR for gcc. +.TP +\fB\-x\fR \fBFILE\fR +List of files to exclude from the conversion process. +.PP +If you need special compiler options to compile one of your program's +source files, then you should generate that file's +\fI.X\fR file specially, by running gcc on that source file with +the appropriate options and the option +\fB\-aux-info\fR. +Then run +\fBprotoize\fR on the entire set of files. +\fBprotoize\fR will use the existing +\fI.X\fR file because it is newer than the source file. +For example: +.PP +.DL $ gcc -Dfoo=bar file1.c -aux-info +.DL $ protoize *.c +.PP +You need to include the special files along with the rest in the +\fBprotoize\fR command, even though their +\fI.X\fR files already exist, because otherwise they won't get converted. +.PP +.SH SEE ALSO +\fBgcc\fR\|(1), and the Info entry for \fBgcc\fR, particularly +\fBRunning protoize\fR section. +.SH HISTORY +Ron Guilmette implemented the +\fBprotoize\fR and \fBunprotoize\fR tools. +.SH AUTHORS +See the GCC manual for the contributors to GCC. +.SH CAVEATS +The conversion programs \fBprotoize\fR and \fBunprotoize\fR +can sometimes change a source file in a way that won't work +unless you rearrange it. +.PP +\fBprotoize\fR can insert references to a type name or type tag before +the definition, or in a file where they are not defined. +.PP +If this happens, compiler error messages should indicate where the +new references are, so fixing the file by hand is straightforward. +.PP +There are some C constructs which \fBprotoize\fR +cannot figure out. +For example, it can't determine argument types for declaring a +pointer-to-function variable; this must be done by hand. \fBprotoize\fR +inserts a comment containing \fB???\fR each time it finds such a variable; +all such variables can be found by searching for this string. +ANSI C does not require declaring the argument types of +pointer-to-function types. +.PP +Using \fBunprotoize\fR can easily introduce bugs. +If the program relied on prototypes to bring about conversion of arguments, +these conversions will not take place in the program without prototypes. +One case in which you can be sure \fBunprotoize\fR +is safe is when you are removing prototypes that were made with +\fBprotoize\fR; if the program worked before without any prototypes, +it will work again without them. +.PP +You can find all the places where this problem might occur by +compiling the program with the \fB\-Wconversion\fR option. +It prints a warning whenever an argument is converted. +.PP +Both conversion programs can be confused if there are macro calls +in and around the text to be converted. +In other words, the standard syntax for a declaration or definition +must not result from expanding a macro. +This problem is inherent in the design of C and cannot be fixed. +If only a few functions have confusing macro calls, +you can easily convert them manually. +.PP +\fBprotoize\fR cannot get the argument types for a function whose definition was not +actually compiled due to preprocessing conditionals. +When this happens, \fBprotoize\fR changes nothing in regard to such a function. +\fBprotoize\fR tries to detect such instances and warn about them. +.PP +You can generally work around this problem by using +\fBprotoize\fR step by step, each time specifying a different set of +\fB\-D\fR options for compilation, until all of the functions have been converted. +There is no automatic way to verify that you have got them all, however. +.PP +Confusion may result if there is an occasion to convert a function +declaration or definition in a region of source code where there +is more than one formal parameter list present. +Thus, attempts to convert code containing multiple (conditionally compiled) +versions of a single function header (in the same vicinity) +may not produce the desired (or expected) results. +.PP +If you plan on converting source files which contain such code, +it is recommended that you first make sure that each conditionally +compiled region of source code which contains an alternative +function header also contains at least one additional follower +token (past the final right parenthesis of the function header). +This should circumvent the problem. +.PP +\fBunprotoize\fR can become confused when trying to convert a function +definition or declaration which contains a declaration for a +pointer-to-function formal argument which has the same name as the +function being defined or declared. +We recommand you avoid such choices of formal parameter names. +.PP +It might be necessary to correct some of the indentation by hand and +break long lines. +(The conversion programs don't write lines longer than eighty characters +in any case.) +.SH BUGS +For instructions on reporting bugs, see the GCC manual. +.SH COPYING +Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +.PP +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. +.PP +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the +entire resulting derived work is distributed under the terms of a +permission notice identical to this one. +.PP +Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that this permission notice may be included in +translations approved by the Free Software Foundation instead of in +the original English. diff --git a/sources b/sources index e413f4c..b824181 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -bc0aa7ff1ee0389f30c97e7e973814a3 gcc-4.1.1-20061130.tar.bz2 +4411e28a7590ccc573632710250f934b gcc-4.1.1-20061208.tar.bz2