summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVitaly Buka <vitalybuka@google.com>2017-04-13 20:25:24 +0000
committerVitaly Buka <vitalybuka@google.com>2017-04-13 20:25:24 +0000
commit74b6a82c0cde197a7d8b04ff6dc786439aa817b6 (patch)
tree28773e505adc134477427761377cdfde039db8be
parent958cd8f993d6b098a26a34deff31f1669688a830 (diff)
downloadbcm5719-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.cc17
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);
}
}
OpenPOWER on IntegriCloud