4.4.0-0.3

This commit is contained in:
Jakub Jelinek 2009-01-16 18:34:38 +00:00
parent d69d1f8218
commit 7c07471093
37 changed files with 344 additions and 4497 deletions

View File

@ -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

View 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(&current_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);

View File

@ -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

File diff suppressed because it is too large Load Diff

View File

@ -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"

View File

@ -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"

View File

@ -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;
}

View File

@ -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;

View File

@ -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;
+}

View File

@ -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

View File

@ -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 *-*-* } }
}

View File

@ -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);
+}

View File

@ -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);

View File

@ -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" } } */

View File

@ -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;
+}

View File

@ -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 ("");
+}

View File

@ -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;
+}

View File

@ -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);

View File

@ -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;
+}

View File

@ -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
View 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);

View File

@ -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>

View File

@ -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

View File

@ -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

View File

@ -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}')"

View File

@ -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
View File

@ -0,0 +1 @@
gcc-4_4_0-0_3:HEAD:gcc-4.4.0-0.3.src.rpm:1232130841

View File

@ -1,2 +1,2 @@
eb9ce8c6f929283bc91c93a6087e8ced gcc-4.3.2-20081105.tar.bz2
92a70f9e56223b653bce0f58f90cf950 fastjar-0.95.tar.gz
2659f09c2e43ef8b7d4406321753f1b2 fastjar-0.97.tar.gz
0fafcb0d23d420c978ab253702094ada gcc-4.4.0-20090115.tar.bz2