diff options
| author | Vitaly Buka <vitalybuka@google.com> | 2017-04-13 20:25:24 +0000 |
|---|---|---|
| committer | Vitaly Buka <vitalybuka@google.com> | 2017-04-13 20:25:24 +0000 |
| commit | 74b6a82c0cde197a7d8b04ff6dc786439aa817b6 (patch) | |
| tree | 28773e505adc134477427761377cdfde039db8be | |
| parent | 958cd8f993d6b098a26a34deff31f1669688a830 (diff) | |
| download | bcm5719-llvm-74b6a82c0cde197a7d8b04ff6dc786439aa817b6.tar.gz bcm5719-llvm-74b6a82c0cde197a7d8b04ff6dc786439aa817b6.zip | |
[msan] Fix msan_test.cc by checking bind results before assuming IPv6 supported.
llvm-svn: 300250
| -rw-r--r-- | compiler-rt/lib/msan/tests/msan_test.cc | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/compiler-rt/lib/msan/tests/msan_test.cc b/compiler-rt/lib/msan/tests/msan_test.cc index eebce5ee293..dd81c4d798f 100644 --- a/compiler-rt/lib/msan/tests/msan_test.cc +++ b/compiler-rt/lib/msan/tests/msan_test.cc @@ -890,6 +890,9 @@ class SocketAddr { virtual ~SocketAddr() = default; virtual struct sockaddr *ptr() = 0; virtual size_t size() const = 0; + + template <class... Args> + static std::unique_ptr<SocketAddr> Create(int family, Args... args); }; class SocketAddr4 : public SocketAddr { @@ -928,6 +931,13 @@ class SocketAddr6 : public SocketAddr { sockaddr_in6 sai_; }; +template <class... Args> +std::unique_ptr<SocketAddr> SocketAddr::Create(int family, Args... args) { + if (family == AF_INET) + return std::unique_ptr<SocketAddr>(new SocketAddr4(args...)); + return std::unique_ptr<SocketAddr>(new SocketAddr6(args...)); +} + class MemorySanitizerIpTest : public ::testing::TestWithParam<int> { public: void SetUp() override { @@ -936,9 +946,7 @@ class MemorySanitizerIpTest : public ::testing::TestWithParam<int> { template <class... Args> std::unique_ptr<SocketAddr> CreateSockAddr(Args... args) const { - if (GetParam() == AF_INET) - return std::unique_ptr<SocketAddr>(new SocketAddr4(args...)); - return std::unique_ptr<SocketAddr>(new SocketAddr6(args...)); + return SocketAddr::Create(GetParam(), args...); } int CreateSocket(int socket_type) const { @@ -952,7 +960,8 @@ std::vector<int> GetAvailableIpSocketFamilies() { for (int i : {AF_INET, AF_INET6}) { int s = socket(i, SOCK_STREAM, 0); if (s > 0) { - result.push_back(i); + auto sai = SocketAddr::Create(i, 0); + if (bind(s, sai->ptr(), sai->size()) == 0) result.push_back(i); close(s); } } |

