I was puzzled by the behavior of ArchSpec::IsExactMatch() and IsCompatibleMatch() yesterday, so I created a couple of unit tests to document the current behavior. Most of the tests make perfect sense, but a few edge cases really don't behave like I would have expected them to.
> { > ArchSpec A("arm64-*-*"); > ArchSpec B("arm64-apple-ios"); > ASSERT_FALSE(A.IsExactMatch(B)); > // FIXME: This looks unintuitive and we should investigate whether > // this is the desired behavior. > ASSERT_FALSE(A.IsCompatibleMatch(B)); > } > { > ArchSpec A("x86_64-*-*"); > ArchSpec B("x86_64-apple-ios-simulator"); > ASSERT_FALSE(A.IsExactMatch(B)); > // FIXME: See above, though the extra environment complicates things. > ASSERT_FALSE(A.IsCompatibleMatch(B)); > } > { > ArchSpec A("x86_64"); > ArchSpec B("x86_64-apple-macosx10.14"); > // FIXME: The exact match also looks unintuitive. > ASSERT_TRUE(A.IsExactMatch(B)); > ASSERT_TRUE(A.IsCompatibleMatch(B)); > } > Particularly, I believe that: - ArchSpec("x86_64-*-*") and ArchSpec("x86_64") should behave the same. - ArchSpec("x86_64").IsExactMatch("x86_64-apple-macosx10.14") should be false. - ArchSpec("x86_64-*-*").IsCompatibleMath("x86_64-apple-macosx") should be true. Does anyone disagree with any of these statements? I fully understand that changing any of these behaviors will undoubtedly break one or the other edge case, but I think it would be important to build on a foundation that actually makes sense if we want to be able to reason about the architecture matching logic at all. let me know what you think! -- adrian _______________________________________________ lldb-dev mailing list lldb-dev@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev