summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMassimiliano Culpo <massimiliano.culpo@gmail.com>2020-03-07 13:58:33 +0100
committerTodd Gamblin <tgamblin@llnl.gov>2020-03-20 11:42:22 -0700
commit901bed48ec2d3e03d45014fdbfc936305897d2e2 (patch)
treefc41d095fbf2cd432fa378490ed3b6d1303cc220 /lib
parentcc8d9eee8ec7fe60235b00d52170f717c703dc0b (diff)
downloadspack-901bed48ec2d3e03d45014fdbfc936305897d2e2.tar.gz
spack-901bed48ec2d3e03d45014fdbfc936305897d2e2.tar.bz2
spack-901bed48ec2d3e03d45014fdbfc936305897d2e2.tar.xz
spack-901bed48ec2d3e03d45014fdbfc936305897d2e2.zip
ArchSpec: fix semantics of satisfies when not concrete and strict is true (#15319)
Diffstat (limited to 'lib')
-rw-r--r--lib/spack/spack/spec.py4
-rw-r--r--lib/spack/spack/test/architecture.py13
2 files changed, 17 insertions, 0 deletions
diff --git a/lib/spack/spack/spec.py b/lib/spack/spack/spec.py
index 1493f0c973..718b5ef14d 100644
--- a/lib/spack/spack/spec.py
+++ b/lib/spack/spack/spec.py
@@ -369,6 +369,10 @@ class ArchSpec(object):
if not need_to_check:
return True
+ # self is not concrete, but other_target is there and strict=True
+ if self.target is None:
+ return False
+
for target_range in str(other_target).split(','):
t_min, sep, t_max = target_range.partition(':')
diff --git a/lib/spack/spack/test/architecture.py b/lib/spack/spack/test/architecture.py
index 1f5ff28900..552bc324bf 100644
--- a/lib/spack/spack/test/architecture.py
+++ b/lib/spack/spack/test/architecture.py
@@ -214,3 +214,16 @@ def test_optimization_flags_with_custom_versions(
)
opt_flags = target.optimization_flags(compiler)
assert opt_flags == expected_flags
+
+
+@pytest.mark.regression('15306')
+@pytest.mark.parametrize('architecture_tuple,constraint_tuple', [
+ (('linux', 'ubuntu18.04', None), ('linux', None, 'x86_64')),
+ (('linux', 'ubuntu18.04', None), ('linux', None, 'x86_64:')),
+])
+def test_satisfy_strict_constraint_when_not_concrete(
+ architecture_tuple, constraint_tuple
+):
+ architecture = spack.spec.ArchSpec(architecture_tuple)
+ constraint = spack.spec.ArchSpec(constraint_tuple)
+ assert not architecture.satisfies(constraint, strict=True)