diff options
author | Massimiliano Culpo <massimiliano.culpo@gmail.com> | 2020-03-07 13:58:33 +0100 |
---|---|---|
committer | Todd Gamblin <tgamblin@llnl.gov> | 2020-03-20 11:42:22 -0700 |
commit | 901bed48ec2d3e03d45014fdbfc936305897d2e2 (patch) | |
tree | fc41d095fbf2cd432fa378490ed3b6d1303cc220 | |
parent | cc8d9eee8ec7fe60235b00d52170f717c703dc0b (diff) | |
download | spack-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)
-rw-r--r-- | lib/spack/spack/spec.py | 4 | ||||
-rw-r--r-- | lib/spack/spack/test/architecture.py | 13 |
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) |