core/gcc to 7.2.1-2

This commit is contained in:
Kevin Mihelich 2017-12-07 13:45:33 +00:00
parent 8ca5a4d6d2
commit bc1b6c3ce5
3 changed files with 9 additions and 221 deletions

View file

@ -17,30 +17,26 @@
noautobuild=1
pkgname=(gcc gcc-libs gcc-fortran gcc-objc gcc-go)
pkgver=7.2.0
pkgver=7.2.1
_pkgver=${pkgver:0:1}
_islver=0.18
pkgrel=3
pkgrel=2
pkgdesc='The GNU Compiler Collection'
arch=(i686 x86_64)
arch=(x86_64)
license=(GPL LGPL FDL custom)
url='http://gcc.gnu.org'
makedepends=(binutils libmpc doxygen git)
checkdepends=(dejagnu inetutils)
options=(!emptydirs !distcc)
_commit=1bd23ca8c30f4827c4bea23deedf7ca33a86ffb5
_commit=bce1ab0478f96724828df51ccfd43197d917c572
source=(https://github.com/gcc-mirror/gcc/archive/${_commit}.tar.gz
http://isl.gforge.inria.fr/isl-${_islver}.tar.bz2
c89 c99
Revert-eeb6872bf.patch
PR82155.patch
0001-ARMv5-disable-LDRD-STRD.patch)
md5sums=('d8a736c9fb58e05c9404be02c65a9e4c'
md5sums=('63bfa5606932a8c84e5eb8883a9eba4f'
'11436d6b205e516635b666090b94ab32'
'3d333df77302ed89e06a4a8539943b7d'
'da96f545b863e57c6ab2598c1ea9a740'
'e4c9c8b498b04c0f51d219d025ca8407'
'e77419f7d25aad0980c765012dc8c417'
'a5165d78c473b487637d293a49e01740')
_libdir=usr/lib/gcc/$CHOST/$pkgver
@ -64,9 +60,6 @@ prepare() {
# hack! - some configure tests for header files using "$CPP $CPPFLAGS"
sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" {libiberty,gcc}/configure
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80717
git apply ../Revert-eeb6872bf.patch
# ALARM: Specify build host types, triplet patch
[[ $CARCH == "arm" ]] && CONFIGFLAG="--host=armv5tel-unknown-linux-gnueabi --build=armv5tel-unknown-linux-gnueabi --with-arch=armv5te --with-float=soft"
[[ $CARCH == "armv6h" ]] && CONFIGFLAG="--host=armv6l-unknown-linux-gnueabihf --build=armv6l-unknown-linux-gnueabihf --with-arch=armv6 --with-float=hard --with-fpu=vfp"
@ -75,9 +68,6 @@ prepare() {
mkdir -p "$srcdir/gcc-build"
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82155
patch -p1 -i ../PR82155.patch
# Disable LDRD/STRD on ARMv5 (64-bit alignment issues)
patch -p1 -i ../0001-ARMv5-disable-LDRD-STRD.patch
}
@ -141,8 +131,8 @@ check() {
package_gcc-libs() {
pkgdesc='Runtime libraries shipped by GCC'
groups=('base')
depends=('glibc>=2.25')
groups=(base)
depends=('glibc>=2.26')
options+=(!strip)
cd gcc-build
@ -168,7 +158,7 @@ package_gcc-libs() {
make -C $CHOST/libobjc DESTDIR="$pkgdir" install-libs
make -C $CHOST/libstdc++-v3/po DESTDIR="$pkgdir" install
#make -C $CHOST/libmpx DESTDIR="$pkgdir" install
#rm "$pkgdir"/usr/lib/libmpx.spec
#rm -f "$pkgdir"/usr/lib/libmpx.spec
for lib in libgomp \
libitm \
@ -217,8 +207,7 @@ package_gcc() {
ln -s /usr/lib/gcc/$CHOST/$pkgver/liblto_plugin.so \
"$pkgdir/usr/lib/bfd-plugins/"
make -C $CHOST/libgomp DESTDIR="$pkgdir" install-nodist_toolexeclibHEADERS \
install-nodist_libsubincludeHEADERS
make -C $CHOST/libgomp DESTDIR="$pkgdir" install-nodist_{libsubinclude,toolexeclib}HEADERS
make -C $CHOST/libitm DESTDIR="$pkgdir" install-nodist_toolexeclibHEADERS
make -C $CHOST/libquadmath DESTDIR="$pkgdir" install-nodist_libsubincludeHEADERS
make -C $CHOST/libsanitizer DESTDIR="$pkgdir" install-nodist_{saninclude,toolexeclib}HEADERS

View file

@ -1,119 +0,0 @@
From: Pierre-Marie de Rodat <derodat at adacore dot com>
To: gcc-patches at gcc dot gnu dot org
Cc: Pierre-Marie de Rodat <derodat at adacore dot com>
Subject: [PATCH] [PR82155] Fix crash in dwarf2out_abstract_function
Date: Tue, 12 Sep 2017 08:00:03 +0200
Message-Id: <20170912060003.32378-1-derodat@adacore.com>
X-IsSubscribed: yes
Hello,
This patch is an attempt to fix the crash reported in PR82155.
When generating a C++ class method for a class that is itself nested in
a class method, dwarf2out_early_global_decl currently leaves the
existing context DIE as it is if it already exists. However, it is
possible that this call happens at a point where this context DIE is
just a declaration that is itself not located in its own context.
>From there, if dwarf2out_early_global_decl is not called on any of the
FUNCTION_DECL in the context chain, DIEs will be left badly scoped and
some (such as the nested method) will be removed by the type pruning
machinery. As a consequence, dwarf2out_abstract_function will will
crash when called on the corresponding DECL because it asserts that the
DECL has a DIE.
This patch fixes this crash making dwarf2out_early_global_decl process
context DIEs the same way we process abstract origins for FUNCTION_DECL:
if the corresponding DIE exists but is only a declaration, call
dwarf2out_decl anyway on it so that it is turned into a more complete
DIE and so that it is relocated in the proper context.
Bootstrapped and regtested on x86_64-linux. The crash this addresses is
present both on trunk and on the gcc-7 branch: I suggest we commit this
patch on both branches. Ok to commit? Thank you in advance!
gcc/
PR debug/82155
* dwarf2out.c (dwarf2out_early_global_decl): Call dwarf2out_decl
on the FUNCTION_DECL function context if it has a DIE that is a
declaration.
gcc/testsuite/
* g++.dg/pr82155.C: New testcase.
---
gcc/dwarf2out.c | 10 ++++++++--
gcc/testsuite/g++.dg/pr82155.C | 36 ++++++++++++++++++++++++++++++++++++
2 files changed, 44 insertions(+), 2 deletions(-)
create mode 100644 gcc/testsuite/g++.dg/pr82155.C
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 00d6d951ba3..4cfc9c186af 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -25500,10 +25500,16 @@ dwarf2out_early_global_decl (tree decl)
so that all nested DIEs are generated at the proper scope in the
first shot. */
tree context = decl_function_context (decl);
- if (context != NULL && lookup_decl_die (context) == NULL)
+ if (context != NULL)
{
+ dw_die_ref context_die = lookup_decl_die (context);
current_function_decl = context;
- dwarf2out_decl (context);
+
+ /* Avoid emitting DIEs multiple times, but still process CONTEXT
+ enough so that it lands in its own context. This avoids type
+ pruning issues later on. */
+ if (context_die == NULL || is_declaration_die (context_die))
+ dwarf2out_decl (context);
}
/* Emit an abstract origin of a function first. This happens
diff --git a/gcc/testsuite/g++.dg/pr82155.C b/gcc/testsuite/g++.dg/pr82155.C
new file mode 100644
index 00000000000..75d9b615f39
--- /dev/null
+++ b/gcc/testsuite/g++.dg/pr82155.C
@@ -0,0 +1,36 @@
+/* { dg-do compile { target c++11 } } */
+/* { dg-options "-g -O2" } */
+
+template <typename a> struct b { a c; };
+template <typename d> struct e { d *operator->(); };
+template <typename d> class h {
+public:
+ typedef e<d> ag;
+};
+class i {
+protected:
+ i(int);
+};
+class j {
+ virtual void k(int) = 0;
+
+public:
+ int f;
+ void l() { k(f); }
+};
+struct m : i {
+ int cn;
+ m() : i(cn) {
+ struct n : j {
+ n() {}
+ void k(int) {}
+ };
+ }
+};
+struct o {
+ o() {
+ for (h<b<b<j *>>>::ag g;;)
+ g->c.c->l();
+ }
+};
+void fn1() { o(); }
--
2.14.1

View file

@ -1,82 +0,0 @@
commit 43d83a70267a9e5c456d28de8e7348820446b712
Author: Bartłomiej Piotrowski <bpiotrowski@archlinux.org>
Date: Tue May 16 07:50:42 2017 +0200
Revert "Prevent LTO wrappers to process a recursive execution"
This reverts commit eeb6872bfdfd1e71b27de6f62a5f5c08a2efb015.
diff --git a/gcc/file-find.c b/gcc/file-find.c
index b072a4993d76..b5a1fe8494e8 100644
--- a/gcc/file-find.c
+++ b/gcc/file-find.c
@@ -208,38 +208,3 @@ prefix_from_string (const char *p, struct path_prefix *pprefix)
}
free (nstore);
}
-
-void
-remove_prefix (const char *prefix, struct path_prefix *pprefix)
-{
- struct prefix_list *remove, **prev, **remove_prev = NULL;
- int max_len = 0;
-
- if (pprefix->plist)
- {
- prev = &pprefix->plist;
- for (struct prefix_list *pl = pprefix->plist; pl->next; pl = pl->next)
- {
- if (strcmp (prefix, pl->prefix) == 0)
- {
- remove = pl;
- remove_prev = prev;
- continue;
- }
-
- int l = strlen (pl->prefix);
- if (l > max_len)
- max_len = l;
-
- prev = &pl;
- }
-
- if (remove_prev)
- {
- *remove_prev = remove->next;
- free (remove);
- }
-
- pprefix->max_len = max_len;
- }
-}
diff --git a/gcc/file-find.h b/gcc/file-find.h
index 8f49a3af273e..407feba26e74 100644
--- a/gcc/file-find.h
+++ b/gcc/file-find.h
@@ -41,7 +41,6 @@ extern void find_file_set_debug (bool);
extern char *find_a_file (struct path_prefix *, const char *, int);
extern void add_prefix (struct path_prefix *, const char *);
extern void add_prefix_begin (struct path_prefix *, const char *);
-extern void remove_prefix (const char *prefix, struct path_prefix *);
extern void prefix_from_env (const char *, struct path_prefix *);
extern void prefix_from_string (const char *, struct path_prefix *);
diff --git a/gcc/gcc-ar.c b/gcc/gcc-ar.c
index 78d2fc1ad306..d5d80e042e5a 100644
--- a/gcc/gcc-ar.c
+++ b/gcc/gcc-ar.c
@@ -194,14 +194,6 @@ main (int ac, char **av)
#ifdef CROSS_DIRECTORY_STRUCTURE
real_exe_name = concat (target_machine, "-", PERSONALITY, NULL);
#endif
- /* Do not search original location in the same folder. */
- char *exe_folder = lrealpath (av[0]);
- exe_folder[strlen (exe_folder) - strlen (lbasename (exe_folder))] = '\0';
- char *location = concat (exe_folder, PERSONALITY, NULL);
-
- if (access (location, X_OK) == 0)
- remove_prefix (exe_folder, &path);
-
exe_name = find_a_file (&path, real_exe_name, X_OK);
if (!exe_name)
{