4.1.1-45
This commit is contained in:
parent
d5c11cfd53
commit
8b341f8702
@ -1 +1 @@
|
|||||||
gcc-4.1.1-20061130.tar.bz2
|
gcc-4.1.1-20061208.tar.bz2
|
||||||
|
@ -1,3 +1,13 @@
|
|||||||
|
2006-12-08 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* g++.dg/debug/vartrack1.C: New test.
|
||||||
|
|
||||||
|
* g++.dg/opt/ifcvt1.C: New test.
|
||||||
|
|
||||||
|
2006-12-08 Alexandre Oliva <aoliva@redhat.com>
|
||||||
|
|
||||||
|
* g++.dg/template/array17.C: New test.
|
||||||
|
|
||||||
2006-05-05 Jakub Jelinek <jakub@redhat.com>
|
2006-05-05 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
* gcc.dg/tls/opt-13.c: New test.
|
* gcc.dg/tls/opt-13.c: New test.
|
||||||
@ -232,3 +242,151 @@
|
|||||||
+ __builtin_strcpy (thr.b, "abcd");
|
+ __builtin_strcpy (thr.b, "abcd");
|
||||||
+ return 0;
|
+ 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 <typename T>
|
||||||
|
+struct V {
|
||||||
|
+ T& operator[](int);
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+struct S {
|
||||||
|
+ S operator +(int);
|
||||||
|
+ template <typename T> T value();
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+template <typename T>
|
||||||
|
+void R (T v)
|
||||||
|
+{
|
||||||
|
+ v[(S() + 0).template value<int>()][0] = 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int
|
||||||
|
+main ()
|
||||||
|
+{
|
||||||
|
+ R(V<V<int> >());
|
||||||
|
+}
|
||||||
|
29
gcc41.spec
29
gcc41.spec
@ -1,6 +1,6 @@
|
|||||||
%define DATE 20061130
|
%define DATE 20061208
|
||||||
%define gcc_version 4.1.1
|
%define gcc_version 4.1.1
|
||||||
%define gcc_release 44
|
%define gcc_release 45
|
||||||
%define _unpackaged_files_terminate_build 0
|
%define _unpackaged_files_terminate_build 0
|
||||||
%define multilib_64_archs sparc64 ppc64 s390x x86_64
|
%define multilib_64_archs sparc64 ppc64 s390x x86_64
|
||||||
%ifarch %{ix86} x86_64 ia64
|
%ifarch %{ix86} x86_64 ia64
|
||||||
@ -30,6 +30,7 @@ Group: Development/Languages
|
|||||||
Source0: gcc-%{version}-%{DATE}.tar.bz2
|
Source0: gcc-%{version}-%{DATE}.tar.bz2
|
||||||
Source1: libgcc_post_upgrade.c
|
Source1: libgcc_post_upgrade.c
|
||||||
Source2: README.libgcjwebplugin.so
|
Source2: README.libgcjwebplugin.so
|
||||||
|
Source3: protoize.1
|
||||||
URL: http://gcc.gnu.org
|
URL: http://gcc.gnu.org
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
|
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
|
||||||
# Need binutils with -pie support >= 2.14.90.0.4-4
|
# Need binutils with -pie support >= 2.14.90.0.4-4
|
||||||
@ -137,8 +138,8 @@ Patch29: gcc41-pr29703.patch
|
|||||||
Patch30: gcc41-pr29299.patch
|
Patch30: gcc41-pr29299.patch
|
||||||
Patch31: gcc41-libjava-anonverscript.patch
|
Patch31: gcc41-libjava-anonverscript.patch
|
||||||
Patch32: gcc41-ppc64-libffi-unwind.patch
|
Patch32: gcc41-ppc64-libffi-unwind.patch
|
||||||
Patch33: gcc41-pr29965.patch
|
Patch33: gcc41-pr27761.patch
|
||||||
Patch34: gcc41-pr29949.patch
|
Patch34: gcc41-pr30110.patch
|
||||||
|
|
||||||
%define _gnu %{nil}
|
%define _gnu %{nil}
|
||||||
%ifarch sparc
|
%ifarch sparc
|
||||||
@ -447,8 +448,8 @@ which are required to run programs compiled with the GNAT.
|
|||||||
%patch30 -p0 -b .pr29299~
|
%patch30 -p0 -b .pr29299~
|
||||||
%patch31 -p0 -b .libjava-anonverscript~
|
%patch31 -p0 -b .libjava-anonverscript~
|
||||||
%patch32 -p0 -b .ppc64-libffi-unwind~
|
%patch32 -p0 -b .ppc64-libffi-unwind~
|
||||||
%patch33 -p0 -b .pr29965~
|
%patch33 -p0 -b .pr27761~
|
||||||
%patch34 -p0 -b .pr29949~
|
%patch34 -p0 -b .pr30110~
|
||||||
|
|
||||||
sed -i -e 's/4\.1\.2/4.1.1/' gcc/BASE-VER gcc/version.c
|
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
|
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
|
touch $RPM_BUILD_ROOT%{_prefix}/%{_lib}/gcj-%{version}/classmap.db
|
||||||
%endif
|
%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
|
%clean
|
||||||
rm -rf $RPM_BUILD_ROOT
|
rm -rf $RPM_BUILD_ROOT
|
||||||
|
|
||||||
@ -1099,6 +1104,8 @@ fi
|
|||||||
%{_prefix}/bin/%{gcc_target_platform}-gcc
|
%{_prefix}/bin/%{gcc_target_platform}-gcc
|
||||||
%{_mandir}/man1/gcc.1*
|
%{_mandir}/man1/gcc.1*
|
||||||
%{_mandir}/man1/gcov.1*
|
%{_mandir}/man1/gcov.1*
|
||||||
|
%{_mandir}/man1/protoize.1*
|
||||||
|
%{_mandir}/man1/unprotoize.1*
|
||||||
%{_infodir}/gcc*
|
%{_infodir}/gcc*
|
||||||
%dir %{_prefix}/lib/gcc
|
%dir %{_prefix}/lib/gcc
|
||||||
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}
|
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}
|
||||||
@ -1508,8 +1515,16 @@ fi
|
|||||||
%doc rpm.doc/changelogs/libmudflap/ChangeLog*
|
%doc rpm.doc/changelogs/libmudflap/ChangeLog*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Dec 8 2006 Jakub Jelinek <jakub@redhat.com> 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 <jakub@redhat.com> 4.1.1-44
|
* Fri Dec 1 2006 Jakub Jelinek <jakub@redhat.com> 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 <jakub@redhat.com> 4.1.1-43
|
* Thu Nov 30 2006 Jakub Jelinek <jakub@redhat.com> 4.1.1-43
|
||||||
- update from gcc-4_1-branch (-r119167:119343)
|
- update from gcc-4_1-branch (-r119167:119343)
|
||||||
|
291
protoize.1
Normal file
291
protoize.1
Normal file
@ -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.
|
Loading…
Reference in New Issue
Block a user