commit:     5e28abe80540409b3aede4e8a87acf7c74565b03
Author:     Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
AuthorDate: Sun Feb  3 23:37:02 2019 +0000
Commit:     Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
CommitDate: Sun Feb  3 23:39:40 2019 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=5e28abe8

toolchain.eclass: never pass --enable-libsanitizer to ./configure

gcc treats --enable-libsanitizer as an override on top of
autodetection. It it never what we want. Happens to break
at least mips cross-compilers and likely many more minor
targets.

Bug: https://gcc.gnu.org/PR85663
Signed-off-by: Sergei Trofimovich <slyfox <AT> gentoo.org>

 eclass/toolchain.eclass | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/eclass/toolchain.eclass b/eclass/toolchain.eclass
index ea1e1f3c5b6..7e4f8774f3c 100644
--- a/eclass/toolchain.eclass
+++ b/eclass/toolchain.eclass
@@ -1299,7 +1299,8 @@ toolchain_src_configure() {
        fi
 
        if tc_version_is_at_least 4.8 && in_iuse sanitize ; then
-               confgcc+=( $(use_enable sanitize libsanitizer) )
+               # See Note [implicitly enabled flags]
+               confgcc+=( $(usex sanitize '' --disable-libsanitizer) )
        fi
 
        if tc_version_is_at_least 6.0 && in_iuse pie ; then
@@ -2494,3 +2495,19 @@ toolchain_death_notice() {
                popd >/dev/null
        fi
 }
+
+# Note [implicitly enabled flags]
+# -------------------------------
+# Usually configure-based packages handle explicit feature requests
+# like
+#     ./configure --enable-foo
+# as explicit request to check for suppor of 'foo' and bail out at
+# configure time.
+#
+# GCC does not follow this pattern an instead overrides autodetection
+# of the feature and enables it unconditionally.
+# See https://gcc.gnu.org/PR85663
+#
+# Thus safer way to enable/disable the feature is to rely on implicit
+# enabled-by-default state:
+#    econf $(usex foo '' --disable-foo)

Reply via email to