mirror of
https://git.yoctoproject.org/poky
synced 2026-04-28 06:32:34 +02:00
gcc-7.3: Backport fixes for std::pair high memory usage
C++ applications that contain a specfic use of std::pair with tempates cause the build to require many gigabytes of RAM to build. This is a fix that was applied to the upstream GCC 7 branch. Change-Id: I213f96d1d6332e2dce5765482ff3413f1abd7ff8 (From OE-Core rev: 51a09ba2729a840a9f2f87b68c7f50a3e6ac0d04) Signed-off-by: Joel Stanley <joel@jms.id.au> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
b1585dde96
commit
666e078352
@@ -80,6 +80,7 @@ BACKPORTS = "\
|
||||
file://0001-Fix-internal-compiler-error-in-testcase.patch \
|
||||
file://0001-PR-rtl-optimization-83030.patch \
|
||||
file://0001-Fix-ppc64le-build-Partial-backport-r256656.patch \
|
||||
file://0001-PR-c-80290-memory-hog-with-std-pair.patch \
|
||||
"
|
||||
|
||||
SRC_URI[md5sum] = "be2da21680f27624f3a87055c4ba5af2"
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
From 8c014bceeca6a558519e86b16a8142accc41e94f Mon Sep 17 00:00:00 2001
|
||||
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
|
||||
Date: Thu, 28 Jun 2018 00:25:21 +0000
|
||||
Subject: [PATCH] PR c++/80290 - memory-hog with std::pair.
|
||||
|
||||
* pt.c (type_unification_real): Skip non-dependent conversion
|
||||
check for a nested list argument.
|
||||
(braced_init_depth): New.
|
||||
|
||||
Upstream-Status: Backport
|
||||
Signed-off-by: Joel Stanley <joel@jms.id.au>
|
||||
---
|
||||
gcc/cp/pt.c | 22 ++++++++++++++++++++++
|
||||
1 file changed, 22 insertions(+)
|
||||
|
||||
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
|
||||
index 79cfd0129226..71077a3b0498 100644
|
||||
--- a/gcc/cp/pt.c
|
||||
+++ b/gcc/cp/pt.c
|
||||
@@ -19242,6 +19242,24 @@ try_array_deduction (tree tparms, tree targs, tree parm)
|
||||
/*nondeduced*/false, array_deduction_r);
|
||||
}
|
||||
|
||||
+/* Returns how many levels of { } INIT contains. */
|
||||
+
|
||||
+static int
|
||||
+braced_init_depth (tree init)
|
||||
+{
|
||||
+ if (!init || !BRACE_ENCLOSED_INITIALIZER_P (init))
|
||||
+ return 0;
|
||||
+ unsigned i; tree val;
|
||||
+ unsigned max = 0;
|
||||
+ FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (init), i, val)
|
||||
+ {
|
||||
+ unsigned elt_d = braced_init_depth (val);
|
||||
+ if (elt_d > max)
|
||||
+ max = elt_d;
|
||||
+ }
|
||||
+ return max + 1;
|
||||
+}
|
||||
+
|
||||
/* Most parms like fn_type_unification.
|
||||
|
||||
If SUBR is 1, we're being called recursively (to unify the
|
||||
@@ -19478,6 +19496,10 @@ type_unification_real (tree tparms,
|
||||
|
||||
if (uses_template_parms (parm))
|
||||
continue;
|
||||
+ /* Workaround for c++/80290: avoid combinatorial explosion on
|
||||
+ deeply nested braced init-lists. */
|
||||
+ if (braced_init_depth (arg) > 2)
|
||||
+ continue;
|
||||
if (check_non_deducible_conversion (parm, arg, strict, flags,
|
||||
explain_p))
|
||||
return 1;
|
||||
--
|
||||
2.17.1
|
||||
|
||||
Reference in New Issue
Block a user