summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xlib/spack/env/cc8
-rw-r--r--lib/spack/spack/test/cc.py14
2 files changed, 22 insertions, 0 deletions
diff --git a/lib/spack/env/cc b/lib/spack/env/cc
index 5dd315c225..752bcde54a 100755
--- a/lib/spack/env/cc
+++ b/lib/spack/env/cc
@@ -311,6 +311,14 @@ while [ -n "$1" ]; do
fi
;;
-l*)
+ # -loopopt=0 is passed to the linker erroneously in
+ # autoconf <= 2.69. Filter it out.
+ # TODO: generalize filtering of args with an env var, so that
+ # TODO: we do not have to special case this here.
+ if [ "$mode" = "ld" ] && [ "$1" != "${1#-loopopt}" ]; then
+ shift
+ continue
+ fi
arg="${1#-l}"
if [ -z "$arg" ]; then shift; arg="$1"; fi
other_args+=("-l$arg")
diff --git a/lib/spack/spack/test/cc.py b/lib/spack/spack/test/cc.py
index 59b2f8e4cb..fa61a5e9e6 100644
--- a/lib/spack/spack/test/cc.py
+++ b/lib/spack/spack/test/cc.py
@@ -622,3 +622,17 @@ def test_filter_enable_new_dtags(wrapper_flags):
result = cc(*(test_args + ['-Wl,--enable-new-dtags']), output=str)
result = result.strip().split('\n')
assert '-Wl,--enable-new-dtags' not in result
+
+
+@pytest.mark.regression('22643')
+def test_linker_strips_loopopt(wrapper_flags):
+ with set_env(SPACK_TEST_COMMAND='dump-args'):
+ # ensure that -loopopt=0 is not present in ld mode
+ result = ld(*(test_args + ["-loopopt=0"]), output=str)
+ result = result.strip().split('\n')
+ assert '-loopopt=0' not in result
+
+ # ensure that -loopopt=0 is present in compile mode
+ result = cc(*(test_args + ["-loopopt=0"]), output=str)
+ result = result.strip().split('\n')
+ assert '-loopopt=0' in result