4.4.0-0.3
This commit is contained in:
parent
d69d1f8218
commit
7c07471093
@ -1,2 +1,2 @@
|
||||
gcc-4.3.2-20081105.tar.bz2
|
||||
fastjar-0.95.tar.gz
|
||||
fastjar-0.97.tar.gz
|
||||
gcc-4.4.0-20090115.tar.bz2
|
||||
|
29
fastjar-0.97-segfault.patch
Normal file
29
fastjar-0.97-segfault.patch
Normal file
@ -0,0 +1,29 @@
|
||||
2009-01-14 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* jartool.c (make_manifest): Initialize current_time before
|
||||
calling unix2dostime on it.
|
||||
|
||||
--- fastjar-0.97/jartool.c.jj 2008-10-15 18:35:37.000000000 +0200
|
||||
+++ fastjar-0.97/jartool.c 2009-01-14 15:40:50.000000000 +0100
|
||||
@@ -820,6 +820,10 @@ int make_manifest(int jfd, const char *m
|
||||
int mod_time; /* file modification time */
|
||||
struct zipentry *ze;
|
||||
|
||||
+ current_time = time(NULL);
|
||||
+ if(current_time == (time_t)-1)
|
||||
+ exit_on_error("time");
|
||||
+
|
||||
mod_time = unix2dostime(¤t_time);
|
||||
|
||||
/* If we are creating a new manifest, create a META-INF directory entry */
|
||||
@@ -828,10 +832,6 @@ int make_manifest(int jfd, const char *m
|
||||
|
||||
memset((file_header + 12), '\0', 16); /*clear mod time, crc, size fields*/
|
||||
|
||||
- current_time = time(NULL);
|
||||
- if(current_time == (time_t)-1)
|
||||
- exit_on_error("time");
|
||||
-
|
||||
PACK_UB2(file_header, LOC_EXTRA, 0);
|
||||
PACK_UB2(file_header, LOC_COMP, 0);
|
||||
PACK_UB2(file_header, LOC_FNLEN, nlen);
|
@ -1,9 +1,9 @@
|
||||
%define DATE 20081105
|
||||
%define DATE 20090115
|
||||
%define SVNREV 141601
|
||||
%define gcc_version 4.3.2
|
||||
%define gcc_version 4.4.0
|
||||
# Note, gcc_release must be integer, if you want to add suffixes to
|
||||
# %{release}, append them after %{gcc_release} on Release: line.
|
||||
%define gcc_release 7
|
||||
%define gcc_release 0.3
|
||||
%define _unpackaged_files_terminate_build 0
|
||||
%define multilib_64_archs sparc64 ppc64 s390x x86_64
|
||||
%define include_gappletviewer 1
|
||||
@ -48,7 +48,7 @@ Source0: gcc-%{version}-%{DATE}.tar.bz2
|
||||
Source1: libgcc_post_upgrade.c
|
||||
Source2: README.libgcjwebplugin.so
|
||||
Source3: protoize.1
|
||||
%define fastjar_ver 0.95
|
||||
%define fastjar_ver 0.97
|
||||
Source4: http://download.savannah.nongnu.org/releases/fastjar/fastjar-%{fastjar_ver}.tar.gz
|
||||
URL: http://gcc.gnu.org
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
@ -110,61 +110,31 @@ Requires: glibc >= 2.3.90-35
|
||||
%endif
|
||||
Requires: libgcc >= %{version}-%{release}
|
||||
Requires: libgomp = %{version}-%{release}
|
||||
#Obsoletes: gcc3
|
||||
#Obsoletes: egcs
|
||||
%ifarch sparc
|
||||
#Obsoletes: gcc-sparc32
|
||||
#Obsoletes: gcc-c++-sparc32
|
||||
%endif
|
||||
%ifarch ppc
|
||||
#Obsoletes: gcc-ppc32
|
||||
#Obsoletes: gcc-c++-ppc32
|
||||
%endif
|
||||
#Obsoletes: gcc-chill
|
||||
%if !%{build_ada}
|
||||
Obsoletes: gcc-gnat < %{version}-%{release}
|
||||
Obsoletes: libgnat < %{version}-%{release}
|
||||
%endif
|
||||
%ifarch sparc sparc64
|
||||
#Obsoletes: egcs64
|
||||
%endif
|
||||
#Obsoletes: gcc34
|
||||
#Obsoletes: gcc35
|
||||
#Obsoletes: gcc4
|
||||
Prereq: /sbin/install-info
|
||||
AutoReq: true
|
||||
|
||||
Patch1: gcc43-build-id.patch
|
||||
Patch2: gcc43-c++-builtin-redecl.patch
|
||||
Patch3: gcc43-ia64-libunwind.patch
|
||||
Patch4: gcc43-java-nomulti.patch
|
||||
Patch5: gcc43-ppc32-retaddr.patch
|
||||
Patch6: gcc43-ppc64-ia64-GNU-stack.patch
|
||||
Patch7: gcc43-pr27898.patch
|
||||
Patch8: gcc43-pr32139.patch
|
||||
Patch9: gcc43-pr33763.patch
|
||||
Patch10: gcc43-rh330771.patch
|
||||
Patch11: gcc43-rh341221.patch
|
||||
Patch12: gcc43-java-debug-iface-type.patch
|
||||
Patch13: gcc43-i386-libgomp.patch
|
||||
Patch14: gcc43-rh251682.patch
|
||||
Patch15: gcc43-sparc-config-detection.patch
|
||||
Patch16: gcc43-libgomp-omp_h-multilib.patch
|
||||
Patch17: gcc43-x86_64-va_start.patch
|
||||
Patch18: gcc43-pr37189.patch
|
||||
Patch19: gcc43-altivec-tests.patch
|
||||
Patch20: gcc43-libtool-no-rpath.patch
|
||||
Patch21: gcc43-pr36741-revert.patch
|
||||
Patch22: gcc43-pr34037.patch
|
||||
Patch23: gcc43-pr37738.patch
|
||||
Patch24: gcc43-pr29609.patch
|
||||
Patch25: gcc43-aes.patch
|
||||
Patch26: gcc43-pr29609-2.patch
|
||||
Patch27: gcc43-pr29609-3.patch
|
||||
Patch28: gcc43-pr37870.patch
|
||||
Patch29: gcc43-pr37858.patch
|
||||
Patch30: gcc43-pr37879.patch
|
||||
Patch31: gcc43-pr37924.patch
|
||||
Patch0: gcc44-hack.patch
|
||||
Patch1: gcc44-build-id.patch
|
||||
Patch2: gcc44-c++-builtin-redecl.patch
|
||||
Patch3: gcc44-ia64-libunwind.patch
|
||||
Patch4: gcc44-java-nomulti.patch
|
||||
Patch5: gcc44-ppc32-retaddr.patch
|
||||
Patch7: gcc44-pr27898.patch
|
||||
Patch8: gcc44-pr32139.patch
|
||||
Patch9: gcc44-pr33763.patch
|
||||
Patch10: gcc44-rh330771.patch
|
||||
Patch11: gcc44-rh341221.patch
|
||||
Patch12: gcc44-java-debug-iface-type.patch
|
||||
Patch13: gcc44-i386-libgomp.patch
|
||||
Patch15: gcc44-sparc-config-detection.patch
|
||||
Patch16: gcc44-libgomp-omp_h-multilib.patch
|
||||
Patch20: gcc44-libtool-no-rpath.patch
|
||||
|
||||
Patch1000: fastjar-0.97-segfault.patch
|
||||
|
||||
# On ARM EABI systems, we do want -gnueabi to be part of the
|
||||
# target triple.
|
||||
@ -182,11 +152,11 @@ Patch31: gcc43-pr37924.patch
|
||||
%endif
|
||||
|
||||
%description
|
||||
The gcc package contains the GNU Compiler Collection version 4.3.
|
||||
The gcc package contains the GNU Compiler Collection version 4.4.
|
||||
You'll need this package in order to compile C code.
|
||||
|
||||
%package -n libgcc
|
||||
Summary: GCC version 4.3 shared support library
|
||||
Summary: GCC version 4.4 shared support library
|
||||
Group: System Environment/Libraries
|
||||
Autoreq: false
|
||||
|
||||
@ -200,10 +170,6 @@ Group: Development/Languages
|
||||
Requires: gcc = %{version}-%{release}
|
||||
Requires: libstdc++ = %{version}-%{release}
|
||||
Requires: libstdc++-devel = %{version}-%{release}
|
||||
#Obsoletes: gcc3-c++
|
||||
#Obsoletes: gcc34-c++
|
||||
#Obsoletes: gcc35-c++
|
||||
#Obsoletes: gcc4-c++
|
||||
Autoreq: true
|
||||
|
||||
%description c++
|
||||
@ -214,8 +180,6 @@ including templates and exception handling.
|
||||
%package -n libstdc++
|
||||
Summary: GNU Standard C++ Library
|
||||
Group: System Environment/Libraries
|
||||
#Obsoletes: libstdc++3
|
||||
#Obsoletes: libstdc++34
|
||||
Autoreq: true
|
||||
|
||||
%description -n libstdc++
|
||||
@ -226,8 +190,6 @@ C++ Library.
|
||||
Summary: Header files and libraries for C++ development
|
||||
Group: Development/Libraries
|
||||
Requires: libstdc++ = %{version}-%{release}, %{_prefix}/%{_lib}/libstdc++.so.6
|
||||
#Obsoletes: libstdc++3-devel
|
||||
#Obsoletes: libstdc++34-devel
|
||||
Autoreq: true
|
||||
|
||||
%description -n libstdc++-devel
|
||||
@ -240,7 +202,6 @@ Summary: Objective-C support for GCC
|
||||
Group: Development/Languages
|
||||
Requires: gcc = %{version}-%{release}
|
||||
Requires: libobjc = %{version}-%{release}
|
||||
#Obsoletes: gcc3-objc
|
||||
Autoreq: true
|
||||
|
||||
%description objc
|
||||
@ -267,30 +228,26 @@ This package contains Objective-C shared library which is needed to run
|
||||
Objective-C dynamically linked programs.
|
||||
|
||||
%package gfortran
|
||||
Summary: Fortran 95 support
|
||||
Summary: Fortran support
|
||||
Group: Development/Languages
|
||||
Requires: gcc = %{version}-%{release}
|
||||
Requires: libgfortran = %{version}-%{release}
|
||||
BuildRequires: gmp-devel >= 4.1.2-8, mpfr-devel >= 2.2.1
|
||||
Prereq: /sbin/install-info
|
||||
#Obsoletes: gcc3-g77
|
||||
#Obsoletes: gcc-g77
|
||||
#Obsoletes: gcc4-gfortran
|
||||
Autoreq: true
|
||||
|
||||
%description gfortran
|
||||
The gcc-gfortran package provides support for compiling Fortran 95
|
||||
The gcc-gfortran package provides support for compiling Fortran
|
||||
programs with the GNU Compiler Collection.
|
||||
|
||||
%package -n libgfortran
|
||||
Summary: Fortran 95 runtime
|
||||
Summary: Fortran runtime
|
||||
Group: System Environment/Libraries
|
||||
#Obsoletes: libf2c
|
||||
Autoreq: true
|
||||
|
||||
%description -n libgfortran
|
||||
This package contains Fortran 95 shared library which is needed to run
|
||||
Fortran 95 dynamically linked programs.
|
||||
This package contains Fortran shared library which is needed to run
|
||||
Fortran dynamically linked programs.
|
||||
|
||||
%package -n libgomp
|
||||
Summary: GCC OpenMP v3.0 shared support library
|
||||
@ -330,10 +287,6 @@ Requires: gcc = %{version}-%{release}
|
||||
Requires: libgcj = %{version}-%{release}
|
||||
Requires: libgcj-devel = %{version}-%{release}
|
||||
Requires: /usr/share/java/eclipse-ecj.jar
|
||||
#Obsoletes: gcc3-java
|
||||
#Obsoletes: gcc34-java
|
||||
#Obsoletes: gcc35-java
|
||||
#Obsoletes: gcc4-java
|
||||
Prereq: /sbin/install-info
|
||||
Autoreq: true
|
||||
|
||||
@ -358,10 +311,6 @@ BuildRequires: alsa-lib-devel
|
||||
BuildRequires: libXtst-devel
|
||||
BuildRequires: libXt-devel
|
||||
%endif
|
||||
#Obsoletes: gcc-libgcj
|
||||
#Obsoletes: libgcj3
|
||||
#Obsoletes: libgcj34
|
||||
#Obsoletes: libgcj4
|
||||
Autoreq: true
|
||||
|
||||
%description -n libgcj
|
||||
@ -371,12 +320,9 @@ programs compiled using the Java compiler from GNU Compiler Collection (gcj).
|
||||
%package -n libgcj-devel
|
||||
Summary: Libraries for Java development using GCC
|
||||
Group: Development/Languages
|
||||
Requires: libgcj = %{version}-%{release}, %{_prefix}/%{_lib}/libgcj.so.9
|
||||
Requires: libgcj = %{version}-%{release}, %{_prefix}/%{_lib}/libgcj.so.10
|
||||
Requires: zlib-devel, %{_prefix}/%{_lib}/libz.so
|
||||
Requires: /bin/awk
|
||||
#Obsoletes: libgcj3-devel
|
||||
#Obsoletes: libgcj34-devel
|
||||
#Obsoletes: libgcj4-devel
|
||||
Autoreq: false
|
||||
Autoprov: false
|
||||
|
||||
@ -388,7 +334,6 @@ package to compile your Java programs using the GCC Java compiler (gcj).
|
||||
Summary: Java library sources from GCC4 preview
|
||||
Group: System Environment/Libraries
|
||||
Requires: libgcj = %{version}-%{release}
|
||||
#Obsoletes: libgcj4-src
|
||||
Autoreq: true
|
||||
|
||||
%description -n libgcj-src
|
||||
@ -398,9 +343,6 @@ The Java(tm) runtime library sources for use in Eclipse.
|
||||
Summary: The C Preprocessor
|
||||
Group: Development/Languages
|
||||
Prereq: /sbin/install-info
|
||||
%ifarch ia64
|
||||
#Obsoletes: gnupro
|
||||
%endif
|
||||
Autoreq: true
|
||||
|
||||
%description -n cpp
|
||||
@ -428,8 +370,8 @@ macros.
|
||||
%package gnat
|
||||
Summary: Ada 95 support for GCC
|
||||
Group: Development/Languages
|
||||
Requires: gcc = %{version}-%{release}, libgnat = %{version}-%{release}
|
||||
#Obsoletes: gnat-devel, gcc3-gnat
|
||||
Requires: gcc = %{version}-%{release}
|
||||
Requires: libgnat = %{version}-%{release}, libgnat-devel = %{version}-%{release}
|
||||
Prereq: /sbin/install-info
|
||||
Autoreq: true
|
||||
|
||||
@ -440,21 +382,29 @@ the documents and Ada 95 compiler.
|
||||
%package -n libgnat
|
||||
Summary: GNU Ada 95 runtime shared libraries
|
||||
Group: System Environment/Libraries
|
||||
#Obsoletes: gnat libgnat3
|
||||
Autoreq: true
|
||||
|
||||
%description -n libgnat
|
||||
GNAT is a GNU Ada 95 front-end to GCC. This package includes shared libraries,
|
||||
which are required to run programs compiled with the GNAT.
|
||||
|
||||
%package -n libgnat-devel
|
||||
Summary: GNU Ada 95 libraries
|
||||
Group: System Environment/Libraries
|
||||
Autoreq: true
|
||||
|
||||
%description -n libgnat-devel
|
||||
GNAT is a GNU Ada 95 front-end to GCC. This package includes libraries,
|
||||
which are required to compile with the GNAT.
|
||||
|
||||
%prep
|
||||
%setup -q -n gcc-%{version}-%{DATE}
|
||||
%patch0 -p0 -b .hack~
|
||||
%patch1 -p0 -b .build-id~
|
||||
%patch2 -p0 -b .c++-builtin-redecl~
|
||||
%patch3 -p0 -b .ia64-libunwind~
|
||||
%patch4 -p0 -b .java-nomulti~
|
||||
%patch5 -p0 -b .ppc32-retaddr~
|
||||
%patch6 -p0 -b .ppc64-ia64-GNU-stack~
|
||||
%patch7 -p0 -b .pr27898~
|
||||
%patch8 -p0 -b .pr32139~
|
||||
%patch9 -p0 -b .pr33763~
|
||||
@ -462,32 +412,22 @@ which are required to run programs compiled with the GNAT.
|
||||
%patch11 -p0 -b .rh341221~
|
||||
%patch12 -p0 -b .java-debug-iface-type~
|
||||
%patch13 -p0 -b .i386-libgomp~
|
||||
%patch14 -p0 -b .rh251682~
|
||||
%patch15 -p0 -b .sparc-config-detection~
|
||||
%patch16 -p0 -b .libgomp-omp_h-multilib~
|
||||
%patch17 -p0 -b .x86_64-va_start~
|
||||
%patch18 -p0 -b .pr37189~
|
||||
%patch19 -p0 -b .altivec-tests~
|
||||
%patch20 -p0 -b .libtool-no-rpath~
|
||||
%patch21 -p0 -b .pr36741-revert~
|
||||
%patch22 -p0 -b .pr34037~
|
||||
%patch23 -p0 -b .pr37738~
|
||||
%patch24 -p0 -b .pr29609~
|
||||
%patch25 -p0 -b .aes~
|
||||
%patch26 -p0 -b .pr29609-2~
|
||||
%patch27 -p0 -b .pr29609-3~
|
||||
%patch28 -p0 -b .pr37870~
|
||||
%patch29 -p0 -b .pr37858~
|
||||
%patch30 -p0 -b .pr37879~
|
||||
%patch31 -p0 -b .pr37924~
|
||||
|
||||
# This testcase doesn't compile.
|
||||
rm libjava/testsuite/libjava.lang/PR35020*
|
||||
|
||||
tar xzf %{SOURCE4}
|
||||
|
||||
%patch1000 -p0 -b .fastjar-0.97-segfault~
|
||||
|
||||
%if %{bootstrap_java}
|
||||
tar xjf %{SOURCE10}
|
||||
%endif
|
||||
|
||||
sed -i -e 's/4\.3\.3/4.3.2/' gcc/BASE-VER
|
||||
sed -i -e 's/4\.4\.1/4.4.0/' gcc/BASE-VER
|
||||
echo 'Red Hat %{version}-%{gcc_release}' > gcc/DEV-PHASE
|
||||
|
||||
cp -a libstdc++-v3/config/cpu/i{4,3}86/atomicity.h
|
||||
@ -502,36 +442,6 @@ perl -pi -e 's/^check: check-recursive/ifeq (\$(MULTISUBDIR),)\ncheck: check-rec
|
||||
|
||||
./contrib/gcc_update --touch
|
||||
|
||||
# To make rpmlint happy (argh), fix up names in ChangeLog entries to valid UTF-8
|
||||
LC_ALL=C sed -i \
|
||||
-e 's/D\(o\|\xf6\)nmez/D\xc3\xb6nmez/' \
|
||||
-e 's/\(Av\|\x81\xc1v\|\xc1v\|\xef\xbf\xbdv\?\|\x81\xc3\x81v\|\xc3v\)ila/\xc3\x81vila/' \
|
||||
-e 's/Esp\(in\|\x81\xedn\|\xedn\|\xef\xbf\xbdn\?\|\xef\xbf\xbd\xadn\|\x81\xc3\xadn\|\xc3\xef\xbf\xbd\xadn\)dola/Esp\xc3\xadndola/' \
|
||||
-e 's/Schl\(u\|\xef\xbf\xbd\|\xfcu\?\|\x81\xfc\|\x81\xc3\xbc\|\xc3\xaf\xc2\xbf\xc2\xbd\|\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xc2\xbc\)ter/Schl\xc3\xbcter/' \
|
||||
-e 's/Humi\(e\|\xe8\)res/Humi\xc3\xa8res/' \
|
||||
-e 's/L\(ow\|\xc3\xaf\xc2\xbf\xc2\xbd\|oew\|\xf6w\)is/L\xc3\xb6wis/' \
|
||||
-e 's/G\xfctlein/G\xc3\xbctlein/' \
|
||||
-e 's/G\xe1[b]or/G\xc3\xa1bor/' \
|
||||
-e 's/L\xf3ki/L\xc3\xb3ki/' \
|
||||
-e 's/Fautr\xc3 /Fautr\xc3\xa9 /' \
|
||||
-e 's/S\xe9[b]astian/S\xc3\xa9bastian/' \
|
||||
-e 's/Th\xef\xbf\xbd[d]ore/Th\xc3\xa9odore/' \
|
||||
-e 's/Cors\xc3\xc2\xa9pius/Cors\xc3\xa9pius/' \
|
||||
-e 's/K\xfchl/K\xc3\xbchl/' \
|
||||
-e 's/R\xf6nnerup/R\xc3\xb6nnerup/' \
|
||||
-e 's/L\xf8vset/L\xc3\xb8vset/' \
|
||||
-e 's/Ph\x81\xfb\x81\xf4ng-Th\x81\xe5o/Ph\xc3\xbb\xc3\xb4ng-Th\xc3\xa5o/' \
|
||||
-e 's/V\x81\xf5/V\xc3\xb5/' \
|
||||
-e 's/J\xf6nsson/J\xc3\xb6nsson/' \
|
||||
-e 's/V\xef\xbf\xbdis\xef\xbf\xbdnen/V\xc3\xa4is\xc3\xa4nen/' \
|
||||
-e 's/J\xef\xbf\xbdrg/J\xc3\xb6rg/' \
|
||||
-e 's/M\xef\xbf\xbdsli/M\xc3\xb6sli/' \
|
||||
-e 's/R\xe4ty/R\xc3\xa4ty/' \
|
||||
-e 's/2003\xc2\xad-/2003-/' \
|
||||
-e 's/\xc2\xa0/ /g' \
|
||||
-e 's/ \xa0/ /g' \
|
||||
-e 's/\xa0 //' \
|
||||
`find . -name \*ChangeLog\*`
|
||||
LC_ALL=C sed -i -e 's/\xa0/ /' gcc/doc/options.texi
|
||||
|
||||
%ifarch ppc
|
||||
@ -573,21 +483,20 @@ cd obj-%{gcc_target_platform}
|
||||
# If we don't have gjavah in $PATH, try to build it with the old gij
|
||||
mkdir java_hacks
|
||||
cd java_hacks
|
||||
if [ ! -x /usr/bin/gjavah ]; then
|
||||
cp -a ../../libjava/classpath/tools/external external
|
||||
mkdir -p gnu/classpath/tools
|
||||
cp -a ../../libjava/classpath/tools/gnu/classpath/tools/{common,javah,getopt} gnu/classpath/tools/
|
||||
cp -a ../../libjava/classpath/resource/gnu/classpath/tools/common/Messages.properties gnu/classpath/tools/common
|
||||
cd external/asm; for i in `find . -name \*.java`; do gcj --encoding ISO-8859-1 -C $i -I.; done; cd ../..
|
||||
for i in `find gnu -name \*.java`; do gcj -C $i -I. -Iexternal/asm/; done
|
||||
gcj -findirect-dispatch -O2 -fmain=gnu.classpath.tools.javah.Main -I. -Iexternal/asm/ `find . -name \*.class` -o gjavah.real
|
||||
cat > gjavah <<EOF
|
||||
cp -a ../../libjava/classpath/tools/external external
|
||||
mkdir -p gnu/classpath/tools
|
||||
cp -a ../../libjava/classpath/tools/gnu/classpath/tools/{common,javah,getopt} gnu/classpath/tools/
|
||||
cp -a ../../libjava/classpath/tools/resource/gnu/classpath/tools/common/Messages.properties gnu/classpath/tools/common
|
||||
cp -a ../../libjava/classpath/tools/resource/gnu/classpath/tools/getopt/Messages.properties gnu/classpath/tools/getopt
|
||||
cd external/asm; for i in `find . -name \*.java`; do gcj --encoding ISO-8859-1 -C $i -I.; done; cd ../..
|
||||
for i in `find gnu -name \*.java`; do gcj -C $i -I. -Iexternal/asm/; done
|
||||
gcj -findirect-dispatch -O2 -fmain=gnu.classpath.tools.javah.Main -I. -Iexternal/asm/ `find . -name \*.class` -o gjavah.real
|
||||
cat > gjavah <<EOF
|
||||
#!/bin/sh
|
||||
export CLASSPATH=`pwd`${CLASSPATH:+:$CLASSPATH}
|
||||
exec `pwd`/gjavah.real "\$@"
|
||||
EOF
|
||||
chmod +x `pwd`/gjavah
|
||||
fi
|
||||
chmod +x `pwd`/gjavah
|
||||
cat > ecj1 <<EOF
|
||||
#!/bin/sh
|
||||
exec gij -cp /usr/share/java/eclipse-ecj.jar org.eclipse.jdt.internal.compiler.batch.GCCMain "\$@"
|
||||
@ -686,19 +595,11 @@ CC="$CC" CFLAGS="$OPT_FLAGS" CXXFLAGS="`echo $OPT_FLAGS | sed 's/ -Wall / /g'`"
|
||||
--build=%{gcc_target_platform}
|
||||
%endif
|
||||
|
||||
GCJFLAGS="$OPT_FLAGS" make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" bootstrap
|
||||
#GCJFLAGS="$OPT_FLAGS" make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" profiledbootstrap
|
||||
#GCJFLAGS="$OPT_FLAGS" make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" bootstrap
|
||||
GCJFLAGS="$OPT_FLAGS" make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" profiledbootstrap
|
||||
|
||||
# run the tests.
|
||||
make %{?_smp_mflags} -k check RUNTESTFLAGS="ALT_CC_UNDER_TEST=gcc ALT_CXX_UNDER_TEST=g++" || :
|
||||
cd gcc
|
||||
mv testsuite{,.normal}
|
||||
make %{?_smp_mflags} -k \
|
||||
`sed -n 's/check-ada//;s/^CHECK_TARGETS[[:blank:]]*=[[:blank:]]*//p' Makefile` \
|
||||
RUNTESTFLAGS="--target_board=unix/-fstack-protector ALT_CC_UNDER_TEST=gcc ALT_CXX_UNDER_TEST=g++" || :
|
||||
mv testsuite{,.ssp}
|
||||
mv testsuite{.normal,}
|
||||
cd ..
|
||||
make %{?_smp_mflags} -k check ALT_CC_UNDER_TEST=gcc ALT_CXX_UNDER_TEST=g++ RUNTESTFLAGS="--target_board=unix/'{,-fstack-protector/--param=ssp-buffer-size=4}'" || :
|
||||
echo ====================TESTING=========================
|
||||
( ../contrib/test_summary || : ) 2>&1 | sed -n '/^cat.*EOF/,/^EOF/{/^cat.*EOF/d;/^EOF/d;/^LAST_UPDATED:/d;p;}'
|
||||
echo ====================TESTING END=====================
|
||||
@ -706,9 +607,6 @@ mkdir testlogs-%{_target_platform}-%{version}-%{release}
|
||||
for i in `find . -name \*.log | grep -F testsuite/ | grep -v 'config.log\|acats\|ada'`; do
|
||||
ln $i testlogs-%{_target_platform}-%{version}-%{release}/ || :
|
||||
done
|
||||
for i in `find . -name \*.log | grep -F testsuite.ssp/ | grep -v 'config.log\|acats\|ada'`; do
|
||||
ln $i testlogs-%{_target_platform}-%{version}-%{release}/ssp-`basename $i` || :
|
||||
done
|
||||
tar cf - testlogs-%{_target_platform}-%{version}-%{release} | bzip2 -9c \
|
||||
| uuencode testlogs-%{_target_platform}.tar.bz2 || :
|
||||
rm -rf testlogs-%{_target_platform}-%{version}-%{release}
|
||||
@ -877,7 +775,8 @@ find $RPM_BUILD_ROOT -name \*.la | xargs rm -f
|
||||
# and saving 35MB is not bad.
|
||||
find $RPM_BUILD_ROOT -name libgcj.a -o -name libgtkpeer.a \
|
||||
-o -name libgjsmalsa.a -o -name libgcj-tools.a -o -name libjvm.a \
|
||||
-o -name libgij.a -o -name libgcj_bc.a | xargs rm -f
|
||||
-o -name libgij.a -o -name libgcj_bc.a -o -name libjavamath.a \
|
||||
| xargs rm -f
|
||||
|
||||
mv $RPM_BUILD_ROOT%{_prefix}/lib/libgcj.spec $FULLPATH/
|
||||
sed -i -e 's/lib: /&%%{static:%%eJava programs cannot be linked statically}/' \
|
||||
@ -932,17 +831,9 @@ ln -sf ../../../libgomp.so.1.* libgomp.so
|
||||
ln -sf ../../../libmudflap.so.0.* libmudflap.so
|
||||
ln -sf ../../../libmudflapth.so.0.* libmudflapth.so
|
||||
%if %{build_java}
|
||||
ln -sf ../../../libgcj.so.9.* libgcj.so
|
||||
ln -sf ../../../libgcj-tools.so.9.* libgcj-tools.so
|
||||
ln -sf ../../../libgij.so.9.* libgij.so
|
||||
%endif
|
||||
%if %{build_ada}
|
||||
cd adalib
|
||||
ln -sf ../../../../libgnarl-*.so libgnarl.so
|
||||
ln -sf ../../../../libgnarl-*.so libgnarl-4.3.so
|
||||
ln -sf ../../../../libgnat-*.so libgnat.so
|
||||
ln -sf ../../../../libgnat-*.so libgnat-4.3.so
|
||||
cd ..
|
||||
ln -sf ../../../libgcj.so.10.* libgcj.so
|
||||
ln -sf ../../../libgcj-tools.so.10.* libgcj-tools.so
|
||||
ln -sf ../../../libgij.so.10.* libgij.so
|
||||
%endif
|
||||
else
|
||||
ln -sf ../../../../%{_lib}/libobjc.so.2 libobjc.so
|
||||
@ -952,17 +843,9 @@ ln -sf ../../../../%{_lib}/libgomp.so.1.* libgomp.so
|
||||
ln -sf ../../../../%{_lib}/libmudflap.so.0.* libmudflap.so
|
||||
ln -sf ../../../../%{_lib}/libmudflapth.so.0.* libmudflapth.so
|
||||
%if %{build_java}
|
||||
ln -sf ../../../../%{_lib}/libgcj.so.9.* libgcj.so
|
||||
ln -sf ../../../../%{_lib}/libgcj-tools.so.9.* libgcj-tools.so
|
||||
ln -sf ../../../../%{_lib}/libgij.so.9.* libgij.so
|
||||
%endif
|
||||
%if %{build_ada}
|
||||
cd adalib
|
||||
ln -sf ../../../../../%{_lib}/libgnarl-*.so libgnarl.so
|
||||
ln -sf ../../../../../%{_lib}/libgnarl-*.so libgnarl-4.3.so
|
||||
ln -sf ../../../../../%{_lib}/libgnat-*.so libgnat.so
|
||||
ln -sf ../../../../../%{_lib}/libgnat-*.so libgnat-4.3.so
|
||||
cd ..
|
||||
ln -sf ../../../../%{_lib}/libgcj.so.10.* libgcj.so
|
||||
ln -sf ../../../../%{_lib}/libgcj-tools.so.10.* libgcj-tools.so
|
||||
ln -sf ../../../../%{_lib}/libgij.so.10.* libgij.so
|
||||
%endif
|
||||
fi
|
||||
%if %{build_java}
|
||||
@ -975,6 +858,45 @@ mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libobjc.*a .
|
||||
mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libgomp.*a .
|
||||
mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libmudflap{,th}.*a $FULLLPATH/
|
||||
|
||||
%if %{build_ada}
|
||||
%ifarch sparcv9 ppc
|
||||
rm -rf $FULLPATH/64/ada{include,lib}
|
||||
%endif
|
||||
%ifarch %{multilib_64_archs}
|
||||
rm -rf $FULLPATH/32/ada{include,lib}
|
||||
%endif
|
||||
if [ "$FULLPATH" != "$FULLLPATH" ]; then
|
||||
mv -f $FULLPATH/ada{include,lib} $FULLLPATH/
|
||||
pushd $FULLLPATH/adalib
|
||||
if [ "%{_lib}" = "lib" ]; then
|
||||
ln -sf ../../../../../libgnarl-*.so libgnarl.so
|
||||
ln -sf ../../../../../libgnarl-*.so libgnarl-4.4.so
|
||||
ln -sf ../../../../../libgnat-*.so libgnat.so
|
||||
ln -sf ../../../../../libgnat-*.so libgnat-4.4.so
|
||||
else
|
||||
ln -sf ../../../../../../%{_lib}/libgnarl-*.so libgnarl.so
|
||||
ln -sf ../../../../../../%{_lib}/libgnarl-*.so libgnarl-4.4.so
|
||||
ln -sf ../../../../../../%{_lib}/libgnat-*.so libgnat.so
|
||||
ln -sf ../../../../../../%{_lib}/libgnat-*.so libgnat-4.4.so
|
||||
fi
|
||||
popd
|
||||
else
|
||||
pushd $FULLPATH/adalib
|
||||
if [ "%{_lib}" = "lib" ]; then
|
||||
ln -sf ../../../../libgnarl-*.so libgnarl.so
|
||||
ln -sf ../../../../libgnarl-*.so libgnarl-4.4.so
|
||||
ln -sf ../../../../libgnat-*.so libgnat.so
|
||||
ln -sf ../../../../libgnat-*.so libgnat-4.4.so
|
||||
else
|
||||
ln -sf ../../../../../%{_lib}/libgnarl-*.so libgnarl.so
|
||||
ln -sf ../../../../../%{_lib}/libgnarl-*.so libgnarl-4.4.so
|
||||
ln -sf ../../../../../%{_lib}/libgnat-*.so libgnat.so
|
||||
ln -sf ../../../../../%{_lib}/libgnat-*.so libgnat-4.4.so
|
||||
fi
|
||||
popd
|
||||
fi
|
||||
%endif
|
||||
|
||||
%ifarch sparcv9 ppc
|
||||
ln -sf ../../../../../lib64/libobjc.so.2 64/libobjc.so
|
||||
ln -sf ../`echo ../../../../lib/libstdc++.so.6.* | sed s~/lib/~/lib64/~` 64/libstdc++.so
|
||||
@ -986,9 +908,9 @@ echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libmudflapth.so.0.* | sed 's
|
||||
echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libmudflap.so.0.* | sed 's,^.*libm,libm,'`' )' > 64/libmudflap.so
|
||||
echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libmudflapth.so.0.* | sed 's,^.*libm,libm,'`' )' > 64/libmudflapth.so
|
||||
%if %{build_java}
|
||||
ln -sf ../`echo ../../../../lib/libgcj.so.9.* | sed s~/lib/~/lib64/~` 64/libgcj.so
|
||||
ln -sf ../`echo ../../../../lib/libgcj-tools.so.9.* | sed s~/lib/~/lib64/~` 64/libgcj-tools.so
|
||||
ln -sf ../`echo ../../../../lib/libgij.so.9.* | sed s~/lib/~/lib64/~` 64/libgij.so
|
||||
ln -sf ../`echo ../../../../lib/libgcj.so.10.* | sed s~/lib/~/lib64/~` 64/libgcj.so
|
||||
ln -sf ../`echo ../../../../lib/libgcj-tools.so.10.* | sed s~/lib/~/lib64/~` 64/libgcj-tools.so
|
||||
ln -sf ../`echo ../../../../lib/libgij.so.10.* | sed s~/lib/~/lib64/~` 64/libgij.so
|
||||
ln -sf lib32/libgcj_bc.so libgcj_bc.so
|
||||
ln -sf ../lib64/libgcj_bc.so 64/libgcj_bc.so
|
||||
%endif
|
||||
@ -1002,6 +924,12 @@ ln -sf lib32/libmudflap.a libmudflap.a
|
||||
ln -sf ../lib64/libmudflap.a 64/libmudflap.a
|
||||
ln -sf lib32/libmudflapth.a libmudflapth.a
|
||||
ln -sf ../lib64/libmudflapth.a 64/libmudflapth.a
|
||||
%if %{build_ada}
|
||||
ln -sf lib32/adainclude adainclude
|
||||
ln -sf ../lib64/adainclude 64/adainclude
|
||||
ln -sf lib32/adalib adalib
|
||||
ln -sf ../lib64/adalib 64/adalib
|
||||
%endif
|
||||
%endif
|
||||
%ifarch %{multilib_64_archs}
|
||||
mkdir -p 32
|
||||
@ -1015,9 +943,9 @@ echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libmudflapth.so.0.* | se
|
||||
echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libmudflap.so.0.* | sed 's,^.*libm,libm,'`' )' > 32/libmudflap.so
|
||||
echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libmudflapth.so.0.* | sed 's,^.*libm,libm,'`' )' > 32/libmudflapth.so
|
||||
%if %{build_java}
|
||||
ln -sf ../`echo ../../../../lib64/libgcj.so.9.* | sed s~/../lib64/~/~` 32/libgcj.so
|
||||
ln -sf ../`echo ../../../../lib64/libgcj-tools.so.9.* | sed s~/../lib64/~/~` 32/libgcj-tools.so
|
||||
ln -sf ../`echo ../../../../lib64/libgij.so.9.* | sed s~/../lib64/~/~` 32/libgij.so
|
||||
ln -sf ../`echo ../../../../lib64/libgcj.so.10.* | sed s~/../lib64/~/~` 32/libgcj.so
|
||||
ln -sf ../`echo ../../../../lib64/libgcj-tools.so.10.* | sed s~/../lib64/~/~` 32/libgcj-tools.so
|
||||
ln -sf ../`echo ../../../../lib64/libgij.so.10.* | sed s~/../lib64/~/~` 32/libgij.so
|
||||
%endif
|
||||
mv -f $RPM_BUILD_ROOT%{_prefix}/lib/libsupc++.*a 32/
|
||||
mv -f $RPM_BUILD_ROOT%{_prefix}/lib/libgfortran.*a 32/
|
||||
@ -1035,6 +963,12 @@ ln -sf lib64/libmudflapth.a libmudflapth.a
|
||||
ln -sf ../lib32/libgcj_bc.so 32/libgcj_bc.so
|
||||
ln -sf lib64/libgcj_bc.so libgcj_bc.so
|
||||
%endif
|
||||
%if %{build_ada}
|
||||
ln -sf ../lib32/adainclude 32/adainclude
|
||||
ln -sf lib64/adainclude adainclude
|
||||
ln -sf ../lib32/adalib 32/adalib
|
||||
ln -sf lib64/adalib adalib
|
||||
%endif
|
||||
%else
|
||||
%ifarch %{multilib_64_archs}
|
||||
ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_version}/libstdc++.a 32/libstdc++.a
|
||||
@ -1043,6 +977,10 @@ ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_version}/libm
|
||||
%if %{build_java}
|
||||
ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_version}/libgcj_bc.so 32/libgcj_bc.so
|
||||
%endif
|
||||
%if %{build_ada}
|
||||
ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_version}/adainclude 32/adainclude
|
||||
ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_version}/adalib 32/adalib
|
||||
%endif
|
||||
%endif
|
||||
%endif
|
||||
|
||||
@ -1287,6 +1225,7 @@ fi
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/SYSCALLS.c.X
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/stddef.h
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/stdarg.h
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/stdfix.h
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/varargs.h
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/float.h
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/limits.h
|
||||
@ -1306,10 +1245,14 @@ fi
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/nmmintrin.h
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/bmmintrin.h
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/wmmintrin.h
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/immintrin.h
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/avxintrin.h
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/x86intrin.h
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/mmintrin-common.h
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/mm_malloc.h
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/mm3dnow.h
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/cpuid.h
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/cross-stdarg.h
|
||||
%endif
|
||||
%ifarch ia64
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/ia64intrin.h
|
||||
@ -1322,6 +1265,7 @@ fi
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/ppu_intrinsics.h
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/si2vmx.h
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/spu2vmx.h
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/vec_types.h
|
||||
%endif
|
||||
%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/collect2
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/crt*.o
|
||||
@ -1620,6 +1564,7 @@ fi
|
||||
%{_prefix}/%{_lib}/gcj-%{version}/libgcjwebplugin.so
|
||||
%endif
|
||||
%{_prefix}/%{_lib}/gcj-%{version}/libjvm.so
|
||||
%{_prefix}/%{_lib}/gcj-%{version}/libjavamath.so
|
||||
%dir %{_prefix}/share/java
|
||||
%{_prefix}/share/java/[^sl]*
|
||||
%{_prefix}/share/java/libgcj-%{version}.jar
|
||||
@ -1684,8 +1629,20 @@ fi
|
||||
%dir %{_prefix}/libexec/gcc
|
||||
%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}
|
||||
%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}
|
||||
%ifarch sparcv9 ppc
|
||||
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/adainclude
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/64/adalib
|
||||
%endif
|
||||
%ifarch %{multilib_64_archs}
|
||||
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/adainclude
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/32/adalib
|
||||
%endif
|
||||
%ifarch sparcv9 sparc64 ppc ppc64
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/adainclude
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/adalib
|
||||
%endif
|
||||
%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/gnat1
|
||||
%doc rpm.doc/changelogs/gcc/ada/ChangeLog*
|
||||
|
||||
@ -1693,6 +1650,26 @@ fi
|
||||
%defattr(-,root,root)
|
||||
%{_prefix}/%{_lib}/libgnat-*.so
|
||||
%{_prefix}/%{_lib}/libgnarl-*.so
|
||||
|
||||
%files -n libgnat-devel
|
||||
%defattr(-,root,root)
|
||||
%dir %{_prefix}/lib/gcc
|
||||
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}
|
||||
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}
|
||||
%ifarch sparcv9 ppc
|
||||
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/adainclude
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/adalib
|
||||
%endif
|
||||
%ifarch sparc64 ppc64
|
||||
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64/adainclude
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64/adalib
|
||||
%endif
|
||||
%ifnarch sparcv9 sparc64 ppc ppc64
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/adainclude
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/adalib
|
||||
%endif
|
||||
%endif
|
||||
|
||||
%files -n libgomp
|
||||
@ -1732,327 +1709,5 @@ fi
|
||||
%doc rpm.doc/changelogs/libmudflap/ChangeLog*
|
||||
|
||||
%changelog
|
||||
* Wed Nov 5 2008 Jakub Jelinek <jakub@redhat.com> 4.3.2-7
|
||||
- update from gcc-4_3-branch
|
||||
- PRs c/35437, fortran/35680, fortran/37723, fortran/37749, fortran/37787,
|
||||
fortran/37794, fortran/37903, libfortran/37707, libfortran/37863,
|
||||
middle-end/37882, other/37897, rtl-optimization/37769, target/37909,
|
||||
target/37939, tree-optimization/37102
|
||||
- fix ICE in extract_bit_field_1 (PR middle-end/37870)
|
||||
- combiner fix for shifts (PR c/37924)
|
||||
- fix -fdump-ipa-all -dv (PR middle-end/37858)
|
||||
- fix ICE with wrong use of noreturn attribute (PR tree-optimization/37879)
|
||||
- fix up --with-java_bootstrap build
|
||||
|
||||
* Thu Oct 9 2008 Jakub Jelinek <jakub@redhat.com> 4.3.2-6
|
||||
- fix fallouts from the -g -O0 debugging patch (#466169, #466198)
|
||||
|
||||
* Wed Oct 8 2008 Jakub Jelinek <jakub@redhat.com> 4.3.2-5
|
||||
- update from gcc-4_3-branch
|
||||
- PRs c++/37555, c/35712, c/37645, fortran/35770, fortran/35945,
|
||||
fortran/36374, fortran/36454, fortran/36700, fortran/37274,
|
||||
fortran/37504, fortran/37580, fortran/37583, fortran/37626,
|
||||
fortran/37706, middle-end/36575, middle-end/37236, middle-end/37731,
|
||||
rtl-optimization/37544, target/35620, target/35713, target/37603,
|
||||
tree-opt/35737, tree-optimization/36343, tree-optimization/37539
|
||||
- ensure one can put breakpoints on break, continue and goto statements
|
||||
with -g -O0 (#465824, PRs debug/29609, debug/36690, debug/37616)
|
||||
- emit one DW_TAG_common_block for each common block in each scope, not
|
||||
one for each common block in one CU (#465974, PR debug/37738)
|
||||
- Intel -maes and -mpclmul support
|
||||
|
||||
* Wed Sep 17 2008 Jakub Jelinek <jakub@redhat.com> 4.3.2-4
|
||||
- update from gcc-4_3-branch
|
||||
- PRs c++/37389, fortran/35837, fortran/36214, fortran/37099, fortran/37199,
|
||||
rtl-optimization/37408, target/37466, tree-optimization/36630
|
||||
- revert PR c++/36741 fix
|
||||
- fix VLA debuginfo at -O0 (PR debug/34037)
|
||||
|
||||
* Sat Sep 6 2008 Jakub Jelinek <jakub@redhat.com> 4.3.2-3
|
||||
- don't run tests that require Altivec hw on non-Altivec powerpcs
|
||||
- make sure none of libgcj binaries/libraries contains /usr/%{lib} in
|
||||
RPATH
|
||||
- fix up BuildRoot
|
||||
|
||||
* Fri Sep 5 2008 Jakub Jelinek <jakub@redhat.com> 4.3.2-2
|
||||
- update from gcc-4_3-branch
|
||||
- PRs c++/37348, c/37261, fortran/36371, fortran/37193, middle-end/36449,
|
||||
target/36332, target/37168
|
||||
- make ChangeLog files and gcc.info valid UTF-8, remove gnative2ascii from
|
||||
gcc-gnat, comment out most of the Obsoletes (#225778)
|
||||
- on x86_64 decrease frame size in varargs functions that don't need saving
|
||||
gpr or fpr registers
|
||||
- fix ICE on implicitly determined firstprivate where copy ctor or dtor
|
||||
needs synthetization (PR c++/37189)
|
||||
- document how to recrease the tarball
|
||||
|
||||
* Fri Aug 29 2008 Jakub Jelinek <jakub@redhat.com> 4.3.2-1
|
||||
- update from gcc-4_3-branch
|
||||
- 4.3.2 release
|
||||
- PRs c++/36741, middle-end/36548, middle-end/36817, middle-end/37125,
|
||||
target/37184, target/37191, target/37197
|
||||
- backport further Fortran debuginfo improvements (#460378, #459375)
|
||||
- revert removal of adjacent bitfield comparison
|
||||
optimization (PR middle-end/37248)
|
||||
- on ppc/ppc64 add paired.h, ppu_instrinsics.h, si2vmx.h and spu2vmx.h
|
||||
headers (#460497)
|
||||
|
||||
* Mon Aug 25 2008 Jakub Jelinek <jakub@redhat.com> 4.3.1-8
|
||||
- update from gcc-4_3-branch
|
||||
- PRs debug/37156, libgcj/8995, libstdc++/37100, target/37101
|
||||
- backport Fortran debuginfo improvements (PRs debug/35896, fortran/35154,
|
||||
fortran/35724, fortran/35892, fortran/29635, fortran/23057
|
||||
fortran/24790, #457792, #457793, #459374, #459376, #459378)
|
||||
|
||||
* Thu Aug 14 2008 Jakub Jelinek <jakub@redhat.com> 4.3.1-7
|
||||
- update from gcc-4_3-branch
|
||||
- PRs bootstrap/35752, c++/36688, c++/36999, c++/37016, c/35746,
|
||||
fortran/36582, libgcj/31890, middle-end/35432, middle-end/36691,
|
||||
middle-end/37014, middle-end/37026, middle-end/37042,
|
||||
rtl-optimization/35542, rtl-optimization/36998, target/35659,
|
||||
target/36613, tree-optimization/36991
|
||||
- fix folding of widened comparisons (PR middle-end/37103)
|
||||
|
||||
* Fri Aug 1 2008 Jakub Jelinek <jakub@redhat.com> 4.3.1-6
|
||||
- update from gcc-4_3-branch
|
||||
- PRs c++/36405, c++/36767, c++/36852, debug/36278, preprocessor/36649,
|
||||
rtl-optimization/36929
|
||||
- fix the last -Os -fasynchronous-unwind-tables known issue (#447912,
|
||||
PR rtl-optimization/36419)
|
||||
- don't loop > 230000 times in make_temp_file if /tmp is full (#203231)
|
||||
|
||||
* Mon Jul 28 2008 Jakub Jelinek <jakub@redhat.com> 4.3.1-5
|
||||
- update from gcc-4_3-branch
|
||||
- PRs c++/36407, fortran/36132, fortran/36366, fortran/36824, fortran/36852,
|
||||
libfortran/36852, libstdc++/36552, libstdc++/36729, libstdc++/36832,
|
||||
middle-end/36369, middle-end/36811, middle-end/36877,
|
||||
rtl-optimization/35281, rtl-optimization/36419,
|
||||
rtl-optimization/36753, target/35492, target/35802, target/36780,
|
||||
target/36782, target/36784, target/36827, tree-optimization/36830
|
||||
- OpenMP 3.0 bugfixes from trunk
|
||||
- fix occassional hangs of libgomp.c/ordered-3.c
|
||||
- PR middle-end/36790
|
||||
|
||||
* Tue Jul 8 2008 Jakub Jelinek <jakub@redhat.com> 4.3.1-4
|
||||
- update from gcc-4_3-branch
|
||||
- PRs c++/34963, c++/36662, fortran/36546, fortran/36657, fortran/36676,
|
||||
libstdc++/36612, libstdc++/36616, rtl-optimization/34744,
|
||||
target/34780, target/34856, target/36510, target/36634,
|
||||
target/36684, target/36698, target/36736, testsuite/36620,
|
||||
tree-optimization/36648
|
||||
- fix -frepo (#448390, PR c++/36364)
|
||||
- improve OpenMP debug info (PRs debug/36617, middle-end/36726)
|
||||
|
||||
* Tue Jun 24 2008 Jakub Jelinek <jakub@redhat.com> 4.3.1-3
|
||||
- update from gcc-4_3-branch
|
||||
- PRs c++/35317, c++/35320, documentation/30739, fortran/34908,
|
||||
fortran/36276, fortran/36538, java/36247, middle-end/36584,
|
||||
rtl-optimization/35604, target/36336, target/36424,
|
||||
tree-optimization/36493, tree-optimization/36498,
|
||||
tree-optimization/36504, tree-optimization/36519
|
||||
- don't mark hard registers as reg pointers (#451068, target/36533)
|
||||
- allow more compute_antic iterations (#450889, tree-optimization/36508)
|
||||
- fix #pragma omp task copyfn registration with cgraph (c++/36523)
|
||||
|
||||
* Thu Jun 12 2008 Jakub Jelinek <jakub@redhat.com> 4.3.1-2
|
||||
- update from gcc-4_3-branch
|
||||
- PRs c++/36408, middle-end/35336, middle-end/36506, testsuite/36443,
|
||||
tree-optimization/36474
|
||||
- OpenMP 3.0 bugfixes from trunk
|
||||
- fix a thinko in task dispatching on barriers
|
||||
- PRs libgomp/36469, libgomp/36471
|
||||
- fix nested inline functions in -std=gnu99 mode (#450967, PR c/36507)
|
||||
|
||||
* Mon Jun 9 2008 Jakub Jelinek <jakub@redhat.com> 4.3.1-1
|
||||
- update from gcc-4_3-branch
|
||||
- 4.3.1 release
|
||||
- PRs ada/24880, ada/26635, bootstrap/35169, bootstrap/36452, c++/35578,
|
||||
c++/35986, c++/36023, c++/36237, c++/36308, fortran/35184,
|
||||
fortran/35743, fortran/35745, fortran/35756, fortran/35759,
|
||||
fortran/35780, fortran/35864, fortran/35997, fortran/36176,
|
||||
fortran/36233, libfortran/35990, libfortran/35993, libfortran/35995,
|
||||
libgcj/36252, libstdc++/35922, middle-end/34973, middle-end/36013,
|
||||
middle-end/36077, middle-end/36093, middle-end/36106,
|
||||
middle-end/36137, middle-end/36154, middle-end/36172,
|
||||
middle-end/36194, middle-end/36227, middle-end/36244,
|
||||
middle-end/36300, middle-end/PR28690, rtl-optimization/36111,
|
||||
rtl-optimization/36419, target/27386, target/30243, target/34932,
|
||||
target/35661, target/35921, target/36079, target/36090, target/36095,
|
||||
target/36182, target/36224, target/36321, target/36362,
|
||||
tree-optimization/34244, tree-optimization/34330,
|
||||
tree-optimization/34976, tree-optimization/35204,
|
||||
tree-optimization/36098, tree-optimization/36119,
|
||||
tree-optimization/36129, tree-optimization/36181,
|
||||
tree-optimization/36187, tree-optimization/36245,
|
||||
tree-optimization/36262, tree-optimization/36291,
|
||||
tree-optimization/36293, tree-optimization/36339
|
||||
- OpenMP 3.0 support
|
||||
|
||||
* Tue May 20 2008 Tom "spot" Callaway <tcallawa@redhat.com> 4.3.0-11
|
||||
- fix missing file with sparcv9
|
||||
|
||||
* Sun May 18 2008 Tom "spot" Callaway <tcallawa@redhat.com> 4.3.0-10
|
||||
- make sparcv9 the multilib_32_arch for sparc64
|
||||
|
||||
* Sun May 18 2008 Tom "spot" Callaway <tcallawa@redhat.com> 4.3.0-9
|
||||
- sparcv9 support and detection
|
||||
|
||||
* Mon Apr 28 2008 Jakub Jelinek <jakub@redhat.com> 4.3.0-8
|
||||
- update from gcc-4_3-branch
|
||||
- decrease compile time stack usage during GC (#443739, PR debug/36060)
|
||||
- fix -mregparm=X with K&R function decls (#443583, PR target/36015)
|
||||
- fix tail called sqrt and math builtins (#435297,
|
||||
PR rtl-optimization/36017)
|
||||
- PRs c++/33486, c++/35316, c++/35325, c++/35678, c++/35747, c++/35758,
|
||||
c++/35773, c/35436, c/35744, fortran/35932, fortran/35944,
|
||||
fortran/35946, fortran/35947, fortran/35959, fortran/35994,
|
||||
libgcj/35950, libstdc++/35597, libstdc++/35887, libstdc++/35954,
|
||||
middle-end/36021, target/35944, testsuite/36056,
|
||||
tree-optimization/35982, tree-optimization/36008,
|
||||
tree-optimization/36034
|
||||
- fix C++ const references to bitfields (PR c++/35909)
|
||||
- fix C++ ++var = val error recovery (PR c++/35987)
|
||||
- fix C++ reference binding to function through using-decl (PR c++/35650)
|
||||
|
||||
* Wed Apr 16 2008 Jakub Jelinek <jakub@redhat.com> 4.3.0-7
|
||||
- update from gcc-4_3-branch
|
||||
- PRs c++/35708, c++/35734, libstdc++/35816, middle-end/35519,
|
||||
rtl-optimization/34916, target/35364, target/35695,
|
||||
tree-optimization/35821, tree-optimization/35833
|
||||
- fix libgfortran buffer overflows
|
||||
- fix restoring of Altivec registers when alloca is used (PR target/35907)
|
||||
- misc fixes (PRs tree-optimization/35899, target/35662, c/35739)
|
||||
|
||||
* Fri Apr 4 2008 Jakub Jelinek <jakub@redhat.com> 4.3.0-6
|
||||
- update from gcc-4_3-branch
|
||||
- PRs ada/33857, c++/35245, c++/35741, c/35738, fortran/35698,
|
||||
fortran/35699, fortran/35702, fortran/35724, fortran/35740,
|
||||
fortran/35786, libfortran/35699, libstdc++/35725, middle-end/35429,
|
||||
middle-end/35705, middle-end/35818, target/31110, target/31232,
|
||||
target/35657, tree-opt/35431
|
||||
- fix OpenMP ICE on invalid extern/static VLA (PR c/35751)
|
||||
- fix PCH failure if a precompiled header is included more than
|
||||
once (#251682, PR pch/13675)
|
||||
|
||||
* Thu Mar 27 2008 Jakub Jelinek <jakub@redhat.com> 4.3.0-5
|
||||
- fix libgomp when sync builtins aren't available
|
||||
- on i386 build libgomp and __cxa_guard_* as i486+,
|
||||
NPTL doesn't support pre-i486 anyway and atomic builtins give
|
||||
significant speedups
|
||||
|
||||
* Wed Mar 26 2008 Jakub Jelinek <jakub@redhat.com> 4.3.0-4
|
||||
- update from gcc-4_3-branch
|
||||
- PRs c++/35332, c++/35548, debug/31510, fortran/33295, fortran/34813,
|
||||
libfortran/35617, libfortran/35627, libgomp/35625, libstdc++/35256,
|
||||
libstdc++/35637, middle-end/35593, middle-end/35609,
|
||||
middle-end/35611, middle-end/35616, target/35504, testsuite/34168,
|
||||
testsuite/35621
|
||||
- backport libgomp speedups from gomp-3_0-branch (#437268)
|
||||
- fix diagnostics with compound literals (PR c/35440)
|
||||
- fix C++ handling of late template attributes (PR c++/35546)
|
||||
- Prereq install-info in libgomp (#437523)
|
||||
|
||||
* Fri Mar 14 2008 Jakub Jelinek <jakub@redhat.com> 4.3.0-3
|
||||
- update from gcc-4_3-branch
|
||||
- PRs c++/33887, c++/35328, c++/35337, c++/35469, c/35438, c/35439,
|
||||
fortran/35474, libstdc++/35541, libstdc++/35566, middle-end/35099,
|
||||
middle-end/35185, middle-end/35456, middle-end/35526,
|
||||
middle-end/35549, target/34000, target/35190, target/35225,
|
||||
target/35350, target/35496, target/35540, target/35553,
|
||||
tree-optimization/34989, tree-optimization/35472
|
||||
- fix eclipse build (#434356)
|
||||
- libstdc++ doc fix (#436687)
|
||||
|
||||
* Fri Mar 7 2008 Jakub Jelinek <jakub@redhat.com> 4.3.0-2
|
||||
- fix ppc/ppc64 8/16 bit sync builtins (PR target/35498)
|
||||
|
||||
* Fri Mar 7 2008 Jakub Jelinek <jakub@redhat.com> 4.3.0-1
|
||||
- gcc 4.3.0 release
|
||||
- PRs c++/35244, c++/35315, c++/35323, c++/35333, c++/35338, driver/35420,
|
||||
libfortran/35355, libstdc++/35480, target/33963, target/35189,
|
||||
target/35222, target/35401, target/35453
|
||||
|
||||
* Fri Feb 29 2008 Jakub Jelinek <jakub@redhat.com> 4.3.0-0.13
|
||||
- update from gcc-4_3-branch
|
||||
- PRs middle-end/19984, target/25477
|
||||
- remove <system_error>, fix ppc/ppc64
|
||||
std::{,tr1::}hash<long double>::operator() ABI
|
||||
|
||||
* Thu Feb 28 2008 Jakub Jelinek <jakub@redhat.com> 4.3.0-0.12
|
||||
- update from gcc-4_3-branch
|
||||
- PRs c++/34715, c++/35368, libfortran/24685, middle-end/34971,
|
||||
middle-end/35390, target/25477
|
||||
|
||||
* Fri Feb 22 2008 Jakub Jelinek <jakub@redhat.com> 4.3.0-0.11
|
||||
- update from gcc-4_3-branch
|
||||
- 4.3.0 rc1
|
||||
- PRs bootstrap/35218, bootstrap/35273, c++/34950, c++/35282,
|
||||
middle-end/35265, rtl-optimization/35232, target/34526,
|
||||
target/35071, target/35239, target/35264
|
||||
|
||||
* Mon Feb 18 2008 Jakub Jelinek <jakub@redhat.com> 4.3.0-0.10
|
||||
- update to trunk
|
||||
- PRs c++/11159, c++/28743, c++/34050, c++/35023, c++/35024, c++/35026,
|
||||
c++/5645, c/28368, documentation/15479, fortran/34952,
|
||||
fortran/35150, libgcj/33085, libstdc++/34797, libstdc++/35209,
|
||||
libstdc++/35221, middle-end/34621, middle-end/35149, middle-end/35196,
|
||||
middle-end/35227, preprocessor/35061, target/34930, target/35088,
|
||||
testsuite/35119, testsuite/35208, tree-optimization/35164,
|
||||
tree-optimization/35231
|
||||
- some OpenMP fixes (PRs c++/34964, c++/35028, c++/35078)
|
||||
- fix cp-tools.info* @direntry (#433222)
|
||||
|
||||
* Thu Feb 14 2008 Jakub Jelinek <jakub@redhat.com> 4.3.0-0.9
|
||||
- update to trunk
|
||||
- PRs middle-end/29673, ada/35143, c++/34774, c++/34824, c++/34962, c++/34937,
|
||||
c++/34939, debug/35065, other/35148, target/34393
|
||||
- fix ia64 build (#432068)
|
||||
|
||||
* Tue Feb 12 2008 Jakub Jelinek <jakub@redhat.com> 4.3.0-0.8
|
||||
- update to trunk
|
||||
- PRs bootstrap/33781, bootstrap/34922, bootstrap/35051, bootstrap/35115,
|
||||
c++/29048, c++/33553, c++/33916, c++/33964, c++/34052, c++/34094,
|
||||
c++/34314, c++/34776, c++/34862, c++/34891, c++/34935, c++/34936,
|
||||
c++/35049, c++/35056, c++/35074, c++/35077, c++/35096, c++/35097,
|
||||
c++/35113, c++/35116, c/29326, c/34993, documentation/30330,
|
||||
fortran/32315, fortran/32760, fortran/34910, fortran/34945,
|
||||
fortran/35037, fortran/35093, java/35035, libffi/34612,
|
||||
libfortran/35001, libfortran/35063, libgcj/30071, libstdc++/16251,
|
||||
middle-end/33631, middle-end/34627, middle-end/35043,
|
||||
middle-end/35136, middle-end/35163, middle_end/34150, objc++/34193,
|
||||
other/29972, other/31405, other/32754, other/35042, other/35070,
|
||||
other/35107, rtl-opt/33410, rtl-optimization/34773,
|
||||
rtl-optimization/34995, rtl-optimization/34998, target/23322,
|
||||
target/34900, target/34982, target/35045, target/35083,
|
||||
target/35084, testsuite/33946, testsuite/35047,
|
||||
tree-optimization/33992, tree-optimization/35085, tree-optimization/35171
|
||||
- inline asm optimization fix (#432146, PR inline-asm/35160)
|
||||
- SRA fix (#432090, PR c++/35144)
|
||||
- fix #pragma omp parallel body calling nested functions which store
|
||||
into shared parent variables (PR middle-end/35130)
|
||||
- ./-> after dependent expr parsing fix (PR c++/35138)
|
||||
|
||||
* Wed Jan 30 2008 Jakub Jelinek <jakub@redhat.com> 4.3.0-0.7
|
||||
- update from trunk
|
||||
- fix ISO C99 6.7.4p3 diagnostics (#427634, PR c/35017)
|
||||
|
||||
* Fri Jan 25 2008 Jakub Jelinek <jakub@redhat.com> 4.3.0-0.6
|
||||
- update from the trunk
|
||||
|
||||
* Thu Jan 10 2008 Jakub Jelinek <jakub@redhat.com> 4.3.0-0.5
|
||||
- update from the trunk
|
||||
- don't require on ppc/ppc64 libmudflap in gcc subpackage
|
||||
|
||||
* Thu Dec 20 2007 Jakub Jelinek <jakub@redhat.com> 4.3.0-0.4
|
||||
- update from the trunk
|
||||
- adjustments to build against xulrunner-devel
|
||||
|
||||
* Fri Dec 14 2007 Jakub Jelinek <jakub@redhat.com> 4.3.0-0.3
|
||||
- build fastjar, gjar is uncomparably worse
|
||||
- fix profiledbootstrap and use it
|
||||
|
||||
* Wed Dec 12 2007 Jakub Jelinek <jakub@redhat.com> 4.3.0-0.2
|
||||
- update from the trunk
|
||||
|
||||
* Sun Dec 9 2007 Jakub Jelinek <jakub@redhat.com> 4.3.0-0.1
|
||||
- initial 4.3 package, using newly created redhat/gcc-4_3-branch
|
||||
* Fri Jan 16 2009 Jakub Jelinek <jakub@redhat.com> 4.4.0-0.3
|
||||
- initial 4.4 package, using newly created redhat/gcc-4_4-branch
|
1351
gcc43-aes.patch
1351
gcc43-aes.patch
File diff suppressed because it is too large
Load Diff
@ -1,42 +0,0 @@
|
||||
2008-08-26 Janis Johnson <janis187@us.ibm.com>
|
||||
|
||||
* g++.dg/ext/altivec-3.C: Move AltiVec code out of main.
|
||||
|
||||
2008-04-04 Janis Johnson <janis187@us.ibm.com>
|
||||
|
||||
* gcc.dg/var-expand3.c: Skip for powerpc-linux if not on AltiVec HW.
|
||||
|
||||
--- gcc/testsuite/g++.dg/ext/altivec-3.C (revision 139609)
|
||||
+++ gcc/testsuite/g++.dg/ext/altivec-3.C (revision 139610)
|
||||
@@ -120,16 +120,19 @@ void baz2 (int i, ... )
|
||||
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;
|
||||
}
|
||||
--- gcc/testsuite/gcc.dg/var-expand3.c (revision 133910)
|
||||
+++ gcc/testsuite/gcc.dg/var-expand3.c (revision 133911)
|
||||
@@ -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"
|
@ -1,86 +0,0 @@
|
||||
2007-08-27 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* config/rs6000/rs6000.c (rs6000_elf_end_indicate_exec_stack): New.
|
||||
* config/rs6000/linux64.h (TARGET_ASM_FILE_END): Use
|
||||
rs6000_elf_end_indicate_exec_stack.
|
||||
* config/ia64/ia64.c (ia64_linux_file_end): new.
|
||||
* config/ia64/linux.h (TARGET_ASM_FILE_END): Use ia64_linux_file_end.
|
||||
|
||||
--- gcc/config/rs6000/rs6000.c.jj 2007-12-07 18:41:08.000000000 +0100
|
||||
+++ gcc/config/rs6000/rs6000.c 2007-12-07 18:42:12.000000000 +0100
|
||||
@@ -746,6 +746,7 @@ static void rs6000_file_start (void);
|
||||
static int rs6000_elf_reloc_rw_mask (void);
|
||||
static void rs6000_elf_asm_out_constructor (rtx, int);
|
||||
static void rs6000_elf_asm_out_destructor (rtx, int);
|
||||
+static void rs6000_elf_end_indicate_exec_stack (void) ATTRIBUTE_UNUSED;
|
||||
static void rs6000_elf_asm_init_sections (void);
|
||||
static section *rs6000_elf_select_rtx_section (enum machine_mode, rtx,
|
||||
unsigned HOST_WIDE_INT);
|
||||
@@ -20418,6 +20419,20 @@ rs6000_elf_declare_function_name (FILE *
|
||||
}
|
||||
ASM_OUTPUT_LABEL (file, name);
|
||||
}
|
||||
+
|
||||
+static void
|
||||
+rs6000_elf_end_indicate_exec_stack (void)
|
||||
+{
|
||||
+ if (TARGET_32BIT)
|
||||
+ file_end_indicate_exec_stack ();
|
||||
+ else
|
||||
+ {
|
||||
+ int saved_trampolines_created = trampolines_created;
|
||||
+ trampolines_created = 0;
|
||||
+ file_end_indicate_exec_stack ();
|
||||
+ trampolines_created = saved_trampolines_created;
|
||||
+ }
|
||||
+}
|
||||
#endif
|
||||
|
||||
#if TARGET_XCOFF
|
||||
--- gcc/config/rs6000/linux64.h.jj 2007-12-07 17:18:06.000000000 +0100
|
||||
+++ gcc/config/rs6000/linux64.h 2007-12-07 18:41:21.000000000 +0100
|
||||
@@ -504,7 +504,7 @@ extern int dot_symbols;
|
||||
#undef DRAFT_V4_STRUCT_RET
|
||||
#define DRAFT_V4_STRUCT_RET (!TARGET_64BIT)
|
||||
|
||||
-#define TARGET_ASM_FILE_END file_end_indicate_exec_stack
|
||||
+#define TARGET_ASM_FILE_END rs6000_elf_end_indicate_exec_stack
|
||||
|
||||
#define TARGET_POSIX_IO
|
||||
|
||||
--- gcc/config/ia64/linux.h.jj 2007-12-07 18:17:43.000000000 +0100
|
||||
+++ gcc/config/ia64/linux.h 2007-12-07 18:41:21.000000000 +0100
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
#define TARGET_VERSION fprintf (stderr, " (IA-64) Linux");
|
||||
|
||||
-#define TARGET_ASM_FILE_END file_end_indicate_exec_stack
|
||||
+#define TARGET_ASM_FILE_END ia64_linux_file_end
|
||||
|
||||
/* This is for -profile to use -lc_p instead of -lc. */
|
||||
#undef CC1_SPEC
|
||||
--- gcc/config/ia64/ia64.c.jj 2007-12-07 15:41:58.000000000 +0100
|
||||
+++ gcc/config/ia64/ia64.c 2007-12-07 18:43:18.000000000 +0100
|
||||
@@ -262,6 +262,8 @@ static section *ia64_select_rtx_section
|
||||
static void ia64_output_dwarf_dtprel (FILE *, int, rtx)
|
||||
ATTRIBUTE_UNUSED;
|
||||
static unsigned int ia64_section_type_flags (tree, const char *, int);
|
||||
+static void ia64_linux_file_end (void)
|
||||
+ ATTRIBUTE_UNUSED;
|
||||
static void ia64_init_libfuncs (void)
|
||||
ATTRIBUTE_UNUSED;
|
||||
static void ia64_hpux_init_libfuncs (void)
|
||||
@@ -9957,4 +9959,13 @@ ia64_c_mode_for_suffix (char suffix)
|
||||
return VOIDmode;
|
||||
}
|
||||
|
||||
+static void
|
||||
+ia64_linux_file_end (void)
|
||||
+{
|
||||
+ int saved_trampolines_created = trampolines_created;
|
||||
+ trampolines_created = 0;
|
||||
+ file_end_indicate_exec_stack ();
|
||||
+ trampolines_created = saved_trampolines_created;
|
||||
+}
|
||||
+
|
||||
#include "gt-ia64.h"
|
@ -1,105 +0,0 @@
|
||||
2008-10-09 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* tree-ssa-live.c (remove_unused_locals): Mark all edge's goto_block
|
||||
as used.
|
||||
* gimple-low.c (lower_return_expr, lower_builtin_setjmp): Set
|
||||
TREE_BLOCK on the newly created stmts.
|
||||
* tree-cfg.c (make_cond_expr_edges, make_goto_expr_edges): Only set
|
||||
goto_block on edges if goto_locus is known.
|
||||
|
||||
--- gcc/tree-ssa-live.c.jj 2008-10-07 21:25:57.000000000 +0200
|
||||
+++ gcc/tree-ssa-live.c 2008-10-09 00:25:20.000000000 +0200
|
||||
@@ -591,6 +591,8 @@ remove_unused_locals (void)
|
||||
{
|
||||
block_stmt_iterator bsi;
|
||||
tree phi, def;
|
||||
+ edge_iterator ei;
|
||||
+ edge e;
|
||||
|
||||
/* Walk the statements. */
|
||||
for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
|
||||
@@ -614,6 +616,10 @@ remove_unused_locals (void)
|
||||
mark_all_vars_used (&arg, NULL);
|
||||
}
|
||||
}
|
||||
+
|
||||
+ FOR_EACH_EDGE (e, ei, bb->succs)
|
||||
+ if (e->goto_locus)
|
||||
+ TREE_USED (e->goto_block) = true;
|
||||
}
|
||||
|
||||
/* Remove unmarked local vars from unexpanded_var_list. */
|
||||
--- gcc/gimple-low.c.jj 2008-10-07 21:25:58.000000000 +0200
|
||||
+++ gcc/gimple-low.c 2008-10-09 00:42:31.000000000 +0200
|
||||
@@ -590,6 +590,7 @@ lower_return_expr (tree_stmt_iterator *t
|
||||
found:
|
||||
t = build1 (GOTO_EXPR, void_type_node, label);
|
||||
SET_EXPR_LOCUS (t, EXPR_LOCUS (stmt));
|
||||
+ TREE_BLOCK (t) = TREE_BLOCK (stmt);
|
||||
tsi_link_before (tsi, t, TSI_SAME_STMT);
|
||||
tsi_delink (tsi);
|
||||
}
|
||||
@@ -672,6 +673,7 @@ lower_builtin_setjmp (tree_stmt_iterator
|
||||
t = implicit_built_in_decls[BUILT_IN_SETJMP_SETUP];
|
||||
t = build_call_expr (t, 2, CALL_EXPR_ARG (stmt, 0), arg);
|
||||
SET_EXPR_LOCUS (t, EXPR_LOCUS (stmt));
|
||||
+ TREE_BLOCK (t) = TREE_BLOCK (stmt);
|
||||
tsi_link_before (tsi, t, TSI_SAME_STMT);
|
||||
|
||||
/* Build 'DEST = 0' and insert. */
|
||||
@@ -680,6 +682,7 @@ lower_builtin_setjmp (tree_stmt_iterator
|
||||
t = build_gimple_modify_stmt (dest, fold_convert (TREE_TYPE (dest),
|
||||
integer_zero_node));
|
||||
SET_EXPR_LOCUS (t, EXPR_LOCUS (stmt));
|
||||
+ TREE_BLOCK (t) = TREE_BLOCK (stmt);
|
||||
tsi_link_before (tsi, t, TSI_SAME_STMT);
|
||||
}
|
||||
|
||||
@@ -696,6 +699,7 @@ lower_builtin_setjmp (tree_stmt_iterator
|
||||
t = implicit_built_in_decls[BUILT_IN_SETJMP_RECEIVER];
|
||||
t = build_call_expr (t, 1, arg);
|
||||
SET_EXPR_LOCUS (t, EXPR_LOCUS (stmt));
|
||||
+ TREE_BLOCK (t) = TREE_BLOCK (stmt);
|
||||
tsi_link_before (tsi, t, TSI_SAME_STMT);
|
||||
|
||||
/* Build 'DEST = 1' and insert. */
|
||||
@@ -704,6 +708,7 @@ lower_builtin_setjmp (tree_stmt_iterator
|
||||
t = build_gimple_modify_stmt (dest, fold_convert (TREE_TYPE (dest),
|
||||
integer_one_node));
|
||||
SET_EXPR_LOCUS (t, EXPR_LOCUS (stmt));
|
||||
+ TREE_BLOCK (t) = TREE_BLOCK (stmt);
|
||||
tsi_link_before (tsi, t, TSI_SAME_STMT);
|
||||
}
|
||||
|
||||
--- gcc/tree-cfg.c.jj 2008-10-07 21:39:14.000000000 +0200
|
||||
+++ gcc/tree-cfg.c 2008-10-09 00:00:48.000000000 +0200
|
||||
@@ -634,7 +634,8 @@ make_cond_expr_edges (basic_block bb)
|
||||
#else
|
||||
e->goto_locus = EXPR_LOCUS (COND_EXPR_THEN (entry));
|
||||
#endif
|
||||
- e->goto_block = TREE_BLOCK (COND_EXPR_THEN (entry));
|
||||
+ if (e->goto_locus)
|
||||
+ e->goto_block = TREE_BLOCK (COND_EXPR_THEN (entry));
|
||||
e = make_edge (bb, else_bb, EDGE_FALSE_VALUE);
|
||||
if (e)
|
||||
{
|
||||
@@ -643,7 +644,8 @@ make_cond_expr_edges (basic_block bb)
|
||||
#else
|
||||
e->goto_locus = EXPR_LOCUS (COND_EXPR_ELSE (entry));
|
||||
#endif
|
||||
- e->goto_block = TREE_BLOCK (COND_EXPR_ELSE (entry));
|
||||
+ if (e->goto_locus)
|
||||
+ e->goto_block = TREE_BLOCK (COND_EXPR_ELSE (entry));
|
||||
}
|
||||
|
||||
/* We do not need the gotos anymore. */
|
||||
@@ -843,7 +845,8 @@ make_goto_expr_edges (basic_block bb)
|
||||
#else
|
||||
e->goto_locus = EXPR_LOCUS (goto_t);
|
||||
#endif
|
||||
- e->goto_block = TREE_BLOCK (goto_t);
|
||||
+ if (e->goto_locus)
|
||||
+ e->goto_block = TREE_BLOCK (goto_t);
|
||||
bsi_remove (&last, true);
|
||||
return;
|
||||
}
|
@ -1,168 +0,0 @@
|
||||
2008-10-09 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* rtl.h (locator_eq): New decl.
|
||||
* cfglayout.c (locator_scope): New function.
|
||||
(insn_scope): Use it.
|
||||
(locator_eq): New function.
|
||||
(fixup_reorder_chain): Search for last insn in src bb
|
||||
that has locator set or first insn in dest bb. Use
|
||||
locator_eq instead of == to compare locators.
|
||||
* cfgrtl.c (cfg_layout_merge_blocks): Likewise.
|
||||
* cfgcleanup.c (try_forward_edges): Use locator_eq instead of
|
||||
== to compare locators.
|
||||
|
||||
--- gcc/cfglayout.c.jj 2008-10-07 21:35:33.000000000 +0200
|
||||
+++ gcc/cfglayout.c 2008-10-09 11:18:51.000000000 +0200
|
||||
@@ -448,13 +448,12 @@ change_scope (rtx orig_insn, tree s1, tr
|
||||
}
|
||||
}
|
||||
|
||||
-/* Return lexical scope block insn belong to. */
|
||||
+/* Return lexical scope block locator belongs to. */
|
||||
static tree
|
||||
-insn_scope (const_rtx insn)
|
||||
+locator_scope (int loc)
|
||||
{
|
||||
int max = VEC_length (int, block_locators_locs);
|
||||
int min = 0;
|
||||
- int loc = INSN_LOCATOR (insn);
|
||||
|
||||
/* When block_locators_locs was initialized, the pro- and epilogue
|
||||
insns didn't exist yet and can therefore not be found this way.
|
||||
@@ -488,6 +487,13 @@ insn_scope (const_rtx insn)
|
||||
return VEC_index (tree, block_locators_blocks, min);
|
||||
}
|
||||
|
||||
+/* Return lexical scope block insn belongs to. */
|
||||
+static tree
|
||||
+insn_scope (const_rtx insn)
|
||||
+{
|
||||
+ return locator_scope (INSN_LOCATOR (insn));
|
||||
+}
|
||||
+
|
||||
/* Return line number of the statement specified by the locator. */
|
||||
static location_t
|
||||
locator_location (int loc)
|
||||
@@ -551,6 +557,17 @@ insn_file (const_rtx insn)
|
||||
return locator_file (INSN_LOCATOR (insn));
|
||||
}
|
||||
|
||||
+/* Return true if LOC1 and LOC2 locators have the same location and scope. */
|
||||
+bool
|
||||
+locator_eq (int loc1, int loc2)
|
||||
+{
|
||||
+ if (loc1 == loc2)
|
||||
+ return true;
|
||||
+ if (locator_location (loc1) != locator_location (loc2))
|
||||
+ return false;
|
||||
+ return locator_scope (loc1) == locator_scope (loc2);
|
||||
+}
|
||||
+
|
||||
/* Rebuild all the NOTE_INSN_BLOCK_BEG and NOTE_INSN_BLOCK_END notes based
|
||||
on the scope tree and the newly reordered instructions. */
|
||||
|
||||
@@ -901,24 +918,30 @@ fixup_reorder_chain (void)
|
||||
if (e->goto_locus && !(e->flags & EDGE_ABNORMAL))
|
||||
{
|
||||
basic_block nb;
|
||||
+ rtx end;
|
||||
|
||||
- if (simplejump_p (BB_END (e->src)))
|
||||
+ insn = BB_END (e->src);
|
||||
+ end = PREV_INSN (BB_HEAD (e->src));
|
||||
+ while (insn != end
|
||||
+ && (!INSN_P (insn) || INSN_LOCATOR (insn) == 0))
|
||||
+ insn = PREV_INSN (insn);
|
||||
+ if (insn != end
|
||||
+ && locator_eq (INSN_LOCATOR (insn), (int) e->goto_locus))
|
||||
+ continue;
|
||||
+ if (simplejump_p (BB_END (e->src))
|
||||
+ && INSN_LOCATOR (BB_END (e->src)) == 0)
|
||||
{
|
||||
- if (INSN_LOCATOR (BB_END (e->src)) == (int) e->goto_locus)
|
||||
- continue;
|
||||
- if (INSN_LOCATOR (BB_END (e->src)) == 0)
|
||||
- {
|
||||
- INSN_LOCATOR (BB_END (e->src)) = e->goto_locus;
|
||||
- continue;
|
||||
- }
|
||||
+ INSN_LOCATOR (BB_END (e->src)) = e->goto_locus;
|
||||
+ continue;
|
||||
}
|
||||
if (e->dest != EXIT_BLOCK_PTR)
|
||||
{
|
||||
insn = BB_HEAD (e->dest);
|
||||
- if (!INSN_P (insn))
|
||||
- insn = next_insn (insn);
|
||||
- if (insn && INSN_P (insn)
|
||||
- && INSN_LOCATOR (insn) == (int) e->goto_locus)
|
||||
+ end = NEXT_INSN (BB_END (e->dest));
|
||||
+ while (insn != end && !INSN_P (insn))
|
||||
+ insn = NEXT_INSN (insn);
|
||||
+ if (insn != end && INSN_LOCATOR (insn)
|
||||
+ && locator_eq (INSN_LOCATOR (insn), (int) e->goto_locus))
|
||||
continue;
|
||||
}
|
||||
nb = split_edge (e);
|
||||
--- gcc/rtl.h.jj 2008-10-07 21:25:44.000000000 +0200
|
||||
+++ gcc/rtl.h 2008-10-09 11:15:57.000000000 +0200
|
||||
@@ -1622,6 +1622,7 @@ extern int insn_line (const_rtx);
|
||||
extern const char * insn_file (const_rtx);
|
||||
extern int locator_line (int);
|
||||
extern const char * locator_file (int);
|
||||
+extern bool locator_eq (int, int);
|
||||
extern int prologue_locator, epilogue_locator;
|
||||
|
||||
/* In jump.c */
|
||||
--- gcc/cfgrtl.c.jj 2008-10-07 21:35:33.000000000 +0200
|
||||
+++ gcc/cfgrtl.c 2008-10-09 10:37:03.000000000 +0200
|
||||
@@ -2623,19 +2623,21 @@ cfg_layout_merge_blocks (basic_block a,
|
||||
some unique locus, emit a nop with that locus in between. */
|
||||
if (!optimize && EDGE_SUCC (a, 0)->goto_locus)
|
||||
{
|
||||
- rtx insn = BB_END (a);
|
||||
+ rtx insn = BB_END (a), end = PREV_INSN (BB_HEAD (a));
|
||||
int goto_locus = EDGE_SUCC (a, 0)->goto_locus;
|
||||
|
||||
- if (NOTE_P (insn))
|
||||
- insn = prev_nonnote_insn (insn);
|
||||
- if (insn && INSN_P (insn) && INSN_LOCATOR (insn) == goto_locus)
|
||||
+ while (insn != end && (!INSN_P (insn) || INSN_LOCATOR (insn) == 0))
|
||||
+ insn = PREV_INSN (insn);
|
||||
+ if (insn != end && locator_eq (INSN_LOCATOR (insn), goto_locus))
|
||||
goto_locus = 0;
|
||||
else
|
||||
{
|
||||
insn = BB_HEAD (b);
|
||||
- if (!INSN_P (insn))
|
||||
- insn = next_insn (insn);
|
||||
- if (insn && INSN_P (insn) && INSN_LOCATOR (insn) == goto_locus)
|
||||
+ end = NEXT_INSN (BB_END (b));
|
||||
+ while (insn != end && !INSN_P (insn))
|
||||
+ insn = NEXT_INSN (insn);
|
||||
+ if (insn != end && INSN_LOCATOR (insn) != 0
|
||||
+ && locator_eq (INSN_LOCATOR (insn), goto_locus))
|
||||
goto_locus = 0;
|
||||
}
|
||||
if (goto_locus)
|
||||
--- gcc/cfgcleanup.c.jj 2008-10-07 21:35:33.000000000 +0200
|
||||
+++ gcc/cfgcleanup.c 2008-10-09 11:07:40.000000000 +0200
|
||||
@@ -482,7 +482,7 @@ try_forward_edges (int mode, basic_block
|
||||
blocks with different locus are not optimized out. */
|
||||
int locus = single_succ_edge (target)->goto_locus;
|
||||
|
||||
- if (locus && goto_locus && locus != goto_locus)
|
||||
+ if (locus && goto_locus && !locator_eq (locus, goto_locus))
|
||||
counter = n_basic_blocks;
|
||||
else if (locus)
|
||||
goto_locus = locus;
|
||||
@@ -491,7 +491,8 @@ try_forward_edges (int mode, basic_block
|
||||
{
|
||||
locus = INSN_LOCATOR (BB_END (target));
|
||||
|
||||
- if (locus && goto_locus && locus != goto_locus)
|
||||
+ if (locus && goto_locus
|
||||
+ && !locator_eq (locus, goto_locus))
|
||||
counter = n_basic_blocks;
|
||||
else if (locus)
|
||||
goto_locus = locus;
|
@ -1,899 +0,0 @@
|
||||
2008-10-08 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* cfgexpand.c (expand_gimple_cond_expr): Convert also goto_block and
|
||||
goto_locus of true_edge into RTL locator.
|
||||
|
||||
2008-10-07 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/29609
|
||||
PR debug/36690
|
||||
PR debug/37616
|
||||
* basic-block.h (struct edge_def): Add goto_block field.
|
||||
* cfglayout.c (fixup_reorder_chain): Ensure that there is at least
|
||||
one insn with locus corresponding to edge's goto_locus if !optimize.
|
||||
* profile.c (branch_prob): Copy edge's goto_block.
|
||||
* cfgrtl.c (force_nonfallthru_and_redirect): Use goto_locus for
|
||||
emitted jumps.
|
||||
(cfg_layout_merge_blocks): Emit a nop with edge's goto_locus
|
||||
locator in between the merged basic blocks if !optimize and needed.
|
||||
* cfgexpand.c (expand_gimple_cond_expr): Convert goto_block and
|
||||
goto_locus into RTL locator. For unconditional jump use that
|
||||
locator for the jump insn.
|
||||
(expand_gimple_basic_block): Convert goto_block and goto_locus into
|
||||
RTL locator for all remaining edges. For unconditional jump
|
||||
use that locator for the jump insn.
|
||||
* cfgcleanup.c (try_forward_edges): Avoid the optimization if
|
||||
there is more than one edge or insn locator along the forwarding
|
||||
edges and !optimize. If there is just one, set e->goto_locus.
|
||||
* tree-cfg.c (make_cond_expr_edges, make_goto_expr_edges): Set also
|
||||
edge's goto_block.
|
||||
(move_block_to_fn): Adjust edge's goto_block.
|
||||
|
||||
* gcc.dg/debug/pr29609-1.c: New test.
|
||||
* gcc.dg/debug/pr29609-2.c: New test.
|
||||
* gcc.dg/debug/pr36690-1.c: New test.
|
||||
* gcc.dg/debug/pr36690-2.c: New test.
|
||||
* gcc.dg/debug/pr36690-3.c: New test.
|
||||
* gcc.dg/debug/pr37616.c: New test.
|
||||
* gcc.dg/debug/dwarf2/pr29609-1.c: New test.
|
||||
* gcc.dg/debug/dwarf2/pr29609-2.c: New test.
|
||||
* gcc.dg/debug/dwarf2/pr36690-1.c: New test.
|
||||
* gcc.dg/debug/dwarf2/pr36690-2.c: New test.
|
||||
* gcc.dg/debug/dwarf2/pr36690-3.c: New test.
|
||||
* gcc.dg/debug/dwarf2/pr37616.c: New test.
|
||||
|
||||
--- gcc/profile.c (revision 140947)
|
||||
+++ gcc/profile.c (revision 140948)
|
||||
@@ -825,7 +825,9 @@ branch_prob (void)
|
||||
#endif
|
||||
{
|
||||
basic_block new = split_edge (e);
|
||||
- single_succ_edge (new)->goto_locus = e->goto_locus;
|
||||
+ edge ne = single_succ_edge (new);
|
||||
+ ne->goto_locus = e->goto_locus;
|
||||
+ ne->goto_block = e->goto_block;
|
||||
}
|
||||
if ((e->flags & (EDGE_ABNORMAL | EDGE_ABNORMAL_CALL))
|
||||
&& e->dest != EXIT_BLOCK_PTR)
|
||||
--- gcc/cfgexpand.c (revision 140947)
|
||||
+++ gcc/cfgexpand.c (revision 140948)
|
||||
@@ -1316,7 +1316,12 @@ expand_gimple_cond_expr (basic_block bb,
|
||||
add_reg_br_prob_note (last, true_edge->probability);
|
||||
maybe_dump_rtl_for_tree_stmt (stmt, last);
|
||||
if (true_edge->goto_locus)
|
||||
- set_curr_insn_source_location (location_from_locus (true_edge->goto_locus));
|
||||
+ {
|
||||
+ set_curr_insn_source_location (location_from_locus (true_edge->goto_locus));
|
||||
+ set_curr_insn_block (true_edge->goto_block);
|
||||
+ true_edge->goto_locus = curr_insn_locator ();
|
||||
+ }
|
||||
+ true_edge->goto_block = NULL;
|
||||
false_edge->flags |= EDGE_FALLTHRU;
|
||||
return NULL;
|
||||
}
|
||||
@@ -1326,7 +1331,12 @@ expand_gimple_cond_expr (basic_block bb,
|
||||
add_reg_br_prob_note (last, false_edge->probability);
|
||||
maybe_dump_rtl_for_tree_stmt (stmt, last);
|
||||
if (false_edge->goto_locus)
|
||||
- set_curr_insn_source_location (location_from_locus (false_edge->goto_locus));
|
||||
+ {
|
||||
+ set_curr_insn_source_location (location_from_locus (false_edge->goto_locus));
|
||||
+ set_curr_insn_block (false_edge->goto_block);
|
||||
+ false_edge->goto_locus = curr_insn_locator ();
|
||||
+ }
|
||||
+ false_edge->goto_block = NULL;
|
||||
true_edge->flags |= EDGE_FALLTHRU;
|
||||
return NULL;
|
||||
}
|
||||
@@ -1334,6 +1344,13 @@ expand_gimple_cond_expr (basic_block bb,
|
||||
jumpif (pred, label_rtx_for_bb (true_edge->dest));
|
||||
add_reg_br_prob_note (last, true_edge->probability);
|
||||
last = get_last_insn ();
|
||||
+ if (false_edge->goto_locus)
|
||||
+ {
|
||||
+ set_curr_insn_source_location (location_from_locus (false_edge->goto_locus));
|
||||
+ set_curr_insn_block (false_edge->goto_block);
|
||||
+ false_edge->goto_locus = curr_insn_locator ();
|
||||
+ }
|
||||
+ false_edge->goto_block = NULL;
|
||||
emit_jump (label_rtx_for_bb (false_edge->dest));
|
||||
|
||||
BB_END (bb) = last;
|
||||
@@ -1356,9 +1373,13 @@ expand_gimple_cond_expr (basic_block bb,
|
||||
|
||||
maybe_dump_rtl_for_tree_stmt (stmt, last2);
|
||||
|
||||
- if (false_edge->goto_locus)
|
||||
- set_curr_insn_source_location (location_from_locus (false_edge->goto_locus));
|
||||
-
|
||||
+ if (true_edge->goto_locus)
|
||||
+ {
|
||||
+ set_curr_insn_source_location (location_from_locus (true_edge->goto_locus));
|
||||
+ set_curr_insn_block (true_edge->goto_block);
|
||||
+ true_edge->goto_locus = curr_insn_locator ();
|
||||
+ }
|
||||
+ true_edge->goto_block = NULL;
|
||||
return new_bb;
|
||||
}
|
||||
|
||||
@@ -1613,19 +1634,21 @@ expand_gimple_basic_block (basic_block b
|
||||
}
|
||||
}
|
||||
|
||||
- /* Expand implicit goto. */
|
||||
+ /* Expand implicit goto and convert goto_locus. */
|
||||
FOR_EACH_EDGE (e, ei, bb->succs)
|
||||
{
|
||||
- if (e->flags & EDGE_FALLTHRU)
|
||||
- break;
|
||||
- }
|
||||
-
|
||||
- if (e && e->dest != bb->next_bb)
|
||||
- {
|
||||
- emit_jump (label_rtx_for_bb (e->dest));
|
||||
- if (e->goto_locus)
|
||||
- set_curr_insn_source_location (location_from_locus (e->goto_locus));
|
||||
- e->flags &= ~EDGE_FALLTHRU;
|
||||
+ if (e->goto_locus && e->goto_block)
|
||||
+ {
|
||||
+ set_curr_insn_source_location (location_from_locus (e->goto_locus));
|
||||
+ set_curr_insn_block (e->goto_block);
|
||||
+ e->goto_locus = curr_insn_locator ();
|
||||
+ }
|
||||
+ e->goto_block = NULL;
|
||||
+ if ((e->flags & EDGE_FALLTHRU) && e->dest != bb->next_bb)
|
||||
+ {
|
||||
+ emit_jump (label_rtx_for_bb (e->dest));
|
||||
+ e->flags &= ~EDGE_FALLTHRU;
|
||||
+ }
|
||||
}
|
||||
|
||||
do_pending_stack_adjust ();
|
||||
--- gcc/cfgcleanup.c (revision 140947)
|
||||
+++ gcc/cfgcleanup.c (revision 140948)
|
||||
@@ -429,7 +429,7 @@ try_forward_edges (int mode, basic_block
|
||||
for (ei = ei_start (b->succs); (e = ei_safe_edge (ei)); )
|
||||
{
|
||||
basic_block target, first;
|
||||
- int counter;
|
||||
+ int counter, goto_locus;
|
||||
bool threaded = false;
|
||||
int nthreaded_edges = 0;
|
||||
bool may_thread = first_pass | df_get_bb_dirty (b);
|
||||
@@ -447,6 +447,7 @@ try_forward_edges (int mode, basic_block
|
||||
|
||||
target = first = e->dest;
|
||||
counter = NUM_FIXED_BLOCKS;
|
||||
+ goto_locus = e->goto_locus;
|
||||
|
||||
/* If we are partitioning hot/cold basic_blocks, we don't want to mess
|
||||
up jumps that cross between hot/cold sections.
|
||||
@@ -476,6 +477,27 @@ try_forward_edges (int mode, basic_block
|
||||
new_target = single_succ (target);
|
||||
if (target == new_target)
|
||||
counter = n_basic_blocks;
|
||||
+ else if (!optimize)
|
||||
+ {
|
||||
+ /* When not optimizing, ensure that edges or forwarder
|
||||
+ blocks with different locus are not optimized out. */
|
||||
+ int locus = single_succ_edge (target)->goto_locus;
|
||||
+
|
||||
+ if (locus && goto_locus && locus != goto_locus)
|
||||
+ counter = n_basic_blocks;
|
||||
+ else if (locus)
|
||||
+ goto_locus = locus;
|
||||
+
|
||||
+ if (INSN_P (BB_END (target)))
|
||||
+ {
|
||||
+ locus = INSN_LOCATOR (BB_END (target));
|
||||
+
|
||||
+ if (locus && goto_locus && locus != goto_locus)
|
||||
+ counter = n_basic_blocks;
|
||||
+ else if (locus)
|
||||
+ goto_locus = locus;
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
|
||||
/* Allow to thread only over one edge at time to simplify updating
|
||||
@@ -539,6 +561,8 @@ try_forward_edges (int mode, basic_block
|
||||
int edge_frequency;
|
||||
int n = 0;
|
||||
|
||||
+ e->goto_locus = goto_locus;
|
||||
+
|
||||
/* Don't force if target is exit block. */
|
||||
if (threaded && target != EXIT_BLOCK_PTR)
|
||||
{
|
||||
--- gcc/cfglayout.c (revision 140947)
|
||||
+++ gcc/cfglayout.c (revision 140948)
|
||||
@@ -887,6 +887,46 @@ fixup_reorder_chain (void)
|
||||
if (e && !can_fallthru (e->src, e->dest))
|
||||
force_nonfallthru (e);
|
||||
}
|
||||
+
|
||||
+ /* Ensure goto_locus from edges has some instructions with that locus
|
||||
+ in RTL. */
|
||||
+ if (!optimize)
|
||||
+ FOR_EACH_BB (bb)
|
||||
+ {
|
||||
+ edge e;
|
||||
+ edge_iterator ei;
|
||||
+
|
||||
+ FOR_EACH_EDGE (e, ei, bb->succs)
|
||||
+ if (e->goto_locus && !(e->flags & EDGE_ABNORMAL))
|
||||
+ {
|
||||
+ basic_block nb;
|
||||
+
|
||||
+ if (simplejump_p (BB_END (e->src)))
|
||||
+ {
|
||||
+ if (INSN_LOCATOR (BB_END (e->src)) == (int) e->goto_locus)
|
||||
+ continue;
|
||||
+ if (INSN_LOCATOR (BB_END (e->src)) == 0)
|
||||
+ {
|
||||
+ INSN_LOCATOR (BB_END (e->src)) = e->goto_locus;
|
||||
+ continue;
|
||||
+ }
|
||||
+ }
|
||||
+ if (e->dest != EXIT_BLOCK_PTR)
|
||||
+ {
|
||||
+ insn = BB_HEAD (e->dest);
|
||||
+ if (!INSN_P (insn))
|
||||
+ insn = next_insn (insn);
|
||||
+ if (insn && INSN_P (insn)
|
||||
+ && INSN_LOCATOR (insn) == (int) e->goto_locus)
|
||||
+ continue;
|
||||
+ }
|
||||
+ nb = split_edge (e);
|
||||
+ if (!INSN_P (BB_END (nb)))
|
||||
+ BB_END (nb) = emit_insn_after_noloc (gen_nop (), BB_END (nb),
|
||||
+ nb);
|
||||
+ INSN_LOCATOR (BB_END (nb)) = e->goto_locus;
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
|
||||
/* Perform sanity checks on the insn chain.
|
||||
--- gcc/basic-block.h (revision 140947)
|
||||
+++ gcc/basic-block.h (revision 140948)
|
||||
@@ -129,7 +129,8 @@ struct edge_def GTY(())
|
||||
/* Auxiliary info specific to a pass. */
|
||||
PTR GTY ((skip (""))) aux;
|
||||
|
||||
- /* Location of any goto implicit in the edge, during tree-ssa. */
|
||||
+ /* Location of any goto implicit in the edge and associated BLOCK. */
|
||||
+ tree goto_block;
|
||||
source_locus goto_locus;
|
||||
|
||||
/* The index number corresponding to this edge in the edge vector
|
||||
--- gcc/tree-cfg.c (revision 140947)
|
||||
+++ gcc/tree-cfg.c (revision 140948)
|
||||
@@ -634,6 +634,7 @@ make_cond_expr_edges (basic_block bb)
|
||||
#else
|
||||
e->goto_locus = EXPR_LOCUS (COND_EXPR_THEN (entry));
|
||||
#endif
|
||||
+ e->goto_block = TREE_BLOCK (COND_EXPR_THEN (entry));
|
||||
e = make_edge (bb, else_bb, EDGE_FALSE_VALUE);
|
||||
if (e)
|
||||
{
|
||||
@@ -642,6 +643,7 @@ make_cond_expr_edges (basic_block bb)
|
||||
#else
|
||||
e->goto_locus = EXPR_LOCUS (COND_EXPR_ELSE (entry));
|
||||
#endif
|
||||
+ e->goto_block = TREE_BLOCK (COND_EXPR_ELSE (entry));
|
||||
}
|
||||
|
||||
/* We do not need the gotos anymore. */
|
||||
@@ -841,6 +843,7 @@ make_goto_expr_edges (basic_block bb)
|
||||
#else
|
||||
e->goto_locus = EXPR_LOCUS (goto_t);
|
||||
#endif
|
||||
+ e->goto_block = TREE_BLOCK (goto_t);
|
||||
bsi_remove (&last, true);
|
||||
return;
|
||||
}
|
||||
@@ -5874,6 +5877,23 @@ move_block_to_fn (struct function *dest_
|
||||
update_stmt (stmt);
|
||||
pop_cfun ();
|
||||
}
|
||||
+
|
||||
+ FOR_EACH_EDGE (e, ei, bb->succs)
|
||||
+ if (e->goto_locus)
|
||||
+ {
|
||||
+ tree block = e->goto_block;
|
||||
+ if (d->orig_block == NULL_TREE
|
||||
+ || block == d->orig_block)
|
||||
+ e->goto_block = d->new_block;
|
||||
+#ifdef ENABLE_CHECKING
|
||||
+ else if (block != d->new_block)
|
||||
+ {
|
||||
+ while (block && block != d->orig_block)
|
||||
+ block = BLOCK_SUPERCONTEXT (block);
|
||||
+ gcc_assert (block);
|
||||
+ }
|
||||
+#endif
|
||||
+ }
|
||||
}
|
||||
|
||||
/* Examine the statements in BB (which is in SRC_CFUN); find and return
|
||||
--- gcc/cfgrtl.c (revision 140947)
|
||||
+++ gcc/cfgrtl.c (revision 140948)
|
||||
@@ -1009,6 +1009,7 @@ force_nonfallthru_and_redirect (edge e,
|
||||
rtx note;
|
||||
edge new_edge;
|
||||
int abnormal_edge_flags = 0;
|
||||
+ int loc;
|
||||
|
||||
/* In the case the last instruction is conditional jump to the next
|
||||
instruction, first redirect the jump itself and then continue
|
||||
@@ -1127,11 +1128,15 @@ force_nonfallthru_and_redirect (edge e,
|
||||
else
|
||||
jump_block = e->src;
|
||||
|
||||
+ if (e->goto_locus && e->goto_block == NULL)
|
||||
+ loc = e->goto_locus;
|
||||
+ else
|
||||
+ loc = 0;
|
||||
e->flags &= ~EDGE_FALLTHRU;
|
||||
if (target == EXIT_BLOCK_PTR)
|
||||
{
|
||||
#ifdef HAVE_return
|
||||
- emit_jump_insn_after_noloc (gen_return (), BB_END (jump_block));
|
||||
+ emit_jump_insn_after_setloc (gen_return (), BB_END (jump_block), loc);
|
||||
#else
|
||||
gcc_unreachable ();
|
||||
#endif
|
||||
@@ -1139,7 +1144,7 @@ force_nonfallthru_and_redirect (edge e,
|
||||
else
|
||||
{
|
||||
rtx label = block_label (target);
|
||||
- emit_jump_insn_after_noloc (gen_jump (label), BB_END (jump_block));
|
||||
+ emit_jump_insn_after_setloc (gen_jump (label), BB_END (jump_block), loc);
|
||||
JUMP_LABEL (BB_END (jump_block)) = label;
|
||||
LABEL_NUSES (label)++;
|
||||
}
|
||||
@@ -2606,6 +2611,32 @@ cfg_layout_merge_blocks (basic_block a,
|
||||
try_redirect_by_replacing_jump (EDGE_SUCC (a, 0), b, true);
|
||||
gcc_assert (!JUMP_P (BB_END (a)));
|
||||
|
||||
+ /* When not optimizing and the edge is the only place in RTL which holds
|
||||
+ some unique locus, emit a nop with that locus in between. */
|
||||
+ if (!optimize && EDGE_SUCC (a, 0)->goto_locus)
|
||||
+ {
|
||||
+ rtx insn = BB_END (a);
|
||||
+ int goto_locus = EDGE_SUCC (a, 0)->goto_locus;
|
||||
+
|
||||
+ if (NOTE_P (insn))
|
||||
+ insn = prev_nonnote_insn (insn);
|
||||
+ if (insn && INSN_P (insn) && INSN_LOCATOR (insn) == goto_locus)
|
||||
+ goto_locus = 0;
|
||||
+ else
|
||||
+ {
|
||||
+ insn = BB_HEAD (b);
|
||||
+ if (!INSN_P (insn))
|
||||
+ insn = next_insn (insn);
|
||||
+ if (insn && INSN_P (insn) && INSN_LOCATOR (insn) == goto_locus)
|
||||
+ goto_locus = 0;
|
||||
+ }
|
||||
+ if (goto_locus)
|
||||
+ {
|
||||
+ BB_END (a) = emit_insn_after_noloc (gen_nop (), BB_END (a), a);
|
||||
+ INSN_LOCATOR (BB_END (a)) = goto_locus;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
/* Possible line number notes should appear in between. */
|
||||
if (b->il.rtl->header)
|
||||
{
|
||||
--- gcc/testsuite/gcc.dg/debug/pr36690-1.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/debug/pr36690-1.c (revision 140948)
|
||||
@@ -0,0 +1,23 @@
|
||||
+/* PR debug/36690 */
|
||||
+/* Verify that break func is hit.
|
||||
+ This version of the test just checks that it can be compiled, linked
|
||||
+ and executed, further testing is done in corresponding gcc.dg/dwarf2/
|
||||
+ test and hopefully in gdb testsuite. */
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-options "-O0 -g -dA" } */
|
||||
+
|
||||
+int i;
|
||||
+
|
||||
+void
|
||||
+func (void)
|
||||
+{
|
||||
+ while (i == 1)
|
||||
+ i = 0;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ func ();
|
||||
+ return 0;
|
||||
+}
|
||||
--- gcc/testsuite/gcc.dg/debug/pr36690-2.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/debug/pr36690-2.c (revision 140948)
|
||||
@@ -0,0 +1,40 @@
|
||||
+/* PR debug/36690 */
|
||||
+/* Verify that breakpoint can be put on goto f1, it is hit and
|
||||
+ varz at that spot is defined and contains 5. Nowhere else
|
||||
+ in the function should be varz in the scope.
|
||||
+ This version of the test just checks that it can be compiled, linked
|
||||
+ and executed, further testing is done in corresponding gcc.dg/dwarf2/
|
||||
+ test and hopefully in gdb testsuite. */
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-options "-O0 -g -dA" } */
|
||||
+
|
||||
+int cnt;
|
||||
+
|
||||
+void
|
||||
+bar (int i)
|
||||
+{
|
||||
+ cnt += i;
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+foo (int i)
|
||||
+{
|
||||
+ if (!i)
|
||||
+ bar (0);
|
||||
+ else
|
||||
+ {
|
||||
+ static int varz = 5;
|
||||
+ goto f1;
|
||||
+ }
|
||||
+ bar (1);
|
||||
+f1:
|
||||
+ bar (2);
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ foo (0);
|
||||
+ foo (1);
|
||||
+ return 0;
|
||||
+}
|
||||
--- gcc/testsuite/gcc.dg/debug/pr29609-1.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/debug/pr29609-1.c (revision 140948)
|
||||
@@ -0,0 +1,33 @@
|
||||
+/* PR debug/29609 */
|
||||
+/* Verify that breakpoint on the break is hit.
|
||||
+ This version of the test just checks that it can be compiled, linked
|
||||
+ and executed, further testing is done in corresponding gcc.dg/dwarf2/
|
||||
+ test and hopefully in gdb testsuite. */
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-options "-O0 -g -dA" } */
|
||||
+
|
||||
+extern void abort (void);
|
||||
+
|
||||
+int
|
||||
+foo (void)
|
||||
+{
|
||||
+ int a, i;
|
||||
+
|
||||
+ for (i = 1; i <= 10; i++)
|
||||
+ {
|
||||
+ if (i < 3)
|
||||
+ a = 1;
|
||||
+ else
|
||||
+ break;
|
||||
+ a = 5;
|
||||
+ }
|
||||
+ return a;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ if (foo () != 5)
|
||||
+ abort ();
|
||||
+ return 0;
|
||||
+}
|
||||
--- gcc/testsuite/gcc.dg/debug/pr36690-3.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/debug/pr36690-3.c (revision 140948)
|
||||
@@ -0,0 +1,47 @@
|
||||
+/* PR debug/36690 */
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-options "-O0 -g -dA" } */
|
||||
+
|
||||
+int cnt;
|
||||
+
|
||||
+void
|
||||
+bar (int i)
|
||||
+{
|
||||
+ cnt += i;
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+foo (int i, int j)
|
||||
+{
|
||||
+ if (j)
|
||||
+ {
|
||||
+ bar (i + 1);
|
||||
+ goto f1;
|
||||
+ }
|
||||
+ bar (i + 2);
|
||||
+ goto f2;
|
||||
+f1:
|
||||
+ if (i > 10)
|
||||
+ goto f3;
|
||||
+f2:
|
||||
+ if (i > 40)
|
||||
+ goto f4;
|
||||
+ else
|
||||
+ goto f5;
|
||||
+f3:
|
||||
+ bar (i);
|
||||
+f4:
|
||||
+ bar (i);
|
||||
+f5:
|
||||
+ bar (i);
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ foo (0, 1);
|
||||
+ foo (11, 1);
|
||||
+ foo (21, 0);
|
||||
+ foo (41, 0);
|
||||
+ return 0;
|
||||
+}
|
||||
--- gcc/testsuite/gcc.dg/debug/pr29609-2.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/debug/pr29609-2.c (revision 140948)
|
||||
@@ -0,0 +1,53 @@
|
||||
+/* PR debug/29609 */
|
||||
+/* Verify that breakpoint on both goto failure; stmts is hit.
|
||||
+ This version of the test just checks that it can be compiled, linked
|
||||
+ and executed, further testing is done in corresponding gcc.dg/dwarf2/
|
||||
+ test and hopefully in gdb testsuite. */
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-options "-O0 -g -dA" } */
|
||||
+
|
||||
+extern void abort (void);
|
||||
+int x;
|
||||
+
|
||||
+int
|
||||
+foo (void)
|
||||
+{
|
||||
+ return 0 ^ x;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+bar (void)
|
||||
+{
|
||||
+ return 1 ^ x;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+baz (void)
|
||||
+{
|
||||
+ int c;
|
||||
+
|
||||
+ if (!foo ())
|
||||
+ goto failure;
|
||||
+
|
||||
+ if (!bar ())
|
||||
+ goto failure;
|
||||
+
|
||||
+ return 0;
|
||||
+
|
||||
+failure:
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ if (baz () != 1)
|
||||
+ abort ();
|
||||
+ x = 1;
|
||||
+ if (baz () != 1)
|
||||
+ abort ();
|
||||
+ x = 2;
|
||||
+ if (baz () != 0)
|
||||
+ abort ();
|
||||
+ return 0;
|
||||
+}
|
||||
--- gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-1.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-1.c (revision 140948)
|
||||
@@ -0,0 +1,22 @@
|
||||
+/* PR debug/36690 */
|
||||
+/* Verify that break func is hit. */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O0 -gdwarf-2 -dA" } */
|
||||
+
|
||||
+int i;
|
||||
+
|
||||
+void
|
||||
+func (void)
|
||||
+{
|
||||
+ while (i == 1)
|
||||
+ i = 0;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ func ();
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/* { dg-final { scan-assembler "pr36690-1.c:11" } } */
|
||||
--- gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-2.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-2.c (revision 140948)
|
||||
@@ -0,0 +1,39 @@
|
||||
+/* PR debug/36690 */
|
||||
+/* Verify that breakpoint can be put on goto f1, it is hit and
|
||||
+ varz at that spot is defined and contains 5. Nowhere else
|
||||
+ in the function should be varz in the scope. */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O0 -gdwarf-2 -dA" } */
|
||||
+
|
||||
+int cnt;
|
||||
+
|
||||
+void
|
||||
+bar (int i)
|
||||
+{
|
||||
+ cnt += i;
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+foo (int i)
|
||||
+{
|
||||
+ if (!i)
|
||||
+ bar (0);
|
||||
+ else
|
||||
+ {
|
||||
+ static int varz = 5;
|
||||
+ goto f1;
|
||||
+ }
|
||||
+ bar (1);
|
||||
+f1:
|
||||
+ bar (2);
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ foo (0);
|
||||
+ foo (1);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/* { dg-final { scan-assembler "pr36690-2.c:24" } } */
|
||||
--- gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-1.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-1.c (revision 140948)
|
||||
@@ -0,0 +1,32 @@
|
||||
+/* PR debug/29609 */
|
||||
+/* Verify that breakpoint on the break is hit. */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O0 -gdwarf-2 -dA" } */
|
||||
+
|
||||
+void abort (void);
|
||||
+
|
||||
+int
|
||||
+foo (void)
|
||||
+{
|
||||
+ int a, i;
|
||||
+
|
||||
+ for (i = 1; i <= 10; i++)
|
||||
+ {
|
||||
+ if (i < 3)
|
||||
+ a = 1;
|
||||
+ else
|
||||
+ break;
|
||||
+ a = 5;
|
||||
+ }
|
||||
+ return a;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ if (foo () != 5)
|
||||
+ abort ();
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/* { dg-final { scan-assembler "pr29609-1.c:18" } } */
|
||||
--- gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-3.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/debug/dwarf2/pr36690-3.c (revision 140948)
|
||||
@@ -0,0 +1,53 @@
|
||||
+/* PR debug/36690 */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O0 -gdwarf-2 -dA" } */
|
||||
+
|
||||
+int cnt;
|
||||
+
|
||||
+void
|
||||
+bar (int i)
|
||||
+{
|
||||
+ cnt += i;
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+foo (int i, int j)
|
||||
+{
|
||||
+ if (j)
|
||||
+ {
|
||||
+ bar (i + 1);
|
||||
+ goto f1;
|
||||
+ }
|
||||
+ bar (i + 2);
|
||||
+ goto f2;
|
||||
+f1:
|
||||
+ if (i > 10)
|
||||
+ goto f3;
|
||||
+f2:
|
||||
+ if (i > 40)
|
||||
+ goto f4;
|
||||
+ else
|
||||
+ goto f5;
|
||||
+f3:
|
||||
+ bar (i);
|
||||
+f4:
|
||||
+ bar (i);
|
||||
+f5:
|
||||
+ bar (i);
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ foo (0, 1);
|
||||
+ foo (11, 1);
|
||||
+ foo (21, 0);
|
||||
+ foo (41, 0);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/* { dg-final { scan-assembler "pr36690-3.c:19" } } */
|
||||
+/* { dg-final { scan-assembler "pr36690-3.c:22" } } */
|
||||
+/* { dg-final { scan-assembler "pr36690-3.c:25" } } */
|
||||
+/* { dg-final { scan-assembler "pr36690-3.c:28" } } */
|
||||
+/* { dg-final { scan-assembler "pr36690-3.c:30" } } */
|
||||
--- gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-2.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-2.c (revision 140948)
|
||||
@@ -0,0 +1,53 @@
|
||||
+/* PR debug/29609 */
|
||||
+/* Verify that breakpoint on both goto failure; stmts is hit. */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O0 -gdwarf-2 -dA" } */
|
||||
+
|
||||
+extern void abort (void);
|
||||
+int x;
|
||||
+
|
||||
+int
|
||||
+foo (void)
|
||||
+{
|
||||
+ return 0 ^ x;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+bar (void)
|
||||
+{
|
||||
+ return 1 ^ x;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+baz (void)
|
||||
+{
|
||||
+ int c;
|
||||
+
|
||||
+ if (!foo ())
|
||||
+ goto failure;
|
||||
+
|
||||
+ if (!bar ())
|
||||
+ goto failure;
|
||||
+
|
||||
+ return 0;
|
||||
+
|
||||
+failure:
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ if (baz () != 1)
|
||||
+ abort ();
|
||||
+ x = 1;
|
||||
+ if (baz () != 1)
|
||||
+ abort ();
|
||||
+ x = 2;
|
||||
+ if (baz () != 0)
|
||||
+ abort ();
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/* { dg-final { scan-assembler "pr29609-2.c:27" } } */
|
||||
+/* { dg-final { scan-assembler "pr29609-2.c:30" } } */
|
||||
--- gcc/testsuite/gcc.dg/debug/dwarf2/pr37616.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/debug/dwarf2/pr37616.c (revision 140948)
|
||||
@@ -0,0 +1,41 @@
|
||||
+/* PR debug/37616 */
|
||||
+/* Test that one can put breakpoints onto continue, exitlab and break
|
||||
+ and actually see program reaching those breakpoints. */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O0 -gdwarf-2 -dA" } */
|
||||
+
|
||||
+extern void abort (void);
|
||||
+
|
||||
+int
|
||||
+foo (int parm)
|
||||
+{
|
||||
+ int varj, varm;
|
||||
+
|
||||
+ for (varj = 0; varj < 10; varj++)
|
||||
+ {
|
||||
+ if (varj == 5)
|
||||
+ continue;
|
||||
+ if (varj == 7 && !parm)
|
||||
+ goto exitlab;
|
||||
+ if (varj == 9)
|
||||
+ break;
|
||||
+ varm = varj;
|
||||
+ }
|
||||
+
|
||||
+exitlab:
|
||||
+ return varm;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ if (foo (0) != 6)
|
||||
+ abort ();
|
||||
+ if (foo (1) != 8)
|
||||
+ abort ();
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/* { dg-final { scan-assembler "pr37616.c:17" } } */
|
||||
+/* { dg-final { scan-assembler "pr37616.c:19" } } */
|
||||
+/* { dg-final { scan-assembler "pr37616.c:21" } } */
|
||||
--- gcc/testsuite/gcc.dg/debug/pr37616.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/debug/pr37616.c (revision 140948)
|
||||
@@ -0,0 +1,40 @@
|
||||
+/* PR debug/37616 */
|
||||
+/* Test that one can put breakpoints onto continue, exitlab and break
|
||||
+ and actually see program reaching those breakpoints.
|
||||
+ This version of the test just checks that it can be compiled, linked
|
||||
+ and executed, further testing is done in corresponding gcc.dg/dwarf2/
|
||||
+ test and hopefully in gdb testsuite. */
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-options "-O0 -g -dA" } */
|
||||
+
|
||||
+extern void abort (void);
|
||||
+
|
||||
+int
|
||||
+foo (int parm)
|
||||
+{
|
||||
+ int varj, varm;
|
||||
+
|
||||
+ for (varj = 0; varj < 10; varj++)
|
||||
+ {
|
||||
+ if (varj == 5)
|
||||
+ continue;
|
||||
+ if (varj == 7 && !parm)
|
||||
+ goto exitlab;
|
||||
+ if (varj == 9)
|
||||
+ break;
|
||||
+ varm = varj;
|
||||
+ }
|
||||
+
|
||||
+exitlab:
|
||||
+ return varm;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ if (foo (0) != 6)
|
||||
+ abort ();
|
||||
+ if (foo (1) != 8)
|
||||
+ abort ();
|
||||
+ return 0;
|
||||
+}
|
@ -1,118 +0,0 @@
|
||||
2008-09-11 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/34037
|
||||
* gimplify.c (gimplify_type_sizes): When not optimizing, ensure
|
||||
TYPE_MIN_VALUE and TYPE_MAX_VALUE is not is not DECL_IGNORED_P
|
||||
VAR_DECL.
|
||||
* cfgexpand.c (expand_used_vars): Keep DECL_ARTIFICIAL
|
||||
!DECL_IGNORED_P vars in unexpanded_var_list list for instantiate_decls,
|
||||
ggc_free other TREE_LIST nodes from that chain.
|
||||
* function.c (instantiate_decls): Instantiate also DECL_RTL
|
||||
of vars in cfun->unexpanded_var_list, free that list afterwards.
|
||||
|
||||
--- gcc/gimplify.c.jj 2008-09-10 20:50:11.000000000 +0200
|
||||
+++ gcc/gimplify.c 2008-09-11 13:54:22.000000000 +0200
|
||||
@@ -7105,6 +7105,18 @@ gimplify_type_sizes (tree type, gimple_s
|
||||
/* These types may not have declarations, so handle them here. */
|
||||
gimplify_type_sizes (TREE_TYPE (type), list_p);
|
||||
gimplify_type_sizes (TYPE_DOMAIN (type), list_p);
|
||||
+ /* When not optimizing, ensure VLA bounds aren't removed. */
|
||||
+ if (!optimize
|
||||
+ && TYPE_DOMAIN (type)
|
||||
+ && INTEGRAL_TYPE_P (TYPE_DOMAIN (type)))
|
||||
+ {
|
||||
+ t = TYPE_MIN_VALUE (TYPE_DOMAIN (type));
|
||||
+ if (t && TREE_CODE (t) == VAR_DECL && DECL_ARTIFICIAL (t))
|
||||
+ DECL_IGNORED_P (t) = 0;
|
||||
+ t = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
|
||||
+ if (t && TREE_CODE (t) == VAR_DECL && DECL_ARTIFICIAL (t))
|
||||
+ DECL_IGNORED_P (t) = 0;
|
||||
+ }
|
||||
break;
|
||||
|
||||
case RECORD_TYPE:
|
||||
--- gcc/cfgexpand.c.jj 2008-09-09 16:08:04.000000000 +0200
|
||||
+++ gcc/cfgexpand.c 2008-09-11 15:01:00.000000000 +0200
|
||||
@@ -1440,7 +1440,7 @@ estimated_stack_frame_size (void)
|
||||
static void
|
||||
expand_used_vars (void)
|
||||
{
|
||||
- tree t, outer_block = DECL_INITIAL (current_function_decl);
|
||||
+ tree t, next, outer_block = DECL_INITIAL (current_function_decl);
|
||||
|
||||
/* Compute the phase of the stack frame for this function. */
|
||||
{
|
||||
@@ -1453,11 +1453,15 @@ expand_used_vars (void)
|
||||
|
||||
/* 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))
|
||||
+ t = cfun->unexpanded_var_list;
|
||||
+ cfun->unexpanded_var_list = NULL_TREE;
|
||||
+ for (; t; t = next)
|
||||
{
|
||||
tree var = TREE_VALUE (t);
|
||||
bool expand_now = false;
|
||||
|
||||
+ next = TREE_CHAIN (t);
|
||||
+
|
||||
/* We didn't set a block for static or extern because it's hard
|
||||
to tell the difference between a global variable (re)declared
|
||||
in a local scope, and one that's really declared there to
|
||||
@@ -1484,9 +1488,25 @@ expand_used_vars (void)
|
||||
TREE_USED (var) = 1;
|
||||
|
||||
if (expand_now)
|
||||
- expand_one_var (var, true, true);
|
||||
+ {
|
||||
+ expand_one_var (var, true, true);
|
||||
+ if (DECL_ARTIFICIAL (var) && !DECL_IGNORED_P (var))
|
||||
+ {
|
||||
+ rtx rtl = DECL_RTL_IF_SET (var);
|
||||
+
|
||||
+ /* Keep artificial non-ignored vars in cfun->unexpanded_var_list
|
||||
+ chain until instantiate_decls. */
|
||||
+ if (rtl && (MEM_P (rtl) || GET_CODE (rtl) == CONCAT))
|
||||
+ {
|
||||
+ TREE_CHAIN (t) = cfun->unexpanded_var_list;
|
||||
+ cfun->unexpanded_var_list = t;
|
||||
+ continue;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ ggc_free (t);
|
||||
}
|
||||
- cfun->unexpanded_var_list = NULL_TREE;
|
||||
|
||||
/* At this point, all variables within the block tree with TREE_USED
|
||||
set are actually used by the optimized function. Lay them out. */
|
||||
--- gcc/function.c.jj 2008-09-09 21:13:24.000000000 +0200
|
||||
+++ gcc/function.c 2008-09-11 14:56:47.000000000 +0200
|
||||
@@ -1645,7 +1645,7 @@ instantiate_decls_1 (tree let)
|
||||
static void
|
||||
instantiate_decls (tree fndecl)
|
||||
{
|
||||
- tree decl;
|
||||
+ tree decl, t, next;
|
||||
|
||||
/* Process all parameters of the function. */
|
||||
for (decl = DECL_ARGUMENTS (fndecl); decl; decl = TREE_CHAIN (decl))
|
||||
@@ -1661,6 +1661,17 @@ instantiate_decls (tree fndecl)
|
||||
|
||||
/* Now process all variables defined in the function or its subblocks. */
|
||||
instantiate_decls_1 (DECL_INITIAL (fndecl));
|
||||
+
|
||||
+ t = cfun->unexpanded_var_list;
|
||||
+ cfun->unexpanded_var_list = NULL_TREE;
|
||||
+ for (; t; t = next)
|
||||
+ {
|
||||
+ next = TREE_CHAIN (t);
|
||||
+ decl = TREE_VALUE (t);
|
||||
+ if (DECL_RTL_SET_P (decl))
|
||||
+ instantiate_decl_rtl (DECL_RTL (decl));
|
||||
+ ggc_free (t);
|
||||
+ }
|
||||
}
|
||||
|
||||
/* Pass through the INSNS of function FNDECL and convert virtual register
|
@ -1,47 +0,0 @@
|
||||
Revert:
|
||||
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.
|
||||
|
||||
* g++.dg/other/new-size-type.C: New test.
|
||||
|
||||
--- gcc/tree.c (revision 139711)
|
||||
+++ gcc/tree.c (revision 139710)
|
||||
@@ -6296,21 +6296,6 @@ int_fits_type_p (const_tree c, const_tre
|
||||
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)
|
||||
{
|
||||
--- gcc/testsuite/g++.dg/other/new-size-type.C (revision 139711)
|
||||
+++ gcc/testsuite/g++.dg/other/new-size-type.C (revision 139710)
|
||||
@@ -1,10 +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" }
|
||||
+ return new char[~static_cast<size_t>(0)];// { dg-bogus "large" "" { xfail *-*-* } }
|
||||
}
|
||||
|
@ -1,117 +0,0 @@
|
||||
2008-09-03 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/37189
|
||||
* cp-tree.h (defer_mark_used_calls, deferred_mark_used_calls): New
|
||||
extern decls.
|
||||
* decl2.c (mark_used): If defer_mark_used_calls, push decl into
|
||||
deferred_mark_used_calls vector and exit early.
|
||||
* decl.c (defer_mark_used_calls, deferred_mark_used_calls): New
|
||||
variables.
|
||||
(finish_function): Set defer_mark_used_calls for the duration of the
|
||||
function. Call mark_used on any queued decls.
|
||||
|
||||
PR c++/37189
|
||||
* g++.dg/gomp/pr37189.C: New test.
|
||||
|
||||
--- gcc/cp/decl2.c (revision 139954)
|
||||
+++ gcc/cp/decl2.c (revision 139955)
|
||||
@@ -3776,6 +3776,15 @@ mark_used (tree decl)
|
||||
/* If we don't need a value, then we don't need to synthesize DECL. */
|
||||
if (skip_evaluation)
|
||||
return;
|
||||
+
|
||||
+ /* If within finish_function, defer the rest until that function
|
||||
+ finishes, otherwise it might recurse. */
|
||||
+ if (defer_mark_used_calls)
|
||||
+ {
|
||||
+ VEC_safe_push (tree, gc, deferred_mark_used_calls, decl);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
/* Normally, we can wait until instantiation-time to synthesize
|
||||
DECL. However, if DECL is a static data member initialized with
|
||||
a constant, we need the value right now because a reference to
|
||||
--- gcc/cp/decl.c (revision 139954)
|
||||
+++ gcc/cp/decl.c (revision 139955)
|
||||
@@ -227,6 +227,11 @@ struct named_label_entry GTY(())
|
||||
function, two inside the body of a function in a local class, etc.) */
|
||||
int function_depth;
|
||||
|
||||
+/* To avoid unwanted recursion, finish_function defers all mark_used calls
|
||||
+ encountered during its execution until it finishes. */
|
||||
+bool defer_mark_used_calls;
|
||||
+VEC(tree, gc) *deferred_mark_used_calls;
|
||||
+
|
||||
/* States indicating how grokdeclarator() should handle declspecs marked
|
||||
with __attribute__((deprecated)). An object declared as
|
||||
__attribute__((deprecated)) suppresses warnings of uses of other
|
||||
@@ -12033,6 +12038,9 @@ finish_function (int flags)
|
||||
if (fndecl == NULL_TREE)
|
||||
return error_mark_node;
|
||||
|
||||
+ gcc_assert (!defer_mark_used_calls);
|
||||
+ defer_mark_used_calls = true;
|
||||
+
|
||||
if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
|
||||
&& DECL_VIRTUAL_P (fndecl)
|
||||
&& !processing_template_decl)
|
||||
@@ -12232,6 +12240,17 @@ finish_function (int flags)
|
||||
cxx_pop_function_context and then reset via pop_function_context. */
|
||||
current_function_decl = NULL_TREE;
|
||||
|
||||
+ defer_mark_used_calls = false;
|
||||
+ if (deferred_mark_used_calls)
|
||||
+ {
|
||||
+ unsigned int i;
|
||||
+ tree decl;
|
||||
+
|
||||
+ for (i = 0; VEC_iterate (tree, deferred_mark_used_calls, i, decl); i++)
|
||||
+ mark_used (decl);
|
||||
+ VEC_free (tree, gc, deferred_mark_used_calls);
|
||||
+ }
|
||||
+
|
||||
return fndecl;
|
||||
}
|
||||
|
||||
--- gcc/cp/cp-tree.h (revision 139954)
|
||||
+++ gcc/cp/cp-tree.h (revision 139955)
|
||||
@@ -4381,6 +4381,9 @@ extern void initialize_artificial_var (
|
||||
extern tree check_var_type (tree, tree);
|
||||
extern tree reshape_init (tree, tree);
|
||||
|
||||
+extern bool defer_mark_used_calls;
|
||||
+extern GTY(()) VEC(tree, gc) *deferred_mark_used_calls;
|
||||
+
|
||||
/* in decl2.c */
|
||||
extern bool check_java_method (tree);
|
||||
extern tree build_memfn_type (tree, tree, cp_cv_quals);
|
||||
--- gcc/testsuite/g++.dg/gomp/pr37189.C (revision 0)
|
||||
+++ gcc/testsuite/g++.dg/gomp/pr37189.C (revision 139955)
|
||||
@@ -0,0 +1,27 @@
|
||||
+// PR c++/37189
|
||||
+// { dg-do compile }
|
||||
+// { dg-options "-fopenmp" }
|
||||
+
|
||||
+struct S
|
||||
+{
|
||||
+ S () {}
|
||||
+ S (S const &) {}
|
||||
+};
|
||||
+
|
||||
+struct T
|
||||
+{
|
||||
+ S s;
|
||||
+};
|
||||
+
|
||||
+void
|
||||
+bar (T &)
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+foo ()
|
||||
+{
|
||||
+ T t;
|
||||
+ #pragma omp task
|
||||
+ bar (t);
|
||||
+}
|
@ -1,276 +0,0 @@
|
||||
2008-10-07 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* f95-lang.c (poplevel): Don't clear BLOCK_VARS if functionbody.
|
||||
* trans-decl.c (gfc_build_qualified_array): Build accurate debug type
|
||||
even if nest.
|
||||
(build_entry_thunks, gfc_generate_function_code,
|
||||
gfc_generate_constructors): Ensure DECL_SAVED_TREE is a BIND_EXPR
|
||||
with DECL_INITIAL as its BLOCK.
|
||||
|
||||
PR debug/37738
|
||||
* dwarf2out.c (common_block_die_table): New variable.
|
||||
(common_block_die_table_hash, common_block_die_table_eq): New
|
||||
functions.
|
||||
(gen_variable_die): Look up a DW_TAG_common_block die for a particular
|
||||
COMMON block in the current scope rather than globally. Optimize
|
||||
DW_OP_addr SYMBOL_REF DW_OP_plus_uconst off into
|
||||
DW_OP_addr SYMBOL_REF+off.
|
||||
|
||||
* gfortran.dg/debug/pr37738.f: New test.
|
||||
|
||||
--- gcc/testsuite/gfortran.dg/debug/pr37738.f (revision 0)
|
||||
+++ gcc/testsuite/gfortran.dg/debug/pr37738.f (revision 140945)
|
||||
@@ -0,0 +1,30 @@
|
||||
+C PR debug/37738
|
||||
+C { dg-do compile }
|
||||
+C { dg-skip-if "DWARF-2 only" { "*-*-*" } { "*" } { "-gdwarf-2" } }
|
||||
+C { dg-options "-dA" }
|
||||
+
|
||||
+ subroutine a
|
||||
+ integer*4 a_i, c_i
|
||||
+ common /block/a_i, c_i
|
||||
+ a_i = 1
|
||||
+ c_i = 4
|
||||
+ end subroutine a
|
||||
+ subroutine b
|
||||
+ integer*4 b_i
|
||||
+ common /block/b_i, d_i
|
||||
+ b_i = 2
|
||||
+ d_i = 5
|
||||
+ end subroutine b
|
||||
+ subroutine c
|
||||
+ integer*4 a_i, c_i
|
||||
+ common /block/a_i, c_i
|
||||
+ if (a_i .ne. 2) call abort
|
||||
+ if (c_i .ne. 5) call abort
|
||||
+ end subroutine c
|
||||
+ program abc
|
||||
+ call a
|
||||
+ call b
|
||||
+ call c
|
||||
+ end program abc
|
||||
+
|
||||
+C { dg-final { scan-assembler-times "DIE\[^\n\]*DW_TAG_common_block" 3 } }
|
||||
--- gcc/dwarf2out.c (revision 140943)
|
||||
+++ gcc/dwarf2out.c (revision 140945)
|
||||
@@ -4748,6 +4748,10 @@ static GTY((param_is (struct dwarf_file_
|
||||
The key is a DECL_UID() which is a unique number identifying each decl. */
|
||||
static GTY ((param_is (struct die_struct))) htab_t decl_die_table;
|
||||
|
||||
+/* A hash table of references to DIE's that describe COMMON blocks.
|
||||
+ The key is DECL_UID() ^ die_parent. */
|
||||
+static GTY ((param_is (struct die_struct))) htab_t common_block_die_table;
|
||||
+
|
||||
/* Node of the variable location list. */
|
||||
struct var_loc_node GTY ((chain_next ("%h.next")))
|
||||
{
|
||||
@@ -4960,6 +4964,8 @@ static void equate_type_number_to_die (t
|
||||
static hashval_t decl_die_table_hash (const void *);
|
||||
static int decl_die_table_eq (const void *, const void *);
|
||||
static dw_die_ref lookup_decl_die (tree);
|
||||
+static hashval_t common_block_die_table_hash (const void *);
|
||||
+static int common_block_die_table_eq (const void *, const void *);
|
||||
static hashval_t decl_loc_table_hash (const void *);
|
||||
static int decl_loc_table_eq (const void *, const void *);
|
||||
static var_loc_list *lookup_decl_loc (const_tree);
|
||||
@@ -13812,6 +13818,26 @@ gen_subprogram_die (tree decl, dw_die_re
|
||||
|
||||
}
|
||||
|
||||
+/* Returns a hash value for X (which really is a die_struct). */
|
||||
+
|
||||
+static hashval_t
|
||||
+common_block_die_table_hash (const void *x)
|
||||
+{
|
||||
+ const_dw_die_ref d = (const_dw_die_ref) x;
|
||||
+ return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent);
|
||||
+}
|
||||
+
|
||||
+/* Return nonzero if decl_id and die_parent of die_struct X is the same
|
||||
+ as decl_id and die_parent of die_struct Y. */
|
||||
+
|
||||
+static int
|
||||
+common_block_die_table_eq (const void *x, const void *y)
|
||||
+{
|
||||
+ const_dw_die_ref d = (const_dw_die_ref) x;
|
||||
+ const_dw_die_ref e = (const_dw_die_ref) y;
|
||||
+ return d->decl_id == e->decl_id && d->die_parent == e->die_parent;
|
||||
+}
|
||||
+
|
||||
/* Generate a DIE to represent a declared data object. */
|
||||
|
||||
static void
|
||||
@@ -13853,6 +13879,7 @@ gen_variable_die (tree decl, dw_die_ref
|
||||
tree field;
|
||||
dw_die_ref com_die;
|
||||
dw_loc_descr_ref loc;
|
||||
+ die_node com_die_arg;
|
||||
|
||||
var_die = lookup_decl_die (decl);
|
||||
if (var_die)
|
||||
@@ -13863,21 +13890,41 @@ gen_variable_die (tree decl, dw_die_ref
|
||||
if (loc)
|
||||
{
|
||||
if (off)
|
||||
- add_loc_descr (&loc, new_loc_descr (DW_OP_plus_uconst,
|
||||
+ {
|
||||
+ /* Optimize the common case. */
|
||||
+ if (loc->dw_loc_opc == DW_OP_addr
|
||||
+ && loc->dw_loc_next == NULL
|
||||
+ && GET_CODE (loc->dw_loc_oprnd1.v.val_addr)
|
||||
+ == SYMBOL_REF)
|
||||
+ loc->dw_loc_oprnd1.v.val_addr
|
||||
+ = plus_constant (loc->dw_loc_oprnd1.v.val_addr, off);
|
||||
+ else
|
||||
+ add_loc_descr (&loc,
|
||||
+ new_loc_descr (DW_OP_plus_uconst,
|
||||
off, 0));
|
||||
+ }
|
||||
add_AT_loc (var_die, DW_AT_location, loc);
|
||||
remove_AT (var_die, DW_AT_declaration);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
+
|
||||
+ if (common_block_die_table == NULL)
|
||||
+ common_block_die_table
|
||||
+ = htab_create_ggc (10, common_block_die_table_hash,
|
||||
+ common_block_die_table_eq, NULL);
|
||||
+
|
||||
field = TREE_OPERAND (DECL_VALUE_EXPR (decl), 0);
|
||||
- com_die = lookup_decl_die (com_decl);
|
||||
+ com_die_arg.decl_id = DECL_UID (com_decl);
|
||||
+ com_die_arg.die_parent = context_die;
|
||||
+ com_die = (dw_die_ref) htab_find (common_block_die_table, &com_die_arg);
|
||||
loc = loc_descriptor_from_tree (com_decl);
|
||||
if (com_die == NULL)
|
||||
{
|
||||
const char *cnam
|
||||
= IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
|
||||
+ void **slot;
|
||||
|
||||
com_die = new_die (DW_TAG_common_block, context_die, decl);
|
||||
add_name_and_src_coords_attributes (com_die, com_decl);
|
||||
@@ -13891,7 +13938,9 @@ gen_variable_die (tree decl, dw_die_ref
|
||||
else if (DECL_EXTERNAL (decl))
|
||||
add_AT_flag (com_die, DW_AT_declaration, 1);
|
||||
add_pubname_string (cnam, com_die); /* ??? needed? */
|
||||
- equate_decl_number_to_die (com_decl, com_die);
|
||||
+ com_die->decl_id = DECL_UID (com_decl);
|
||||
+ slot = htab_find_slot (common_block_die_table, com_die, INSERT);
|
||||
+ *slot = (void *) com_die;
|
||||
}
|
||||
else if (get_AT (com_die, DW_AT_location) == NULL && loc)
|
||||
{
|
||||
@@ -13907,7 +13956,17 @@ gen_variable_die (tree decl, dw_die_ref
|
||||
if (loc)
|
||||
{
|
||||
if (off)
|
||||
- add_loc_descr (&loc, new_loc_descr (DW_OP_plus_uconst, off, 0));
|
||||
+ {
|
||||
+ /* Optimize the common case. */
|
||||
+ if (loc->dw_loc_opc == DW_OP_addr
|
||||
+ && loc->dw_loc_next == NULL
|
||||
+ && GET_CODE (loc->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF)
|
||||
+ loc->dw_loc_oprnd1.v.val_addr
|
||||
+ = plus_constant (loc->dw_loc_oprnd1.v.val_addr, off);
|
||||
+ else
|
||||
+ add_loc_descr (&loc, new_loc_descr (DW_OP_plus_uconst,
|
||||
+ off, 0));
|
||||
+ }
|
||||
add_AT_loc (var_die, DW_AT_location, loc);
|
||||
}
|
||||
else if (DECL_EXTERNAL (decl))
|
||||
--- gcc/fortran/f95-lang.c (revision 140943)
|
||||
+++ gcc/fortran/f95-lang.c (revision 140945)
|
||||
@@ -457,14 +457,8 @@ poplevel (int keep, int reverse, int fun
|
||||
current_binding_level = current_binding_level->level_chain;
|
||||
|
||||
if (functionbody)
|
||||
- {
|
||||
- /* This is the top level block of a function. The ..._DECL chain stored
|
||||
- in BLOCK_VARS are the function's parameters (PARM_DECL nodes). Don't
|
||||
- leave them in the BLOCK because they are found in the FUNCTION_DECL
|
||||
- instead. */
|
||||
- DECL_INITIAL (current_function_decl) = block_node;
|
||||
- BLOCK_VARS (block_node) = 0;
|
||||
- }
|
||||
+ /* This is the top level block of a function. */
|
||||
+ DECL_INITIAL (current_function_decl) = block_node;
|
||||
else if (current_binding_level == global_binding_level)
|
||||
/* When using gfc_start_block/gfc_finish_block from middle-end hooks,
|
||||
don't add newly created BLOCKs as sublocks of global_binding_level. */
|
||||
--- gcc/fortran/trans-decl.c (revision 140943)
|
||||
+++ gcc/fortran/trans-decl.c (revision 140945)
|
||||
@@ -704,7 +704,7 @@ gfc_build_qualified_array (tree decl, gf
|
||||
layout_type (type);
|
||||
}
|
||||
|
||||
- if (nest || write_symbols == NO_DEBUG)
|
||||
+ if (write_symbols == NO_DEBUG)
|
||||
return;
|
||||
|
||||
if (TYPE_NAME (type) != NULL_TREE
|
||||
@@ -1761,7 +1761,7 @@ build_entry_thunks (gfc_namespace * ns)
|
||||
|
||||
thunk_fndecl = thunk_sym->backend_decl;
|
||||
|
||||
- gfc_start_block (&body);
|
||||
+ gfc_init_block (&body);
|
||||
|
||||
/* Pass extra parameter identifying this entry point. */
|
||||
tmp = build_int_cst (gfc_array_index_type, el->id);
|
||||
@@ -1869,8 +1869,12 @@ build_entry_thunks (gfc_namespace * ns)
|
||||
|
||||
/* Finish off this function and send it for code generation. */
|
||||
DECL_SAVED_TREE (thunk_fndecl) = gfc_finish_block (&body);
|
||||
+ tmp = getdecls ();
|
||||
poplevel (1, 0, 1);
|
||||
BLOCK_SUPERCONTEXT (DECL_INITIAL (thunk_fndecl)) = thunk_fndecl;
|
||||
+ DECL_SAVED_TREE (thunk_fndecl)
|
||||
+ = build3_v (BIND_EXPR, tmp, DECL_SAVED_TREE (thunk_fndecl),
|
||||
+ DECL_INITIAL (thunk_fndecl));
|
||||
|
||||
/* Output the GENERIC tree. */
|
||||
dump_function (TDI_original, thunk_fndecl);
|
||||
@@ -3652,7 +3656,7 @@ gfc_generate_function_code (gfc_namespac
|
||||
|
||||
trans_function_start (sym);
|
||||
|
||||
- gfc_start_block (&block);
|
||||
+ gfc_init_block (&block);
|
||||
|
||||
if (ns->entries && ns->proc_name->ts.type == BT_CHARACTER)
|
||||
{
|
||||
@@ -3886,11 +3890,16 @@ gfc_generate_function_code (gfc_namespac
|
||||
saved_function_decls = NULL_TREE;
|
||||
|
||||
DECL_SAVED_TREE (fndecl) = gfc_finish_block (&block);
|
||||
+ decl = getdecls ();
|
||||
|
||||
/* Finish off this function and send it for code generation. */
|
||||
poplevel (1, 0, 1);
|
||||
BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
|
||||
|
||||
+ DECL_SAVED_TREE (fndecl)
|
||||
+ = build3_v (BIND_EXPR, decl, DECL_SAVED_TREE (fndecl),
|
||||
+ DECL_INITIAL (fndecl));
|
||||
+
|
||||
/* Output the GENERIC tree. */
|
||||
dump_function (TDI_original, fndecl);
|
||||
|
||||
@@ -3969,9 +3978,13 @@ gfc_generate_constructors (void)
|
||||
DECL_SAVED_TREE (fndecl) = build_stmt (EXPR_STMT, tmp);
|
||||
}
|
||||
|
||||
+ decl = getdecls ();
|
||||
poplevel (1, 0, 1);
|
||||
|
||||
BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
|
||||
+ DECL_SAVED_TREE (fndecl)
|
||||
+ = build3_v (BIND_EXPR, decl, DECL_SAVED_TREE (fndecl),
|
||||
+ DECL_INITIAL (fndecl));
|
||||
|
||||
free_after_parsing (cfun);
|
||||
free_after_compilation (cfun);
|
@ -1,32 +0,0 @@
|
||||
2008-11-03 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/37858
|
||||
* passes.c (execute_one_pass): Don't look at cfun->curr_properties
|
||||
for ipa and simple ipa passes.
|
||||
|
||||
* gcc.dg/pr37858.c: New test.
|
||||
|
||||
--- gcc/passes.c (revision 141544)
|
||||
+++ gcc/passes.c (revision 141545)
|
||||
@@ -1289,6 +1289,7 @@ execute_one_pass (struct opt_pass *pass)
|
||||
if (initializing_dump
|
||||
&& dump_file
|
||||
&& graph_dump_format != no_graph
|
||||
+ && cfun
|
||||
&& (cfun->curr_properties & (PROP_cfg | PROP_rtl))
|
||||
== (PROP_cfg | PROP_rtl))
|
||||
{
|
||||
--- gcc/testsuite/gcc.dg/pr37858.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/pr37858.c (revision 141545)
|
||||
@@ -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" } } */
|
@ -1,79 +0,0 @@
|
||||
2008-10-29 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
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.
|
||||
|
||||
* gcc.target/i386/pr37870.c: New test.
|
||||
|
||||
--- gcc/expmed.c (revision 141429)
|
||||
+++ gcc/expmed.c (revision 141430)
|
||||
@@ -1278,9 +1278,8 @@ extract_bit_field_1 (rtx str_rtx, unsign
|
||||
{
|
||||
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
|
||||
@@ -1288,6 +1287,24 @@ extract_bit_field_1 (rtx str_rtx, unsign
|
||||
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);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
--- gcc/testsuite/gcc.target/i386/pr37870.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.target/i386/pr37870.c (revision 141430)
|
||||
@@ -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;
|
||||
+}
|
@ -1,59 +0,0 @@
|
||||
2008-10-27 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/37879
|
||||
* predict.c (tree_estimate_probability): Check if last_stmt is
|
||||
non-NULL before dereferencing it.
|
||||
|
||||
* gcc.dg/pr37879.c: New test.
|
||||
|
||||
--- gcc/predict.c (revision 141389)
|
||||
+++ gcc/predict.c (revision 141390)
|
||||
@@ -1374,6 +1374,7 @@ tree_estimate_probability (void)
|
||||
{
|
||||
edge e;
|
||||
edge_iterator ei;
|
||||
+ tree last;
|
||||
|
||||
FOR_EACH_EDGE (e, ei, bb->succs)
|
||||
{
|
||||
@@ -1396,7 +1397,8 @@ tree_estimate_probability (void)
|
||||
&& 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;
|
||||
--- gcc/testsuite/gcc.dg/pr37879.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.dg/pr37879.c (revision 141390)
|
||||
@@ -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 ("");
|
||||
+}
|
@ -1,106 +0,0 @@
|
||||
2008-10-28 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.
|
||||
|
||||
* gcc.c-torture/execute/pr37924.c: New test.
|
||||
|
||||
--- gcc/combine.c (revision 141412)
|
||||
+++ gcc/combine.c (revision 141413)
|
||||
@@ -7024,7 +7024,8 @@ make_compound_operation (rtx x, enum rtx
|
||||
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 @@ make_compound_operation (rtx x, enum rtx
|
||||
&& (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),
|
||||
@@ -9023,11 +9025,6 @@ simplify_shift_const_1 (enum rtx_code co
|
||||
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 +9070,11 @@ simplify_shift_const_1 (enum rtx_code co
|
||||
}
|
||||
}
|
||||
|
||||
+ /* 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
|
||||
--- gcc/testsuite/gcc.c-torture/execute/pr37924.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.c-torture/execute/pr37924.c (revision 141413)
|
||||
@@ -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;
|
||||
+}
|
@ -1,89 +0,0 @@
|
||||
2008-04-01 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR pch/13675
|
||||
* files.c (struct _cpp_file): Remove pch field.
|
||||
(pch_open_file): Don't set file->pch, just file->pchname.
|
||||
(should_stack_file): After pfile->cb.read_pch call
|
||||
free pchname and clear pchname, don't close file->fd.
|
||||
Test file->pchname instead of file->pch. Don't close fd after cb.
|
||||
(_cpp_stack_include): Test file->pchname instead of file->pch.
|
||||
|
||||
* c-pch.c (c_common_read_pch): On error close (fd) resp. fclose (f).
|
||||
|
||||
--- libcpp/files.c.jj 2008-02-18 23:50:17.000000000 +0100
|
||||
+++ libcpp/files.c 2008-03-31 15:59:01.000000000 +0200
|
||||
@@ -106,9 +106,6 @@ struct _cpp_file
|
||||
|
||||
/* If BUFFER above contains the true contents of the file. */
|
||||
bool buffer_valid;
|
||||
-
|
||||
- /* File is a PCH (on return from find_include_file). */
|
||||
- bool pch;
|
||||
};
|
||||
|
||||
/* A singly-linked list for all searches for a given file name, with
|
||||
@@ -322,9 +319,7 @@ pch_open_file (cpp_reader *pfile, _cpp_f
|
||||
}
|
||||
closedir (pchdir);
|
||||
}
|
||||
- if (valid)
|
||||
- file->pch = true;
|
||||
- else
|
||||
+ if (!valid)
|
||||
*invalid_pch = true;
|
||||
}
|
||||
|
||||
@@ -703,11 +698,12 @@ should_stack_file (cpp_reader *pfile, _c
|
||||
return false;
|
||||
|
||||
/* Handle PCH files immediately; don't stack them. */
|
||||
- if (file->pch)
|
||||
+ if (file->pchname)
|
||||
{
|
||||
pfile->cb.read_pch (pfile, file->pchname, file->fd, file->path);
|
||||
- close (file->fd);
|
||||
file->fd = -1;
|
||||
+ free ((void *) file->pchname);
|
||||
+ file->pchname = NULL;
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -916,7 +912,7 @@ _cpp_stack_include (cpp_reader *pfile, c
|
||||
complicates LAST_SOURCE_LINE_LOCATION. This does not apply if we
|
||||
found a PCH file (in which case linemap_add is not called) or we
|
||||
were included from the command-line. */
|
||||
- if (! file->pch && file->err_no == 0 && type != IT_CMDLINE)
|
||||
+ if (file->pchname == NULL && file->err_no == 0 && type != IT_CMDLINE)
|
||||
pfile->line_table->highest_location--;
|
||||
|
||||
return _cpp_stack_file (pfile, file, type == IT_IMPORT);
|
||||
--- gcc/c-pch.c.jj 2008-02-18 23:46:08.000000000 +0100
|
||||
+++ gcc/c-pch.c 2008-03-31 15:56:00.000000000 +0200
|
||||
@@ -372,6 +372,7 @@ c_common_read_pch (cpp_reader *pfile, co
|
||||
if (f == NULL)
|
||||
{
|
||||
cpp_errno (pfile, CPP_DL_ERROR, "calling fdopen");
|
||||
+ close (fd);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -380,6 +381,7 @@ c_common_read_pch (cpp_reader *pfile, co
|
||||
if (fread (&h, sizeof (h), 1, f) != 1)
|
||||
{
|
||||
cpp_errno (pfile, CPP_DL_ERROR, "reading");
|
||||
+ fclose (f);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -425,7 +427,10 @@ c_common_read_pch (cpp_reader *pfile, co
|
||||
gt_pch_restore (f);
|
||||
|
||||
if (cpp_read_state (pfile, name, f, smd) != 0)
|
||||
- return;
|
||||
+ {
|
||||
+ fclose (f);
|
||||
+ return;
|
||||
+ }
|
||||
|
||||
fclose (f);
|
||||
|
@ -1,355 +0,0 @@
|
||||
2008-09-02 H.J. Lu <hongjiu.lu@intel.com>
|
||||
Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* config/i386/i386.c (X86_64_VARARGS_SIZE): Removed.
|
||||
(setup_incoming_varargs_64): Set/check ix86_varargs_gpr_size and
|
||||
ix86_varargs_fpr_size. Use ix86_varargs_gpr_size instead of
|
||||
REGPARM_MAX. Don't set ix86_save_varrargs_registers.
|
||||
(ix86_va_start): Check ix86_varargs_gpr_size and
|
||||
ix86_varargs_fpr_size instead of cfun->va_list_gpr_size and
|
||||
cfun->va_list_fpr_size, respectively. Subtract 8*REGPARM_MAX
|
||||
from frame pointer if ix86_varargs_gpr_size == 0.
|
||||
(ix86_compute_frame_layout): Updated.
|
||||
* config/i386/i386.h (ix86_save_varrargs_registers): Removed.
|
||||
(ix86_varargs_gpr_size): Define.
|
||||
(ix86_varargs_fpr_size): Likewise.
|
||||
(machine_function): Remove save_varrargs_registers.
|
||||
Add varargs_gpr_size and varargs_fpr_size.
|
||||
|
||||
* gcc.target/i386/amd64-abi-3.c: New test.
|
||||
* gcc.target/i386/amd64-abi-4.c: Likewise.
|
||||
* gcc.target/i386/amd64-abi-5.c: Likewise.
|
||||
* gcc.target/i386/amd64-abi-6.c: Likewise.
|
||||
|
||||
--- gcc/config/i386/i386.h (revision 139909)
|
||||
+++ gcc/config/i386/i386.h (revision 139910)
|
||||
@@ -2440,7 +2440,8 @@ struct machine_function GTY(())
|
||||
struct stack_local_entry *stack_locals;
|
||||
const char *some_ld_name;
|
||||
rtx force_align_arg_pointer;
|
||||
- int save_varrargs_registers;
|
||||
+ int varargs_gpr_size;
|
||||
+ int varargs_fpr_size;
|
||||
int accesses_prev_frame;
|
||||
int optimize_mode_switching[MAX_386_ENTITIES];
|
||||
int needs_cld;
|
||||
@@ -2463,7 +2464,8 @@ struct machine_function GTY(())
|
||||
};
|
||||
|
||||
#define ix86_stack_locals (cfun->machine->stack_locals)
|
||||
-#define ix86_save_varrargs_registers (cfun->machine->save_varrargs_registers)
|
||||
+#define ix86_varargs_gpr_size (cfun->machine->varargs_gpr_size)
|
||||
+#define ix86_varargs_fpr_size (cfun->machine->varargs_fpr_size)
|
||||
#define ix86_optimize_mode_switching (cfun->machine->optimize_mode_switching)
|
||||
#define ix86_current_function_needs_cld (cfun->machine->needs_cld)
|
||||
#define ix86_tls_descriptor_calls_expanded_in_cfun \
|
||||
--- gcc/config/i386/i386.c (revision 139909)
|
||||
+++ gcc/config/i386/i386.c (revision 139910)
|
||||
@@ -1616,9 +1616,6 @@ rtx ix86_compare_op0 = NULL_RTX;
|
||||
rtx ix86_compare_op1 = NULL_RTX;
|
||||
rtx ix86_compare_emitted = NULL_RTX;
|
||||
|
||||
-/* Size of the register save area. */
|
||||
-#define X86_64_VARARGS_SIZE (REGPARM_MAX * UNITS_PER_WORD + SSE_REGPARM_MAX * 16)
|
||||
-
|
||||
/* Define the structure for the machine field in struct function. */
|
||||
|
||||
struct stack_local_entry GTY(())
|
||||
@@ -4976,11 +4973,22 @@ setup_incoming_varargs_64 (CUMULATIVE_AR
|
||||
alias_set_type set;
|
||||
int i;
|
||||
|
||||
- if (! cfun->va_list_gpr_size && ! cfun->va_list_fpr_size)
|
||||
+ /* GPR size of varargs save area. */
|
||||
+ if (cfun->va_list_gpr_size)
|
||||
+ ix86_varargs_gpr_size = REGPARM_MAX * UNITS_PER_WORD;
|
||||
+ else
|
||||
+ ix86_varargs_gpr_size = 0;
|
||||
+
|
||||
+ /* FPR size of varargs save area. We don't need it if we don't pass
|
||||
+ anything in SSE registers. */
|
||||
+ if (cum->sse_nregs && cfun->va_list_fpr_size)
|
||||
+ ix86_varargs_fpr_size = SSE_REGPARM_MAX * 16;
|
||||
+ else
|
||||
+ ix86_varargs_fpr_size = 0;
|
||||
+
|
||||
+ if (! ix86_varargs_gpr_size && ! ix86_varargs_fpr_size)
|
||||
return;
|
||||
|
||||
- /* Indicate to allocate space on the stack for varargs save area. */
|
||||
- ix86_save_varrargs_registers = 1;
|
||||
/* We need 16-byte stack alignment to save SSE registers. If user
|
||||
asked for lower preferred_stack_boundary, lets just hope that he knows
|
||||
what he is doing and won't varargs SSE values.
|
||||
@@ -5006,7 +5014,7 @@ setup_incoming_varargs_64 (CUMULATIVE_AR
|
||||
x86_64_int_parameter_registers[i]));
|
||||
}
|
||||
|
||||
- if (cum->sse_nregs && cfun->va_list_fpr_size)
|
||||
+ if (ix86_varargs_fpr_size)
|
||||
{
|
||||
/* Now emit code to save SSE registers. The AX parameter contains number
|
||||
of SSE parameter registers used to call this function. We use
|
||||
@@ -5041,7 +5049,7 @@ setup_incoming_varargs_64 (CUMULATIVE_AR
|
||||
tmp_reg = gen_reg_rtx (Pmode);
|
||||
emit_insn (gen_rtx_SET (VOIDmode, tmp_reg,
|
||||
plus_constant (save_area,
|
||||
- 8 * REGPARM_MAX + 127)));
|
||||
+ ix86_varargs_gpr_size + 127)));
|
||||
mem = gen_rtx_MEM (BLKmode, plus_constant (tmp_reg, -127));
|
||||
MEM_NOTRAP_P (mem) = 1;
|
||||
set_mem_alias_set (mem, set);
|
||||
@@ -5145,7 +5153,7 @@ ix86_va_start (tree valist, rtx nextarg)
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
}
|
||||
|
||||
- if (cfun->va_list_fpr_size)
|
||||
+ if (TARGET_SSE && cfun->va_list_fpr_size)
|
||||
{
|
||||
type = TREE_TYPE (fpr);
|
||||
t = build2 (GIMPLE_MODIFY_STMT, type, fpr,
|
||||
@@ -5164,12 +5172,15 @@ ix86_va_start (tree valist, rtx nextarg)
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
|
||||
- if (cfun->va_list_gpr_size || cfun->va_list_fpr_size)
|
||||
+ if (ix86_varargs_gpr_size || ix86_varargs_fpr_size)
|
||||
{
|
||||
/* Find the register save area.
|
||||
Prologue of the function save it right above stack frame. */
|
||||
type = TREE_TYPE (sav);
|
||||
t = make_tree (type, frame_pointer_rtx);
|
||||
+ if (!ix86_varargs_gpr_size)
|
||||
+ t = build2 (POINTER_PLUS_EXPR, type, t,
|
||||
+ size_int (-8 * REGPARM_MAX));
|
||||
t = build2 (GIMPLE_MODIFY_STMT, type, sav, t);
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
|
||||
@@ -6079,13 +6090,8 @@ ix86_compute_frame_layout (struct ix86_f
|
||||
offset += frame->nregs * UNITS_PER_WORD;
|
||||
|
||||
/* Va-arg area */
|
||||
- if (ix86_save_varrargs_registers)
|
||||
- {
|
||||
- offset += X86_64_VARARGS_SIZE;
|
||||
- frame->va_arg_size = X86_64_VARARGS_SIZE;
|
||||
- }
|
||||
- else
|
||||
- frame->va_arg_size = 0;
|
||||
+ frame->va_arg_size = ix86_varargs_gpr_size + ix86_varargs_fpr_size;
|
||||
+ offset += frame->va_arg_size;
|
||||
|
||||
/* Align start of frame for local function. */
|
||||
frame->padding1 = ((offset + stack_alignment_needed - 1)
|
||||
--- gcc/testsuite/gcc.target/i386/amd64-abi-3.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.target/i386/amd64-abi-3.c (revision 139910)
|
||||
@@ -0,0 +1,18 @@
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-require-effective-target lp64 } */
|
||||
+/* { dg-options "-O2 -mno-sse" } */
|
||||
+/* { dg-final { scan-assembler "subq\[\\t \]*\\\$88,\[\\t \]*%rsp" } } */
|
||||
+/* { dg-final { scan-assembler-not "subq\[\\t \]*\\\$216,\[\\t \]*%rsp" } } */
|
||||
+
|
||||
+#include <stdarg.h>
|
||||
+
|
||||
+void foo (va_list va_arglist);
|
||||
+
|
||||
+void
|
||||
+test (int a1, ...)
|
||||
+{
|
||||
+ va_list va_arglist;
|
||||
+ va_start (va_arglist, a1);
|
||||
+ foo (va_arglist);
|
||||
+ va_end (va_arglist);
|
||||
+}
|
||||
--- gcc/testsuite/gcc.target/i386/amd64-abi-5.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.target/i386/amd64-abi-5.c (revision 139910)
|
||||
@@ -0,0 +1,64 @@
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-require-effective-target lp64 } */
|
||||
+/* { dg-options "-O2" } */
|
||||
+
|
||||
+#include <stdarg.h>
|
||||
+#include <assert.h>
|
||||
+
|
||||
+int n1 = 30;
|
||||
+double n2 = 324;
|
||||
+double n3 = 39494.94;
|
||||
+double n4 = 407;
|
||||
+double n5 = 32.304;
|
||||
+double n6 = 394.14;
|
||||
+double n7 = 4.07;
|
||||
+double n8 = 32.4;
|
||||
+double n9 = 314.194;
|
||||
+double n10 = 0.1407;
|
||||
+
|
||||
+int e1;
|
||||
+double e2;
|
||||
+double e3;
|
||||
+double e4;
|
||||
+double e5;
|
||||
+double e6;
|
||||
+double e7;
|
||||
+double e8;
|
||||
+double e9;
|
||||
+double e10;
|
||||
+
|
||||
+static void
|
||||
+__attribute__((noinline))
|
||||
+test (int a1, ...)
|
||||
+{
|
||||
+ e1 = a1;
|
||||
+ va_list va_arglist;
|
||||
+ va_start (va_arglist, a1);
|
||||
+ e2 = va_arg (va_arglist, double);
|
||||
+ e3 = va_arg (va_arglist, double);
|
||||
+ e4 = va_arg (va_arglist, double);
|
||||
+ e5 = va_arg (va_arglist, double);
|
||||
+ e6 = va_arg (va_arglist, double);
|
||||
+ e7 = va_arg (va_arglist, double);
|
||||
+ e8 = va_arg (va_arglist, double);
|
||||
+ e9 = va_arg (va_arglist, double);
|
||||
+ e10 = va_arg (va_arglist, double);
|
||||
+ va_end (va_arglist);
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main ()
|
||||
+{
|
||||
+ test (n1, n2, n3, n4, n5, n6, n7, n8, n9, n10);
|
||||
+ assert (n1 == e1);
|
||||
+ assert (n2 == e2);
|
||||
+ assert (n3 == e3);
|
||||
+ assert (n4 == e4);
|
||||
+ assert (n5 == e5);
|
||||
+ assert (n6 == e6);
|
||||
+ assert (n7 == e7);
|
||||
+ assert (n8 == e8);
|
||||
+ assert (n9 == e9);
|
||||
+ assert (n10 == e10);
|
||||
+ return 0;
|
||||
+}
|
||||
--- gcc/testsuite/gcc.target/i386/amd64-abi-4.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.target/i386/amd64-abi-4.c (revision 139910)
|
||||
@@ -0,0 +1,47 @@
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-require-effective-target lp64 } */
|
||||
+/* { dg-options "-O2 -mno-sse" } */
|
||||
+
|
||||
+#include <stdarg.h>
|
||||
+#include <assert.h>
|
||||
+
|
||||
+int n1 = 30;
|
||||
+int n2 = 324;
|
||||
+void *n3 = (void *) &n2;
|
||||
+int n4 = 407;
|
||||
+
|
||||
+int e1;
|
||||
+int e2;
|
||||
+void *e3;
|
||||
+int e4;
|
||||
+
|
||||
+static void
|
||||
+__attribute__((noinline))
|
||||
+foo (va_list va_arglist)
|
||||
+{
|
||||
+ e2 = va_arg (va_arglist, int);
|
||||
+ e3 = va_arg (va_arglist, void *);
|
||||
+ e4 = va_arg (va_arglist, int);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+__attribute__((noinline))
|
||||
+test (int a1, ...)
|
||||
+{
|
||||
+ e1 = a1;
|
||||
+ va_list va_arglist;
|
||||
+ va_start (va_arglist, a1);
|
||||
+ foo (va_arglist);
|
||||
+ va_end (va_arglist);
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main ()
|
||||
+{
|
||||
+ test (n1, n2, n3, n4);
|
||||
+ assert (n1 == e1);
|
||||
+ assert (n2 == e2);
|
||||
+ assert (n3 == e3);
|
||||
+ assert (n4 == e4);
|
||||
+ return 0;
|
||||
+}
|
||||
--- gcc/testsuite/gcc.target/i386/amd64-abi-6.c (revision 0)
|
||||
+++ gcc/testsuite/gcc.target/i386/amd64-abi-6.c (revision 139910)
|
||||
@@ -0,0 +1,71 @@
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-require-effective-target lp64 } */
|
||||
+/* { dg-options "-O2" } */
|
||||
+
|
||||
+#include <stdarg.h>
|
||||
+#include <assert.h>
|
||||
+
|
||||
+int n1 = 30;
|
||||
+double n2 = 324;
|
||||
+double n3 = 39494.94;
|
||||
+double n4 = 407;
|
||||
+double n5 = 32.304;
|
||||
+double n6 = 394.14;
|
||||
+double n7 = 4.07;
|
||||
+double n8 = 32.4;
|
||||
+double n9 = 314.194;
|
||||
+double n10 = 0.1407;
|
||||
+
|
||||
+int e1;
|
||||
+double e2;
|
||||
+double e3;
|
||||
+double e4;
|
||||
+double e5;
|
||||
+double e6;
|
||||
+double e7;
|
||||
+double e8;
|
||||
+double e9;
|
||||
+double e10;
|
||||
+
|
||||
+static void
|
||||
+__attribute__((noinline))
|
||||
+foo (va_list va_arglist)
|
||||
+{
|
||||
+ e2 = va_arg (va_arglist, double);
|
||||
+ e3 = va_arg (va_arglist, double);
|
||||
+ e4 = va_arg (va_arglist, double);
|
||||
+ e5 = va_arg (va_arglist, double);
|
||||
+ e6 = va_arg (va_arglist, double);
|
||||
+ e7 = va_arg (va_arglist, double);
|
||||
+ e8 = va_arg (va_arglist, double);
|
||||
+ e9 = va_arg (va_arglist, double);
|
||||
+ e10 = va_arg (va_arglist, double);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+__attribute__((noinline))
|
||||
+test (int a1, ...)
|
||||
+{
|
||||
+ va_list va_arglist;
|
||||
+ e1 = a1;
|
||||
+ va_start (va_arglist, a1);
|
||||
+ foo (va_arglist);
|
||||
+ va_end (va_arglist);
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main ()
|
||||
+{
|
||||
+ test (n1, n2, n3, n4, n5, n6, n7, n8, n9, n10);
|
||||
+ assert (n1 == e1);
|
||||
+ assert (n2 == e2);
|
||||
+ assert (n3 == e3);
|
||||
+ assert (n4 == e4);
|
||||
+ assert (n5 == e5);
|
||||
+ assert (n6 == e6);
|
||||
+ assert (n7 == e7);
|
||||
+ assert (n8 == e8);
|
||||
+ assert (n9 == e9);
|
||||
+ assert (n10 == e10);
|
||||
+ return 0;
|
||||
+}
|
@ -3,8 +3,6 @@
|
||||
* config/rs6000/sysv4.h (LINK_EH_SPEC): Add --build-id for
|
||||
non-relocatable link.
|
||||
* config/linux.h (LINK_EH_SPEC): Likewise.
|
||||
* config/sparc/linux.h (LINK_EH_SPEC): Likewise.
|
||||
* config/sparc/linux64.h (LINK_EH_SPEC): Likewise.
|
||||
* config/alpha/elf.h (LINK_EH_SPEC): Likewise.
|
||||
* config/ia64/linux.h (LINK_EH_SPEC): Likewise.
|
||||
|
||||
@ -30,37 +28,17 @@
|
||||
#endif
|
||||
|
||||
/* Define this so we can compile MS code for use with WINE. */
|
||||
--- gcc/config/sparc/linux64.h.~1~
|
||||
+++ gcc/config/sparc/linux64.h
|
||||
@@ -316,7 +316,7 @@ do { \
|
||||
#define DITF_CONVERSION_LIBFUNCS 1
|
||||
|
||||
#if defined(HAVE_LD_EH_FRAME_HDR)
|
||||
-#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
|
||||
+#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} %{!r:--build-id} "
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_AS_TLS
|
||||
--- gcc/config/sparc/linux.h.~1~
|
||||
+++ gcc/config/sparc/linux.h
|
||||
@@ -188,7 +188,7 @@ do { \
|
||||
#define DITF_CONVERSION_LIBFUNCS 1
|
||||
|
||||
#if defined(HAVE_LD_EH_FRAME_HDR)
|
||||
-#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
|
||||
+#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} %{!r:--build-id} "
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_AS_TLS
|
||||
--- gcc/config/alpha/elf.h.~1~
|
||||
+++ gcc/config/alpha/elf.h
|
||||
@@ -453,5 +453,5 @@ extern int alpha_this_gpdisp_sequence_nu
|
||||
@@ -421,7 +421,7 @@ extern int alpha_this_gpdisp_sequence_nu
|
||||
I imagine that other systems will catch up. In the meantime, it
|
||||
doesn't harm to make sure that the data exists to be used later. */
|
||||
#if defined(HAVE_LD_EH_FRAME_HDR)
|
||||
-#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
|
||||
+#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} %{!r:--build-id} "
|
||||
#endif
|
||||
|
||||
/* A C statement (sans semicolon) to output to the stdio stream STREAM
|
||||
--- gcc/config/ia64/linux.h.~1~
|
||||
+++ gcc/config/ia64/linux.h
|
||||
@@ -56,7 +56,7 @@ do { \
|
113
gcc44-hack.patch
Normal file
113
gcc44-hack.patch
Normal file
@ -0,0 +1,113 @@
|
||||
--- libada/Makefile.in.jj 2009-01-14 12:07:35.000000000 +0100
|
||||
+++ libada/Makefile.in 2009-01-15 14:25:33.000000000 +0100
|
||||
@@ -66,17 +66,39 @@ target_noncanonical:=@target_noncanonica
|
||||
version := $(shell cat $(srcdir)/../gcc/BASE-VER)
|
||||
libsubdir := $(libdir)/gcc/$(target_noncanonical)/$(version)$(MULTISUBDIR)
|
||||
|
||||
+DEFAULTMULTIFLAGS :=
|
||||
+ifeq ($(MULTISUBDIR),)
|
||||
+targ:=$(subst -, ,$(target))
|
||||
+arch:=$(word 1,$(targ))
|
||||
+ifeq ($(words $(targ)),2)
|
||||
+osys:=$(word 2,$(targ))
|
||||
+else
|
||||
+osys:=$(word 3,$(targ))
|
||||
+endif
|
||||
+ifeq ($(strip $(filter-out i%86 x86_64 powerpc% ppc% s390% sparc% linux%, $(arch) $(osys))),)
|
||||
+ifeq ($(shell $(CC) $(CFLAGS) -print-multi-os-directory),../lib64)
|
||||
+DEFAULTMULTIFLAGS := -m64
|
||||
+else
|
||||
+ifeq ($(strip $(filter-out s390%, $(arch))),)
|
||||
+DEFAULTMULTIFLAGS := -m31
|
||||
+else
|
||||
+DEFAULTMULTIFLAGS := -m32
|
||||
+endif
|
||||
+endif
|
||||
+endif
|
||||
+endif
|
||||
+
|
||||
# exeext should not be used because it's the *host* exeext. We're building
|
||||
# a *target* library, aren't we?!? Likewise for CC. Still, provide bogus
|
||||
# definitions just in case something slips through the safety net provided
|
||||
# by recursive make invocations in gcc/ada/Makefile.in
|
||||
LIBADA_FLAGS_TO_PASS = \
|
||||
"MAKEOVERRIDES=" \
|
||||
- "LDFLAGS=$(LDFLAGS)" \
|
||||
+ "LDFLAGS=$(strip $(LDFLAGS) $(DEFAULTMULTIFLAGS))" \
|
||||
"LN_S=$(LN_S)" \
|
||||
"SHELL=$(SHELL)" \
|
||||
- "GNATLIBFLAGS=$(GNATLIBFLAGS) $(MULTIFLAGS)" \
|
||||
- "GNATLIBCFLAGS=$(GNATLIBCFLAGS) $(MULTIFLAGS)" \
|
||||
+ "GNATLIBFLAGS=$(strip $(GNATLIBFLAGS) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS))" \
|
||||
+ "GNATLIBCFLAGS=$(strip $(GNATLIBCFLAGS) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS))" \
|
||||
"TARGET_LIBGCC2_CFLAGS=$(TARGET_LIBGCC2_CFLAGS)" \
|
||||
"THREAD_KIND=$(THREAD_KIND)" \
|
||||
"TRACE=$(TRACE)" \
|
||||
@@ -87,7 +109,7 @@ LIBADA_FLAGS_TO_PASS = \
|
||||
"exeext=.exeext.should.not.be.used " \
|
||||
'CC=the.host.compiler.should.not.be.needed' \
|
||||
"GCC_FOR_TARGET=$(CC)" \
|
||||
- "CFLAGS=$(CFLAGS) $(WARN_CFLAGS)"
|
||||
+ "CFLAGS=$(strip $(CFLAGS) $(DEFAULTMULTIFLAGS) $(WARN_CFLAGS))"
|
||||
|
||||
# Rules to build gnatlib.
|
||||
.PHONY: gnatlib gnatlib-plain gnatlib-sjlj gnatlib-zcx gnatlib-shared oscons
|
||||
--- libjava/classpath/native/plugin/gcjwebplugin.cc.jj 2009-01-14 12:08:34.000000000 +0100
|
||||
+++ libjava/classpath/native/plugin/gcjwebplugin.cc 2009-01-15 21:20:17.000000000 +0100
|
||||
@@ -45,7 +45,7 @@ exception statement from your version. *
|
||||
|
||||
// Netscape plugin API includes.
|
||||
#include <npapi.h>
|
||||
-#include <npupp.h>
|
||||
+#include <npfunctions.h>
|
||||
|
||||
// GLib includes.
|
||||
#include <glib.h>
|
||||
@@ -827,7 +827,7 @@ GCJ_URLNotify (NPP instance, const char*
|
||||
PLUGIN_DEBUG ("GCJ_URLNotify return");
|
||||
}
|
||||
|
||||
-jref
|
||||
+void *
|
||||
GCJ_GetJavaClass (void)
|
||||
{
|
||||
PLUGIN_DEBUG ("GCJ_GetJavaClass");
|
||||
@@ -1669,17 +1669,17 @@ NP_Initialize (NPNetscapeFuncs* browserT
|
||||
// Return to the browser the plugin functions that we implement.
|
||||
pluginTable->version = (NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR;
|
||||
pluginTable->size = sizeof (NPPluginFuncs);
|
||||
- pluginTable->newp = NewNPP_NewProc (GCJ_New);
|
||||
- pluginTable->destroy = NewNPP_DestroyProc (GCJ_Destroy);
|
||||
- pluginTable->setwindow = NewNPP_SetWindowProc (GCJ_SetWindow);
|
||||
- pluginTable->newstream = NewNPP_NewStreamProc (GCJ_NewStream);
|
||||
- pluginTable->destroystream = NewNPP_DestroyStreamProc (GCJ_DestroyStream);
|
||||
- pluginTable->asfile = NewNPP_StreamAsFileProc (GCJ_StreamAsFile);
|
||||
- pluginTable->writeready = NewNPP_WriteReadyProc (GCJ_WriteReady);
|
||||
- pluginTable->write = NewNPP_WriteProc (GCJ_Write);
|
||||
- pluginTable->print = NewNPP_PrintProc (GCJ_Print);
|
||||
- pluginTable->urlnotify = NewNPP_URLNotifyProc (GCJ_URLNotify);
|
||||
- pluginTable->getvalue = NewNPP_GetValueProc (GCJ_GetValue);
|
||||
+ pluginTable->newp = (NPP_NewProcPtr) (GCJ_New);
|
||||
+ pluginTable->destroy = (NPP_DestroyProcPtr) (GCJ_Destroy);
|
||||
+ pluginTable->setwindow = (NPP_SetWindowProcPtr) (GCJ_SetWindow);
|
||||
+ pluginTable->newstream = (NPP_NewStreamProcPtr) (GCJ_NewStream);
|
||||
+ pluginTable->destroystream = (NPP_DestroyStreamProcPtr) (GCJ_DestroyStream);
|
||||
+ pluginTable->asfile = (NPP_StreamAsFileProcPtr) (GCJ_StreamAsFile);
|
||||
+ pluginTable->writeready = (NPP_WriteReadyProcPtr) (GCJ_WriteReady);
|
||||
+ pluginTable->write = (NPP_WriteProcPtr) (GCJ_Write);
|
||||
+ pluginTable->print = (NPP_PrintProcPtr) (GCJ_Print);
|
||||
+ pluginTable->urlnotify = (NPP_URLNotifyProcPtr) (GCJ_URLNotify);
|
||||
+ pluginTable->getvalue = (NPP_GetValueProcPtr) (GCJ_GetValue);
|
||||
|
||||
initialized = true;
|
||||
|
||||
--- gcc/ada/make.adb 2008-11-07 23:00:32.000000000 +0100
|
||||
+++ gcc/ada/make.adb 2009-01-16 17:55:02.000000000 +0100
|
||||
@@ -8039,6 +8039,7 @@ package body Make is
|
||||
or else Argv (2 .. Argv'Last) = "pg"
|
||||
or else (Argv (2) = 'm' and then Argv'Last > 2)
|
||||
or else (Argv (2) = 'f' and then Argv'Last > 2)
|
||||
+ or else (Argv'Last >= 8 and then Argv (2 .. 8) = "-param=")
|
||||
then
|
||||
Add_Switch (Argv, Compiler, And_Save => And_Save);
|
||||
Add_Switch (Argv, Linker, And_Save => And_Save);
|
@ -35,8 +35,8 @@ hardware isn't supported because NPTL doesn't support it anyway.
|
||||
#include <new>
|
||||
#include <ext/atomicity.h>
|
||||
#include <ext/concurrence.h>
|
||||
+#if defined __i386__ && !defined _GLIBCXX_ATOMIC_BUILTINS
|
||||
+# define _GLIBCXX_ATOMIC_BUILTINS 1
|
||||
+#if defined __i386__ && !defined _GLIBCXX_ATOMIC_BUILTINS_4
|
||||
+# define _GLIBCXX_ATOMIC_BUILTINS_4 1
|
||||
+# define __sync_val_compare_and_swap(a, b, c) \
|
||||
+ ({ \
|
||||
+ typedef char sltast[sizeof (*a) == sizeof (int) ? 1 : -1]; \
|
||||
@ -57,5 +57,5 @@ hardware isn't supported because NPTL doesn't support it anyway.
|
||||
+ })
|
||||
+#endif
|
||||
#if defined(__GTHREADS) && defined(__GTHREAD_HAS_COND) \
|
||||
&& defined(_GLIBCXX_ATOMIC_BUILTINS) && defined(_GLIBCXX_HAVE_LINUX_FUTEX)
|
||||
&& defined(_GLIBCXX_ATOMIC_BUILTINS_4) && defined(_GLIBCXX_HAVE_LINUX_FUTEX)
|
||||
# include <climits>
|
@ -16,8 +16,8 @@
|
||||
|
||||
--- libjava/configure.jj 2007-12-07 17:55:50.000000000 +0100
|
||||
+++ libjava/configure 2007-12-07 18:39:58.000000000 +0100
|
||||
@@ -1018,6 +1018,8 @@ Optional Features:
|
||||
--enable-gconf-peer compile GConf native peers for util.preferences
|
||||
@@ -1021,6 +1021,8 @@ Optional Features:
|
||||
default=yes
|
||||
--enable-java-maintainer-mode
|
||||
allow rebuilding of .class and .h files
|
||||
+ --enable-libjava-multilib
|
||||
@ -25,7 +25,7 @@
|
||||
--disable-dependency-tracking speeds up one-time build
|
||||
--enable-dependency-tracking do not reject slow dependency extractors
|
||||
--enable-maintainer-mode enable make rules and dependencies not useful
|
||||
@@ -1848,6 +1850,16 @@ else
|
||||
@@ -1973,6 +1975,16 @@ else
|
||||
fi
|
||||
|
||||
|
@ -12,9 +12,9 @@
|
||||
|
||||
--- gcc/tree-inline.c.jj 2007-11-06 09:29:04.000000000 +0100
|
||||
+++ gcc/tree-inline.c 2007-11-06 16:19:12.000000000 +0100
|
||||
@@ -2582,6 +2582,12 @@ expand_call_inline (basic_block bb, tree
|
||||
if (!cgraph_inline_p (cg_edge, &reason))
|
||||
{
|
||||
@@ -3157,6 +3157,12 @@ expand_call_inline (basic_block bb, gimp
|
||||
goto egress;
|
||||
|
||||
if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn))
|
||||
+ /* For extern inline functions that get redefined we always
|
||||
+ silently ignored alway_inline flag. Better behaviour would
|
||||
@ -23,7 +23,7 @@
|
||||
+ the body. */
|
||||
+ && !cg_edge->callee->local.redefined_extern_inline
|
||||
/* Avoid warnings during early inline pass. */
|
||||
&& (!flag_unit_at_a_time || cgraph_global_info_ready))
|
||||
&& cgraph_global_info_ready)
|
||||
{
|
||||
--- gcc/testsuite/gcc.dg/pr33763.c.jj 2007-11-06 16:19:12.000000000 +0100
|
||||
+++ gcc/testsuite/gcc.dg/pr33763.c 2007-11-06 16:19:12.000000000 +0100
|
@ -6,9 +6,9 @@
|
||||
|
||||
--- libjava/classpath/doc/Makefile.am.jj 2007-12-07 17:55:00.000000000 +0100
|
||||
+++ libjava/classpath/doc/Makefile.am 2007-12-07 18:55:28.000000000 +0100
|
||||
@@ -30,7 +30,7 @@ TOOLS_MANFILES = \
|
||||
gserialver.1 \
|
||||
gtnameserv.1
|
||||
@@ -31,7 +31,7 @@ TOOLS_MANFILES = \
|
||||
gtnameserv.1 \
|
||||
gjdoc.1
|
||||
|
||||
-POD2MAN = pod2man --center="GNU" --release="$(VERSION)"
|
||||
+POD2MAN = pod2man --center="GNU" --release="$(VERSION)" --date="$(shell ls --time-style=+%F -l $(srcdir)/cp-tools.texinfo | awk '{print $$6}')"
|
||||
@ -17,9 +17,9 @@
|
||||
|
||||
--- libjava/classpath/doc/Makefile.in.jj 2007-12-07 17:55:00.000000000 +0100
|
||||
+++ libjava/classpath/doc/Makefile.in 2007-12-07 18:55:43.000000000 +0100
|
||||
@@ -357,7 +357,7 @@ TOOLS_MANFILES = \
|
||||
gserialver.1 \
|
||||
gtnameserv.1
|
||||
@@ -382,7 +382,7 @@ TOOLS_MANFILES = \
|
||||
gtnameserv.1 \
|
||||
gjdoc.1
|
||||
|
||||
-POD2MAN = pod2man --center="GNU" --release="$(VERSION)"
|
||||
+POD2MAN = pod2man --center="GNU" --release="$(VERSION)" --date="$(shell ls --time-style=+%F -l $(srcdir)/cp-tools.texinfo | awk '{print $$6}')"
|
@ -1,21 +1,21 @@
|
||||
--- gcc/config.gcc.jj 2008-04-24 15:42:46.000000000 -0500
|
||||
+++ gcc/config.gcc 2008-04-24 15:44:51.000000000 -0500
|
||||
@@ -2343,7 +2343,7 @@ sparc-*-elf*)
|
||||
@@ -2175,7 +2175,7 @@ sparc-*-elf*)
|
||||
tmake_file="sparc/t-elf sparc/t-crtfm"
|
||||
extra_parts="crti.o crtn.o crtbegin.o crtend.o"
|
||||
use_fixproto=yes
|
||||
;;
|
||||
-sparc-*-linux*) # SPARC's running GNU/Linux, libc6
|
||||
+sparc-*-linux* | sparcv9*-*-linux*) # SPARC's running GNU/Linux, libc6
|
||||
tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/linux.h"
|
||||
tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h linux.h"
|
||||
extra_options="${extra_options} sparc/long-double-switch.opt"
|
||||
tmake_file="${tmake_file} sparc/t-linux sparc/t-crtfm"
|
||||
@@ -2477,7 +2477,7 @@ sparc64-*-freebsd*|ultrasparc-*-freebsd*
|
||||
tmake_file="${tmake_file} sparc/t-linux"
|
||||
@@ -2287,7 +2287,7 @@ sparc64-*-freebsd*|ultrasparc-*-freebsd*
|
||||
*) echo "$with_cpu not supported for freebsd target"; exit 1 ;;
|
||||
esac
|
||||
need_64bit_hwint=yes
|
||||
;;
|
||||
-sparc64-*-linux*) # 64-bit SPARC's running GNU/Linux
|
||||
+sparc64*-*-linux*) # 64-bit SPARC's running GNU/Linux
|
||||
tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/linux64.h"
|
||||
tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h linux.h sparc/linux64.h"
|
||||
extra_options="${extra_options} sparc/long-double-switch.opt"
|
||||
tmake_file="${tmake_file} sparc/t-linux sparc/t-linux64 sparc/t-crtfm"
|
||||
--- libgcc/config.host.jj 2008-04-24 15:46:19.000000000 -0500
|
1
import.log
Normal file
1
import.log
Normal file
@ -0,0 +1 @@
|
||||
gcc-4_4_0-0_3:HEAD:gcc-4.4.0-0.3.src.rpm:1232130841
|
Loading…
Reference in New Issue
Block a user